summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua2
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua2
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua2
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/adblock_css.htm108
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm37
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/config_css.htm13
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/logread.htm16
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/runtime.htm16
-rw-r--r--applications/luci-app-aria2/Makefile2
-rw-r--r--applications/luci-app-asterisk/luasrc/asterisk.lua746
-rw-r--r--applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua245
-rw-r--r--applications/luci-app-asterisk/luasrc/controller/asterisk.lua194
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua91
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua49
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua22
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua391
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua47
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua45
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua53
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua89
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua29
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua53
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua100
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua77
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua98
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua41
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua151
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua125
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua103
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua123
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua38
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua17
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua145
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua104
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua86
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua94
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua48
-rw-r--r--applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua51
-rw-r--r--applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm13
-rw-r--r--applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm244
-rw-r--r--applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm164
-rw-r--r--applications/luci-app-asterisk/po/ca/asterisk.po680
-rw-r--r--applications/luci-app-asterisk/po/cs/asterisk.po11
-rw-r--r--applications/luci-app-asterisk/po/de/asterisk.po131
-rw-r--r--applications/luci-app-asterisk/po/el/asterisk.po71
-rw-r--r--applications/luci-app-asterisk/po/en/asterisk.po680
-rw-r--r--applications/luci-app-asterisk/po/es/asterisk.po355
-rw-r--r--applications/luci-app-asterisk/po/fr/asterisk.po569
-rw-r--r--applications/luci-app-asterisk/po/he/asterisk.po194
-rw-r--r--applications/luci-app-asterisk/po/hu/asterisk.po134
-rw-r--r--applications/luci-app-asterisk/po/it/asterisk.po162
-rw-r--r--applications/luci-app-asterisk/po/ja/asterisk.po44
-rw-r--r--applications/luci-app-asterisk/po/ms/asterisk.po611
-rw-r--r--applications/luci-app-asterisk/po/no/asterisk.po12
-rw-r--r--applications/luci-app-asterisk/po/pl/asterisk.po75
-rw-r--r--applications/luci-app-asterisk/po/pt-br/asterisk.po691
-rw-r--r--applications/luci-app-asterisk/po/pt/asterisk.po150
-rw-r--r--applications/luci-app-asterisk/po/ro/asterisk.po54
-rw-r--r--applications/luci-app-asterisk/po/ru/asterisk.po515
-rw-r--r--applications/luci-app-asterisk/po/sk/asterisk.po0
-rw-r--r--applications/luci-app-asterisk/po/sv/asterisk.po0
-rw-r--r--applications/luci-app-asterisk/po/templates/asterisk.pot0
-rw-r--r--applications/luci-app-asterisk/po/tr/asterisk.po12
-rw-r--r--applications/luci-app-asterisk/po/uk/asterisk.po79
-rw-r--r--applications/luci-app-asterisk/po/vi/asterisk.po680
-rw-r--r--applications/luci-app-asterisk/po/zh-cn/asterisk.po171
-rw-r--r--applications/luci-app-asterisk/po/zh-tw/asterisk.po13
-rw-r--r--applications/luci-app-asterisk/root/etc/config/asterisk231
-rwxr-xr-xapplications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk11
-rw-r--r--applications/luci-app-banip/luasrc/view/banip/banip_css.htm36
-rw-r--r--applications/luci-app-banip/luasrc/view/banip/runtime.htm2
-rw-r--r--applications/luci-app-ddns/Makefile2
-rw-r--r--applications/luci-app-dynapoint/Makefile2
-rw-r--r--applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm2
-rw-r--r--applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm5
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua35
-rw-r--r--applications/luci-app-opkg/Makefile14
-rw-r--r--applications/luci-app-opkg/luasrc/controller/opkg.lua100
-rw-r--r--applications/luci-app-opkg/luasrc/view/opkg.htm958
-rw-r--r--applications/luci-app-opkg/po/ca/opkg.po308
-rw-r--r--applications/luci-app-opkg/po/cs/opkg.po306
-rw-r--r--applications/luci-app-opkg/po/de/opkg.po312
-rw-r--r--applications/luci-app-opkg/po/el/opkg.po305
-rw-r--r--applications/luci-app-opkg/po/en/opkg.po305
-rw-r--r--applications/luci-app-opkg/po/es/opkg.po308
-rw-r--r--applications/luci-app-opkg/po/fr/opkg.po308
-rw-r--r--applications/luci-app-opkg/po/he/opkg.po301
-rw-r--r--applications/luci-app-opkg/po/hu/opkg.po306
-rw-r--r--applications/luci-app-opkg/po/it/opkg.po308
-rw-r--r--applications/luci-app-opkg/po/ja/opkg.po309
-rw-r--r--applications/luci-app-opkg/po/ko/opkg.po305
-rw-r--r--applications/luci-app-opkg/po/ms/opkg.po304
-rw-r--r--applications/luci-app-opkg/po/no/opkg.po303
-rw-r--r--applications/luci-app-opkg/po/pl/opkg.po310
-rw-r--r--applications/luci-app-opkg/po/pt-br/opkg.po309
-rw-r--r--applications/luci-app-opkg/po/pt/opkg.po308
-rw-r--r--applications/luci-app-opkg/po/ro/opkg.po304
-rw-r--r--applications/luci-app-opkg/po/ru/opkg.po311
-rw-r--r--applications/luci-app-opkg/po/sk/opkg.po289
-rw-r--r--applications/luci-app-opkg/po/sv/opkg.po306
-rw-r--r--applications/luci-app-opkg/po/templates/opkg.pot281
-rw-r--r--applications/luci-app-opkg/po/tr/opkg.po297
-rw-r--r--applications/luci-app-opkg/po/uk/opkg.po307
-rw-r--r--applications/luci-app-opkg/po/vi/opkg.po303
-rw-r--r--applications/luci-app-opkg/po/zh-cn/opkg.po307
-rw-r--r--applications/luci-app-opkg/po/zh-tw/opkg.po306
-rw-r--r--applications/luci-app-privoxy/Makefile2
-rw-r--r--applications/luci-app-radicale/Makefile2
-rw-r--r--applications/luci-app-transmission/Makefile2
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua2
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua2
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua2
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua2
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm13
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm17
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm20
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/travelmate_css.htm116
-rw-r--r--collections/luci/Makefile2
-rw-r--r--libs/luci-lib-ipkg/Makefile (renamed from applications/luci-app-asterisk/Makefile)5
-rw-r--r--libs/luci-lib-ipkg/luasrc/model/ipkg.lua (renamed from modules/luci-base/luasrc/model/ipkg.lua)0
-rw-r--r--libs/luci-lib-ipkg/luasrc/model/ipkg.luadoc (renamed from modules/luci-base/luasrc/model/ipkg.luadoc)0
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/cbi.js184
-rw-r--r--modules/luci-base/luasrc/sys.lua94
-rw-r--r--modules/luci-base/luasrc/sys.luadoc36
-rw-r--r--modules/luci-base/luasrc/view/cbi/apply_widget.htm96
-rw-r--r--modules/luci-base/luasrc/view/cbi/dynlist.htm18
-rw-r--r--modules/luci-base/luasrc/view/cbi/value.htm2
-rw-r--r--modules/luci-base/po/de/base.po192
-rw-r--r--modules/luci-base/po/zh-cn/base.po160
-rw-r--r--modules/luci-mod-freifunk/Makefile2
-rw-r--r--modules/luci-mod-status/luasrc/view/admin_status/index.htm80
-rw-r--r--modules/luci-mod-system/luasrc/controller/admin/system.lua212
-rw-r--r--modules/luci-mod-system/luasrc/model/cbi/admin_system/ipkg.lua64
-rw-r--r--modules/luci-mod-system/luasrc/view/admin_system/ipkg.htm10
-rw-r--r--modules/luci-mod-system/luasrc/view/admin_system/packages.htm213
-rw-r--r--themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css226
-rw-r--r--themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css2
-rw-r--r--themes/luci-theme-material/htdocs/luci-static/material/cascade.css2
-rw-r--r--themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css257
139 files changed, 10497 insertions, 11332 deletions
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
index b3b3f8d0eb..4d1a9f7e63 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
@@ -23,7 +23,7 @@ if fs.stat(input).size >= 102400 then
end
m = SimpleForm("input", nil)
-m:append(Template("adblock/config_css"))
+m:append(Template("adblock/adblock_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
index 1e98f0204b..1e7eda9032 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
@@ -22,7 +22,7 @@ if fs.stat(input).size >= 102400 then
end
m = SimpleForm("input", nil)
-m:append(Template("adblock/config_css"))
+m:append(Template("adblock/adblock_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
index a78d9af4ac..03dcecf1aa 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
@@ -23,7 +23,7 @@ if fs.stat(input).size >= 102400 then
end
m = SimpleForm("input", nil)
-m:append(Template("adblock/config_css"))
+m:append(Template("adblock/adblock_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/adblock_css.htm b/applications/luci-app-adblock/luasrc/view/adblock/adblock_css.htm
new file mode 100644
index 0000000000..5d95d132df
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/view/adblock/adblock_css.htm
@@ -0,0 +1,108 @@
+<style type="text/css">
+ textarea
+ {
+ width: 100%;
+ height: 450px;
+ border: 1px solid #cccccc;
+ padding: 5px;
+ font-size: 12px;
+ font-family: monospace;
+ resize: none;
+ white-space: pre;
+ overflow-wrap: normal;
+ overflow-x: scroll;
+ }
+
+ select[readonly],
+ textarea[readonly]
+ {
+ width: 100%;
+ height: 450px;
+ border: 1px solid #cccccc;
+ padding: 5px;
+ font-size: 12px;
+ font-family: monospace;
+ resize: none;
+ pointer-events: auto;
+ cursor: auto;
+ }
+
+ .table.cbi-section-table .th,
+ .table.cbi-section-table .td,
+ .cbi-section-table-cell,
+ .cbi-section-table-row,
+ .tr[data-title]::before
+ {
+ text-align: left;
+ vertical-align: top;
+ margin-left: 0px;
+ padding-left: 2px;
+ }
+
+ .table.cbi-section-table .th
+ {
+ white-space: nowrap;
+ }
+
+ .cbi-section-table-row > .cbi-value-field .cbi-input-select,
+ .table.cbi-section-table select
+ {
+ width: 70px;
+ }
+
+ .cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
+ .table.cbi-section-table input[type="text"],
+ .cbi-dynlist > .item,
+ .table.cbi-section-table input,
+ .cbi-dynlist
+ {
+ display: inline-block;
+ width: 7em;
+ margin: 1px;
+ }
+
+ .td.cbi-value-field .cbi-button
+ {
+ width: auto;
+ margin: 1px 0 1px -2px;
+ }
+
+ .btn,
+ .cbi-button,
+ .item::after
+ {
+ -webkit-appearance: menulist;
+ }
+
+ .cbi-input-checkbox
+ {
+ height: 1em;
+ }
+
+ .cbi-input-text
+ {
+ text-align: left;
+ padding-left: 2px;
+ outline: none;
+ box-shadow: none;
+ background: transparent;
+ width: 7em;
+ }
+
+ .runtime
+ {
+ color: #37c;
+ font-weight: bold;
+ display: inline-block;
+ width: 100%;
+ padding-top: 0.5rem;
+ }
+
+ .button_running
+ {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin: 0 5px;
+ }
+</style>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
index a6f2286513..e145a3b4ef 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
@@ -7,42 +7,7 @@ This is free software, licensed under the Apache License, Version 2.0
local anonclass = (not self.anonymous or self.sectiontitle) and "named" or "anonymous"
-%>
-<style type="text/css">
-.table.cbi-section-table .th,
-.table.cbi-section-table .td,
-.cbi-section-table-cell,
-.cbi-section-table-row,
-.tr[data-title]::before
-{
- text-align: left;
- vertical-align: top;
- margin-left: 0px;
- padding-left: 2px;
-}
-.table.cbi-section-table .th
-{
- white-space: nowrap;
-}
-.table.cbi-section-table input
-{
- width: 7em;
-}
-.cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
-.table.cbi-section-table input
-{
- width: 7em;
-}
-
-.cbi-input-text
-{
- text-align: left;
- padding-left: 2px;
- outline: none;
- box-shadow: none;
- background: transparent;
- width: 7em;
-}
-</style>
+<%+adblock/adblock_css%>
<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
<% if self.title then -%>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm
deleted file mode 100644
index 2233a15e31..0000000000
--- a/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm
+++ /dev/null
@@ -1,13 +0,0 @@
-<style type="text/css">
- textarea
- {
- border: 1px solid #cccccc;
- padding: 5px;
- font-size: 12px;
- font-family: monospace;
- resize: none;
- white-space: pre;
- overflow-wrap: normal;
- overflow-x: scroll;
- }
-</style>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
index b505233490..7fe254ae80 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
@@ -4,21 +4,7 @@ This is free software, licensed under the Apache License, Version 2.0
-%>
<%+header%>
-<style type="text/css">
- select[readonly],
- textarea[readonly]
- {
- width: 100%;
- height: 450px;
- border: 1px solid #cccccc;
- padding: 5px;
- font-size: 12px;
- font-family: monospace;
- resize: none;
- pointer-events: auto;
- cursor: auto;
- }
-</style>
+<%+adblock/adblock_css%>
<script type="text/javascript">
//<![CDATA[
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
index 4f7cfbf8a1..ee20133d5a 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
@@ -3,17 +3,7 @@ Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
-<style type="text/css">
-.runtime
-{
- color: #37c;
- font-weight: bold;
- display: inline-block;
- width: 100%;
- padding-top: 0.5rem;
-}
-</style>
-
+<%+adblock/adblock_css%>
<script type="text/javascript">
//<![CDATA[
function status_update(json)
@@ -188,7 +178,7 @@ This is free software, licensed under the Apache License, Version 2.0
<label class="cbi-value-title" for="button_1"><%:Suspend / Resume Adblock%></label>
<div class="cbi-value-field">
<input class="cbi-button cbi-button-reset" id="btn1" type="button" value="" onclick="btn_action(this)" />
- <span id="btn1_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
+ <span id="btn1_running" class="btn_running"></span>
</div>
</div>
<p />
@@ -196,6 +186,6 @@ This is free software, licensed under the Apache License, Version 2.0
<label class="cbi-value-title" for="button_2"><%:Refresh Blocklist Sources%></label>
<div class="cbi-value-field">
<input class="cbi-button cbi-button-apply" id="btn2" type="button" value="" onclick="btn_action(this)" />
- <span id="btn2_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
+ <span id="btn2_running" class="btn_running"></span>
</div>
</div>
diff --git a/applications/luci-app-aria2/Makefile b/applications/luci-app-aria2/Makefile
index f5b006c357..e957c436f1 100644
--- a/applications/luci-app-aria2/Makefile
+++ b/applications/luci-app-aria2/Makefile
@@ -21,7 +21,7 @@ PKG_MAINTAINER:=Hsing-Wang Liao <kuoruan@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Aria2
-LUCI_DEPENDS:=+aria2
+LUCI_DEPENDS:=+luci-lib-ipkg +aria2
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
diff --git a/applications/luci-app-asterisk/luasrc/asterisk.lua b/applications/luci-app-asterisk/luasrc/asterisk.lua
deleted file mode 100644
index da94c556f9..0000000000
--- a/applications/luci-app-asterisk/luasrc/asterisk.lua
+++ /dev/null
@@ -1,746 +0,0 @@
--- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-module("luci.asterisk", package.seeall)
-require("luci.asterisk.cc_idd")
-
-local _io = require("io")
-local uci = require("luci.model.uci").cursor()
-local sys = require("luci.sys")
-local util = require("luci.util")
-
-AST_BIN = "/usr/sbin/asterisk"
-AST_FLAGS = "-r -x"
-
-
---- LuCI Asterisk - Resync uci context
-function uci_resync()
- uci = luci.model.uci.cursor()
-end
-
---- LuCI Asterisk io interface
--- Handles low level io.
--- @type module
-io = luci.util.class()
-
---- Execute command and return output
--- @param command String containing the command to execute
--- @return String containing the command output
-function io.exec(command)
- local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
- assert(fh, "Failed to invoke asterisk")
-
- local buffer = fh:read("*a")
- fh:close()
- return buffer
-end
-
---- Execute command and invoke given callback for each read line
--- @param command String containing the command to execute
--- @param callback Function to call back for each line
--- @return Always true
-function io.execl(command, callback)
- local ln
- local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
- assert(fh, "Failed to invoke asterisk")
-
- repeat
- ln = fh:read("*l")
- callback(ln)
- until not ln
-
- fh:close()
- return true
-end
-
---- Execute command and return an iterator that returns one line per invocation
--- @param command String containing the command to execute
--- @return Iterator function
-function io.execi(command)
- local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
- assert(fh, "Failed to invoke asterisk")
-
- return function()
- local ln = fh:read("*l")
- if not ln then fh:close() end
- return ln
- end
-end
-
-
---- LuCI Asterisk - core status
-core = luci.util.class()
-
---- Retrieve version string.
--- @return String containing the reported asterisk version
-function core.version(self)
- local version = io.exec("core show version")
- return version:gsub(" *\n", "")
-end
-
-
---- LuCI Asterisk - SIP information.
--- @type module
-sip = luci.util.class()
-
---- Get a list of known SIP peers
--- @return Table containing each SIP peer
-function sip.peers(self)
- local head = false
- local peers = { }
-
- for line in io.execi("sip show peers") do
- if not head then
- head = true
- elseif not line:match(" sip peers ") then
- local online, delay, id, uid
- local name, host, dyn, nat, acl, port, status =
- line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)")
-
- if host == '(Unspecified)' then host = nil end
- if port == '0' then port = nil else port = tonumber(port) end
-
- dyn = ( dyn == 'D' and true or false )
- nat = ( nat == 'N' and true or false )
- acl = ( acl ~= ' ' and true or false )
-
- online, delay = status:match("(OK) %((%d+) ms%)")
-
- if online == 'OK' then
- online = true
- delay = tonumber(delay)
- elseif status ~= 'Unmonitored' then
- online = false
- delay = 0
- else
- online = nil
- delay = 0
- end
-
- id, uid = name:match("(.+)/(.+)")
-
- if not ( id and uid ) then
- id = name .. "..."
- uid = nil
- end
-
- peers[#peers+1] = {
- online = online,
- delay = delay,
- name = id,
- user = uid,
- dynamic = dyn,
- nat = nat,
- acl = acl,
- host = host,
- port = port
- }
- end
- end
-
- return peers
-end
-
---- Get information of given SIP peer
--- @param peer String containing the name of the SIP peer
-function sip.peer(peer)
- local info = { }
- local keys = { }
-
- for line in io.execi("sip show peer " .. peer) do
- if #line > 0 then
- local key, val = line:match("(.-) *: +(.*)")
- if key and val then
-
- key = key:gsub("^ +",""):gsub(" +$", "")
- val = val:gsub("^ +",""):gsub(" +$", "")
-
- if key == "* Name" then
- key = "Name"
- elseif key == "Addr->IP" then
- info.address, info.port = val:match("(.+) Port (.+)")
- info.port = tonumber(info.port)
- elseif key == "Status" then
- info.online, info.delay = val:match("(OK) %((%d+) ms%)")
- if info.online == 'OK' then
- info.online = true
- info.delay = tonumber(info.delay)
- elseif status ~= 'Unmonitored' then
- info.online = false
- info.delay = 0
- else
- info.online = nil
- info.delay = 0
- end
- end
-
- if val == 'Yes' or val == 'yes' or val == '<Set>' then
- val = true
- elseif val == 'No' or val == 'no' then
- val = false
- elseif val == '<Not set>' or val == '(none)' then
- val = nil
- end
-
- keys[#keys+1] = key
- info[key] = val
- end
- end
- end
-
- return info, keys
-end
-
-
---- LuCI Asterisk - Internal helpers
--- @type module
-tools = luci.util.class()
-
---- Convert given value to a list of tokens. Split by white space.
--- @param val String or table value
--- @return Table containing tokens
-function tools.parse_list(v)
- local tokens = { }
-
- v = type(v) == "table" and v or { v }
- for _, v in ipairs(v) do
- if type(v) == "string" then
- for v in v:gmatch("(%S+)") do
- tokens[#tokens+1] = v
- end
- end
- end
-
- return tokens
-end
-
---- Convert given list to a collection of hyperlinks
--- @param list Table of tokens
--- @param url String pattern or callback function to construct urls (optional)
--- @param sep String containing the separator (optional, default is ", ")
--- @return String containing the html fragment
-function tools.hyperlinks(list, url, sep)
- local html
-
- local function mkurl(p, t)
- if type(p) == "string" then
- return p:format(t)
- elseif type(p) == "function" then
- return p(t)
- else
- return '#'
- end
- end
-
- list = list or { }
- url = url or "%s"
- sep = sep or ", "
-
- for _, token in ipairs(list) do
- html = ( html and html .. sep or '' ) ..
- '<a href="%s">%s</a>' %{ mkurl(url, token), token }
- end
-
- return html or ''
-end
-
-
---- LuCI Asterisk - International Direct Dialing Prefixes
--- @type module
-idd = luci.util.class()
-
---- Lookup the country name for the given IDD code.
--- @param country String containing IDD code
--- @return String containing the country name
-function idd.country(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if type(v[3]) == "table" then
- for _, v2 in ipairs(v[3]) do
- if v2 == tostring(c) then
- return v[1]
- end
- end
- elseif v[3] == tostring(c) then
- return v[1]
- end
- end
-end
-
---- Lookup the country code for the given IDD code.
--- @param country String containing IDD code
--- @return Table containing the country code(s)
-function idd.cc(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if type(v[3]) == "table" then
- for _, v2 in ipairs(v[3]) do
- if v2 == tostring(c) then
- return type(v[2]) == "table"
- and v[2] or { v[2] }
- end
- end
- elseif v[3] == tostring(c) then
- return type(v[2]) == "table"
- and v[2] or { v[2] }
- end
- end
-end
-
---- Lookup the IDD code(s) for the given country.
--- @param idd String containing the country name
--- @return Table containing the IDD code(s)
-function idd.idd(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if v[1]:lower():match(c:lower()) then
- return type(v[3]) == "table"
- and v[3] or { v[3] }
- end
- end
-end
-
---- Populate given CBI field with IDD codes.
--- @param field CBI option object
--- @return (nothing)
-function idd.cbifill(o)
- for i, v in ipairs(cc_idd.CC_IDD) do
- o:value("_%i" % i, util.pcdata(v[1]))
- end
-
- o.formvalue = function(...)
- local val = luci.cbi.Value.formvalue(...)
- if val:sub(1,1) == "_" then
- val = tonumber((val:gsub("^_", "")))
- if val then
- return type(cc_idd.CC_IDD[val][3]) == "table"
- and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] }
- end
- end
- return val
- end
-
- o.cfgvalue = function(...)
- local val = luci.cbi.Value.cfgvalue(...)
- if val then
- val = tools.parse_list(val)
- for i, v in ipairs(cc_idd.CC_IDD) do
- if type(v[3]) == "table" then
- if v[3][1] == val[1] then
- return "_%i" % i
- end
- else
- if v[3] == val[1] then
- return "_%i" % i
- end
- end
- end
- end
- return val
- end
-end
-
-
---- LuCI Asterisk - Country Code Prefixes
--- @type module
-cc = luci.util.class()
-
---- Lookup the country name for the given CC code.
--- @param country String containing CC code
--- @return String containing the country name
-function cc.country(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if type(v[2]) == "table" then
- for _, v2 in ipairs(v[2]) do
- if v2 == tostring(c) then
- return v[1]
- end
- end
- elseif v[2] == tostring(c) then
- return v[1]
- end
- end
-end
-
---- Lookup the international dialing code for the given CC code.
--- @param cc String containing CC code
--- @return String containing IDD code
-function cc.idd(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if type(v[2]) == "table" then
- for _, v2 in ipairs(v[2]) do
- if v2 == tostring(c) then
- return type(v[3]) == "table"
- and v[3] or { v[3] }
- end
- end
- elseif v[2] == tostring(c) then
- return type(v[3]) == "table"
- and v[3] or { v[3] }
- end
- end
-end
-
---- Lookup the CC code(s) for the given country.
--- @param country String containing the country name
--- @return Table containing the CC code(s)
-function cc.cc(c)
- for _, v in ipairs(cc_idd.CC_IDD) do
- if v[1]:lower():match(c:lower()) then
- return type(v[2]) == "table"
- and v[2] or { v[2] }
- end
- end
-end
-
---- Populate given CBI field with CC codes.
--- @param field CBI option object
--- @return (nothing)
-function cc.cbifill(o)
- for i, v in ipairs(cc_idd.CC_IDD) do
- o:value("_%i" % i, util.pcdata(v[1]))
- end
-
- o.formvalue = function(...)
- local val = luci.cbi.Value.formvalue(...)
- if val:sub(1,1) == "_" then
- val = tonumber((val:gsub("^_", "")))
- if val then
- return type(cc_idd.CC_IDD[val][2]) == "table"
- and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] }
- end
- end
- return val
- end
-
- o.cfgvalue = function(...)
- local val = luci.cbi.Value.cfgvalue(...)
- if val then
- val = tools.parse_list(val)
- for i, v in ipairs(cc_idd.CC_IDD) do
- if type(v[2]) == "table" then
- if v[2][1] == val[1] then
- return "_%i" % i
- end
- else
- if v[2] == val[1] then
- return "_%i" % i
- end
- end
- end
- end
- return val
- end
-end
-
-
---- LuCI Asterisk - Dialzone
--- @type module
-dialzone = luci.util.class()
-
---- Parse a dialzone section
--- @param zone Table containing the zone info
--- @return Table with parsed information
-function dialzone.parse(z)
- if z['.name'] then
- return {
- trunks = tools.parse_list(z.uses),
- name = z['.name'],
- description = z.description or z['.name'],
- addprefix = z.addprefix,
- matches = tools.parse_list(z.match),
- intlmatches = tools.parse_list(z.international),
- countrycode = z.countrycode,
- localzone = z.localzone,
- localprefix = z.localprefix
- }
- end
-end
-
---- Get a list of known dial zones
--- @return Associative table of zones and table of zone names
-function dialzone.zones()
- local zones = { }
- local znames = { }
- uci:foreach("asterisk", "dialzone",
- function(z)
- zones[z['.name']] = dialzone.parse(z)
- znames[#znames+1] = z['.name']
- end)
- return zones, znames
-end
-
---- Get a specific dial zone
--- @param name Name of the dial zone
--- @return Table containing zone information
-function dialzone.zone(n)
- local zone
- uci:foreach("asterisk", "dialzone",
- function(z)
- if z['.name'] == n then
- zone = dialzone.parse(z)
- end
- end)
- return zone
-end
-
---- Find uci section hash for given zone number
--- @param idx Zone number
--- @return String containing the uci hash pointing to the section
-function dialzone.ucisection(i)
- local hash
- local index = 1
- i = tonumber(i)
- uci:foreach("asterisk", "dialzone",
- function(z)
- if not hash and index == i then
- hash = z['.name']
- end
- index = index + 1
- end)
- return hash
-end
-
-
---- LuCI Asterisk - Voicemailbox
--- @type module
-voicemail = luci.util.class()
-
---- Parse a voicemail section
--- @param zone Table containing the mailbox info
--- @return Table with parsed information
-function voicemail.parse(z)
- if z.number and #z.number > 0 then
- local v = {
- id = '%s@%s' %{ z.number, z.context or 'default' },
- number = z.number,
- context = z.context or 'default',
- name = z.name or z['.name'] or 'OpenWrt',
- zone = z.zone or 'homeloc',
- password = z.password or '0000',
- email = z.email or '',
- page = z.page or '',
- dialplans = { }
- }
-
- uci:foreach("asterisk", "dialplanvoice",
- function(s)
- if s.dialplan and #s.dialplan > 0 and
- s.voicebox == v.number
- then
- v.dialplans[#v.dialplans+1] = s.dialplan
- end
- end)
-
- return v
- end
-end
-
---- Get a list of known voicemail boxes
--- @return Associative table of boxes and table of box numbers
-function voicemail.boxes()
- local vboxes = { }
- local vnames = { }
- uci:foreach("asterisk", "voicemail",
- function(z)
- local v = voicemail.parse(z)
- if v then
- local n = '%s@%s' %{ v.number, v.context }
- vboxes[n] = v
- vnames[#vnames+1] = n
- end
- end)
- return vboxes, vnames
-end
-
---- Get a specific voicemailbox
--- @param number Number of the voicemailbox
--- @return Table containing mailbox information
-function voicemail.box(n)
- local box
- n = n:gsub("@.+$","")
- uci:foreach("asterisk", "voicemail",
- function(z)
- if z.number == tostring(n) then
- box = voicemail.parse(z)
- end
- end)
- return box
-end
-
---- Find all voicemailboxes within the given dialplan
--- @param plan Dialplan name or table
--- @return Associative table containing extensions mapped to mailbox info
-function voicemail.in_dialplan(p)
- local plan = type(p) == "string" and p or p.name
- local boxes = { }
- uci:foreach("asterisk", "dialplanvoice",
- function(s)
- if s.extension and #s.extension > 0 and s.dialplan == plan then
- local box = voicemail.box(s.voicebox)
- if box then
- boxes[s.extension] = box
- end
- end
- end)
- return boxes
-end
-
---- Remove voicemailbox and associated extensions from config
--- @param box Voicemailbox number or table
--- @param ctx UCI context to use (optional)
--- @return Boolean indicating success
-function voicemail.remove(v, ctx)
- ctx = ctx or uci
- local box = type(v) == "string" and v or v.number
- local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box})
- local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box})
- return ( ok1 or ok2 ) and true or false
-end
-
-
---- LuCI Asterisk - MeetMe Conferences
--- @type module
-meetme = luci.util.class()
-
---- Parse a meetme section
--- @param room Table containing the room info
--- @return Table with parsed information
-function meetme.parse(r)
- if r.room and #r.room > 0 then
- local v = {
- room = r.room,
- pin = r.pin or '',
- adminpin = r.adminpin or '',
- description = r._description or '',
- dialplans = { }
- }
-
- uci:foreach("asterisk", "dialplanmeetme",
- function(s)
- if s.dialplan and #s.dialplan > 0 and s.room == v.room then
- v.dialplans[#v.dialplans+1] = s.dialplan
- end
- end)
-
- return v
- end
-end
-
---- Get a list of known meetme rooms
--- @return Associative table of rooms and table of room numbers
-function meetme.rooms()
- local mrooms = { }
- local mnames = { }
- uci:foreach("asterisk", "meetme",
- function(r)
- local v = meetme.parse(r)
- if v then
- mrooms[v.room] = v
- mnames[#mnames+1] = v.room
- end
- end)
- return mrooms, mnames
-end
-
---- Get a specific meetme room
--- @param number Number of the room
--- @return Table containing room information
-function meetme.room(n)
- local room
- uci:foreach("asterisk", "meetme",
- function(r)
- if r.room == tostring(n) then
- room = meetme.parse(r)
- end
- end)
- return room
-end
-
---- Find all meetme rooms within the given dialplan
--- @param plan Dialplan name or table
--- @return Associative table containing extensions mapped to room info
-function meetme.in_dialplan(p)
- local plan = type(p) == "string" and p or p.name
- local rooms = { }
- uci:foreach("asterisk", "dialplanmeetme",
- function(s)
- if s.extension and #s.extension > 0 and s.dialplan == plan then
- local room = meetme.room(s.room)
- if room then
- rooms[s.extension] = room
- end
- end
- end)
- return rooms
-end
-
---- Remove meetme room and associated extensions from config
--- @param room Voicemailbox number or table
--- @param ctx UCI context to use (optional)
--- @return Boolean indicating success
-function meetme.remove(v, ctx)
- ctx = ctx or uci
- local room = type(v) == "string" and v or v.number
- local ok1 = ctx:delete_all("asterisk", "meetme", {room=room})
- local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room})
- return ( ok1 or ok2 ) and true or false
-end
-
-
---- LuCI Asterisk - Dialplan
--- @type module
-dialplan = luci.util.class()
-
---- Parse a dialplan section
--- @param plan Table containing the plan info
--- @return Table with parsed information
-function dialplan.parse(z)
- if z['.name'] then
- local plan = {
- zones = { },
- name = z['.name'],
- description = z.description or z['.name']
- }
-
- -- dialzones
- for _, name in ipairs(tools.parse_list(z.include)) do
- local zone = dialzone.zone(name)
- if zone then
- plan.zones[#plan.zones+1] = zone
- end
- end
-
- -- voicemailboxes
- plan.voicemailboxes = voicemail.in_dialplan(plan)
-
- -- meetme conferences
- plan.meetmerooms = meetme.in_dialplan(plan)
-
- return plan
- end
-end
-
---- Get a list of known dial plans
--- @return Associative table of plans and table of plan names
-function dialplan.plans()
- local plans = { }
- local pnames = { }
- uci:foreach("asterisk", "dialplan",
- function(p)
- plans[p['.name']] = dialplan.parse(p)
- pnames[#pnames+1] = p['.name']
- end)
- return plans, pnames
-end
-
---- Get a specific dial plan
--- @param name Name of the dial plan
--- @return Table containing plan information
-function dialplan.plan(n)
- local plan
- uci:foreach("asterisk", "dialplan",
- function(p)
- if p['.name'] == n then
- plan = dialplan.parse(p)
- end
- end)
- return plan
-end
diff --git a/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua b/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua
deleted file mode 100644
index 6ed8dfd450..0000000000
--- a/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua
+++ /dev/null
@@ -1,245 +0,0 @@
--- Licensed to the public under the Apache License 2.0.
-
-module "luci.asterisk.cc_idd"
-
-CC_IDD = {
--- Country, CC, IDD
- { "Afghanistan", "93", "00" },
- { "Albania", "355", "00" },
- { "Algeria", "213", "00" },
- { "American Samoa", "684", "00" },
- { "Andorra", "376", "00" },
- { "Angola", "244", "00" },
- { "Anguilla", "264", "011" },
- { "Antarctica", "672", "" },
- { "Antigua", "268", "011" },
- { "Argentina", "54", "00" },
- { "Armenia", "374", "00" },
- { "Aruba", "297", "00" },
- { "Ascension Island", "247", "00" },
- { "Australia", "61", "0011" },
- { "Austria", "43", "00" },
- { "Azberbaijan", "994", "00" },
- { "Bahamas", "242", "011" },
- { "Bahrain", "973", "00" },
- { "Bangladesh", "880", "00" },
- { "Barbados", "246", "011" },
- { "Barbuda", "268", "011" },
- { "Belarus", "375", "810" },
- { "Belgium", "32", "00" },
- { "Belize", "501", "00" },
- { "Benin", "229", "00" },
- { "Bermuda", "441", "011" },
- { "Bhutan", "975", "00" },
- { "Bolivia", "591", "00" },
- { "Bosnia", "387", "00" },
- { "Botswana", "267", "00" },
- { "Brazil", "55", "00" },
- { "British Virgin Islands", "284", "011" },
- { "Brunei", "673", "00" },
- { "Bulgaria", "359", "00" },
- { "Burkina Faso", "226", "00" },
- { "Burma (Myanmar)", "95", "00" },
- { "Burundi", "257", "00" },
- { "Cambodia", "855", "001" },
- { "Cameroon", "237", "00" },
- { "Canada", "1", "011" },
- { "Cape Verde Islands", "238", "0" },
- { "Cayman Islands", "345", "011" },
- { "Central African Rep.", "236", "00" },
- { "Chad", "235", "15" },
- { "Chile", "56", "00" },
- { "China", "86", "00" },
- { "Christmas Island", "61", "0011" },
- { "Cocos Islands", "61", "0011" },
- { "Colombia", "57", "00" },
- { "Comoros", "269", "00" },
- { "Congo", "242", "00" },
- { "Congo, Dem. Rep. of", "243", "00" },
- { "Cook Islands", "682", "00" },
- { "Costa Rica", "506", "00" },
- { "Croatia", "385", "00" },
- { "Cuba", "53", "119" },
- { "Cyprus", "357", "00" },
- { "Czech Republic", "420", "00" },
- { "Denmark", "45", "00" },
- { "Diego Garcia", "246", "00" },
- { "Djibouti", "253", "00" },
- { "Dominica", "767", "011" },
- { "Dominican Rep.", "809", "011" },
- { "Ecuador", "593", "00" },
- { "Egypt", "20", "00" },
- { "El Salvador", "503", "00" },
- { "Equatorial Guinea", "240", "00" },
- { "Eritrea", "291", "00" },
- { "Estonia", "372", "00" },
- { "Ethiopia", "251", "00" },
- { "Faeroe Islands", "298", "00" },
- { "Falkland Islands", "500", "00" },
- { "Fiji Islands", "679", "00" },
- { "Finland", "358", "00" },
- { "France", "33", "00" },
- { "French Antilles", "596", "00" },
- { "French Guiana", "594", "00" },
- { "French Polynesia", "689", "00" },
- { "Gabon", "241", "00" },
- { "Gambia", "220", "00" },
- { "Georgia", "995", "810" },
- { "Germany", "49", "00" },
- { "Ghana", "233", "00" },
- { "Gibraltar", "350", "00" },
- { "Greece", "30", "00" },
- { "Greenland", "299", "00" },
- { "Grenada", "473", "011" },
- { "Guadeloupe", "590", "00" },
- { "Guam", "671", "011" },
- { "Guantanamo Bay", "5399", "00" },
- { "Guatemala", "502", "00" },
- { "Guinea", "224", "00" },
- { "Guinea Bissau", "245", "00" },
- { "Guyana", "592", "001" },
- { "Haiti", "509", "00" },
- { "Honduras", "504", "00" },
- { "Hong Kong", "852", "001" },
- { "Hungary", "36", "00" },
- { "Iceland", "354", "00" },
- { "India", "91", "00" },
- { "Indonesia", "62", { "001", "008" } },
- { "Iran", "98", "00" },
- { "Iraq", "964", "00" },
- { "Ireland", "353", "00" },
- { "Israel", "972", "00" },
- { "Italy", "39", "00" },
- { "Ivory Coast", "225", "00" },
- { "Jamaica", "876", "011" },
- { "Japan", "81", "001" },
- { "Jordan", "962", "00" },
- { "Kazakhstan", "7", "810" },
- { "Kenya", "254", "000" },
- { "Kiribati", "686", "00" },
- { "Korea, North", "850", "00" },
- { "Korea, South", "82", "001" },
- { "Kuwait", "965", "00" },
- { "Kyrgyzstan", "996", "00" },
- { "Laos", "856", "00" },
- { "Latvia", "371", "00" },
- { "Lebanon", "961", "00" },
- { "Lesotho", "266", "00" },
- { "Liberia", "231", "00" },
- { "Libya", "218", "00" },
- { "Liechtenstein", "423", "00" },
- { "Lithuania", "370", "00" },
- { "Luxembourg", "352", "00" },
- { "Macau", "853", "00" },
- { "Macedonia", "389", "00" },
- { "Madagascar", "261", "00" },
- { "Malawi", "265", "00" },
- { "Malaysia", "60", "00" },
- { "Maldives", "960", "00" },
- { "Mali", "223", "00" },
- { "Malta", "356", "00" },
- { "Mariana Islands", "670", "011" },
- { "Marshall Islands", "692", "011" },
- { "Martinique", "596", "00" },
- { "Mauritania", "222", "00" },
- { "Mauritius", "230", "00" },
- { "Mayotte Islands", "269", "00" },
- { "Mexico", "52", "00" },
- { "Micronesia", "691", "011" },
- { "Midway Island", "808", "011" },
- { "Moldova", "373", "00" },
- { "Monaco", "377", "00" },
- { "Mongolia", "976", "001" },
- { "Montserrat", "664", "011" },
- { "Morocco", "212", "00" },
- { "Mozambique", "258", "00" },
- { "Myanmar (Burma)", "95", "00" },
- { "Namibia", "264", "00" },
- { "Nauru", "674", "00" },
- { "Nepal", "977", "00" },
- { "Netherlands", "31", "00" },
- { "Netherlands Antilles", "599", "00" },
- { "Nevis", "869", "011" },
- { "New Caledonia", "687", "00" },
- { "New Zealand", "64", "00" },
- { "Nicaragua", "505", "00" },
- { "Niger", "227", "00" },
- { "Nigeria", "234", "009" },
- { "Niue", "683", "00" },
- { "Norfolk Island", "672", "00" },
- { "Norway", "47", "00" },
- { "Oman", "968", "00" },
- { "Pakistan", "92", "00" },
- { "Palau", "680", "011" },
- { "Palestine", "970", "00" },
- { "Panama", "507", "00" },
- { "Papua New Guinea", "675", "05" },
- { "Paraguay", "595", "002" },
- { "Peru", "51", "00" },
- { "Philippines", "63", "00" },
- { "Poland", "48", "00" },
- { "Portugal", "351", "00" },
- { "Puerto Rico", { "787", "939" }, "011" },
- { "Qatar", "974", "00" },
- { "Reunion Island", "262", "00" },
- { "Romania", "40", "00" },
- { "Russia", "7", "810" },
- { "Rwanda", "250", "00" },
- { "St. Helena", "290", "00" },
- { "St. Kitts", "869", "011" },
- { "St. Lucia", "758", "011" },
- { "St. Perre & Miquelon", "508", "00" },
- { "St. Vincent", "784", "011" },
- { "San Marino", "378", "00" },
- { "Sao Tome & Principe", "239", "00" },
- { "Saudi Arabia", "966", "00" },
- { "Senegal", "221", "00" },
- { "Serbia", "381", "99" },
- { "Seychelles", "248", "00" },
- { "Sierra Leone", "232", "00" },
- { "Singapore", "65", "001" },
- { "Slovakia", "421", "00" },
- { "Slovenia", "386", "00" },
- { "Solomon Islands", "677", "00" },
- { "Somalia", "252", "00" },
- { "South Africa", "27", "09" },
- { "Spain", "34", "00" },
- { "Sri Lanka", "94", "00" },
- { "Sudan", "249", "00" },
- { "Suriname", "597", "00" },
- { "Swaziland", "268", "00" },
- { "Sweden", "46", "00" },
- { "Switzerland", "41", "00" },
- { "Syria", "963", "00" },
- { "Taiwan", "886", "002" },
- { "Tajikistan", "992", "810" },
- { "Tanzania", "255", "00" },
- { "Thailand", "66", "001" },
- { "Togo", "228", "00" },
- { "Tonga", "676", "00" },
- { "Trinidad & Tobago", "868", "011" },
- { "Tunisia", "216", "00" },
- { "Turkey", "90", "00" },
- { "Turkmenistan", "993", "810" },
- { "Turks & Caicos", "649", "011" },
- { "Tuvalu", "688", "00" },
- { "Uganda", "256", "000" },
- { "Ukraine", "380", "810" },
- { "United Arab Emirates", "971", "00" },
- { "United Kingdom", "44", "00" },
- { "Uruguay", "598", "00" },
- { "USA", "1", "011" },
- { "US Virgin Islands", "340", "011" },
- { "Uzbekistan", "998", "810" },
- { "Vanuatu", "678", "00" },
- { "Vatican City", "39", "00" },
- { "Venezuela", "58", "00" },
- { "Vietnam", "84", "00" },
- { "Wake Island", "808", "00" },
- { "Wallis & Futuna", "681", "19" },
- { "Western Samoa", "685", "00" },
- { "Yemen", "967", "00" },
- { "Yugoslavia", "381", "99" },
- { "Zambia", "260", "00" },
- { "Zimbabwe", "263", "00" }
-}
diff --git a/applications/luci-app-asterisk/luasrc/controller/asterisk.lua b/applications/luci-app-asterisk/luasrc/controller/asterisk.lua
deleted file mode 100644
index 4923584c9a..0000000000
--- a/applications/luci-app-asterisk/luasrc/controller/asterisk.lua
+++ /dev/null
@@ -1,194 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-module("luci.controller.asterisk", package.seeall)
-
-function index()
-
- entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80)
-
- entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1)
- entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2)
-
- entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3)
- entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4)
-
- entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5)
-
- entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4)
- entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1)
- entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2)
- entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3)
- entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4)
- entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5)
- entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6)
- entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7)
- entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8)
- entry({"admin", "services", "asterisk", "mod", "res", "feature"},
- cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 )
-
-
- entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk"
-
- entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1)
- entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true
- --entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true
-
- entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2)
- entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true
-
- entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3)
- entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1)
- entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2)
-
- entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4)
- entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1)
- entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2)
-
- entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5)
- entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true
- entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true
-
-end
-
-
-function handle_dialplan()
- local uci = luci.model.uci.cursor()
- local ast = require "luci.asterisk"
- local err = false
-
- for k, v in pairs(luci.http.formvaluetable("delzone")) do
- local plan = ast.dialplan.plan(k)
- if #v > 0 and plan then
- local newinc = { }
-
- for _, z in ipairs(plan.zones) do
- if z.name ~= v then
- newinc[#newinc+1] = z.name
- end
- end
-
- uci:delete("asterisk", plan.name, "include")
-
- if #newinc > 0 then
- uci:set("asterisk", plan.name, "include", newinc)
- end
- end
- end
-
- for k, v in pairs(luci.http.formvaluetable("addzone")) do
- local plan = ast.dialplan.plan(k)
- local zone = ast.dialzone.zone(v)
- if #v > 0 and plan and zone then
- local newinc = { zone.name }
-
- for _, z in ipairs(plan.zones) do
- newinc[#newinc+1] = z.name
- end
-
- uci:delete("asterisk", plan.name, "include")
-
- if #newinc > 0 then
- uci:set("asterisk", plan.name, "include", newinc)
- end
- end
- end
-
- for k, v in pairs(luci.http.formvaluetable("delvbox")) do
- local plan = ast.dialplan.plan(k)
- if #v > 0 and plan then
- uci:delete_all("asterisk", "dialplanvoice",
- { extension=v, dialplan=plan.name })
- end
- end
-
- for k, v in pairs(luci.http.formvaluetable("addvbox")) do
- local plan = ast.dialplan.plan(k)
- local vbox = ast.voicemail.box(v)
- if plan and vbox then
- local vext = luci.http.formvalue("addvboxext.%s" % plan.name)
- vext = ( vext and #vext > 0 ) and vext or vbox.number
- uci:section("asterisk", "dialplanvoice", nil, {
- dialplan = plan.name,
- extension = vext,
- voicebox = vbox.number,
- voicecontext = vbox.context
- })
- end
- end
-
- for k, v in pairs(luci.http.formvaluetable("delmeetme")) do
- local plan = ast.dialplan.plan(k)
- if #v > 0 and plan then
- uci:delete_all("asterisk", "dialplanmeetme",
- { extension=v, dialplan=plan.name })
- end
- end
-
- for k, v in pairs(luci.http.formvaluetable("addmeetme")) do
- local plan = ast.dialplan.plan(k)
- local meetme = ast.meetme.room(v)
- if plan and meetme then
- local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name)
- mext = ( mext and #mext > 0 ) and mext or meetme.room
- uci:section("asterisk", "dialplanmeetme", nil, {
- dialplan = plan.name,
- extension = mext,
- room = meetme.room
- })
- end
- end
-
- local aname = luci.http.formvalue("addplan")
- if aname and #aname > 0 then
- if aname:match("^[a-zA-Z0-9_]+$") then
- uci:section("asterisk", "dialplan", aname, { })
- else
- err = true
- end
- end
-
- local dname = luci.http.formvalue("delplan")
- if dname and #dname > 0 then
- if uci:get("asterisk", dname) == "dialplan" then
- uci:delete("asterisk", dname)
- uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname })
- uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname })
- end
- end
-
- uci:save("asterisk")
- ast.uci_resync()
-
- luci.template.render("asterisk/dialplans", { create_error = err })
-end
-
-function handle_dialzones()
- local ast = require "luci.asterisk"
- local uci = luci.model.uci.cursor()
- local err = false
-
- if luci.http.formvalue("newzone") then
- local name = luci.http.formvalue("newzone_name")
- if name and name:match("^[a-zA-Z0-9_]+$") then
- uci:section("asterisk", "dialzone", name, {
- uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}),
- match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {})
- })
- uci:save("asterisk")
- else
- err = true
- end
- end
-
- if luci.http.formvalue("delzone") then
- local name = luci.http.formvalue("delzone")
- if uci:get("asterisk", name) == "dialzone" then
- uci:delete("asterisk", name)
- uci:save("asterisk")
- end
- end
-
- luci.template.render("asterisk/dialzones", { create_error = err })
-end
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua
deleted file mode 100644
index d4daa68738..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua
+++ /dev/null
@@ -1,91 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "")
-dialplan.addremove = true
-dialplan.dynamic = true
-
-include = dialplan:option(MultiValue, "include", "Include zones and plans", "")
-cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end )
-cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end )
-
-dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "")
-dialplanexten.anonymous = true
-dialplanexten.addremove = true
-dialplanexten.dynamic = true
-
-
-dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "")
-dialplangeneral.anonymous = true
-dialplangeneral.addremove = true
-
-allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "")
-allowtransfer.rmempty = true
-
-canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
-canreinvite:value("yes", "Yes")
-canreinvite:value("nonat", "Yes when not behind NAT")
-canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
-canreinvite:value("no", "No")
-canreinvite.rmempty = true
-
-clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "")
-clearglobalvars.rmempty = true
-
-
-dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "")
-dialplangoto.anonymous = true
-dialplangoto.addremove = true
-dialplangoto.dynamic = true
-
-
-dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "")
-dialplanmeetme.anonymous = true
-dialplanmeetme.addremove = true
-dialplanmeetme.dynamic = true
-
-
-dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "")
-dialplansaytime.anonymous = true
-dialplansaytime.addremove = true
-dialplansaytime.dynamic = true
-
-
-dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "")
-dialplanvoice.anonymous = true
-dialplanvoice.addremove = true
-dialplanvoice.dynamic = true
-
-
-dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "")
-dialzone.addremove = true
-dialzone.template = "cbi/tblsection"
-
-addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "")
-addprefix.rmempty = true
-
---international = dialzone:option(DynamicList, "international", "Match International prefix", "")
-international = dialzone:option(Value, "international", "Match International prefix", "")
-international.rmempty = true
-
-localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "")
-localprefix.rmempty = true
-
-localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "")
-localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
-cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end )
-cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end )
-
-match = dialzone:option(Value, "match", "Match plan", "")
-match.rmempty = true
-
-uses = dialzone:option(ListValue, "uses", "Connection to use", "")
-uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" )
-cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end )
-cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end )
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua
deleted file mode 100644
index d0eaf34bfb..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua
+++ /dev/null
@@ -1,49 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-iax = cbimap:section(TypedSection, "iax", "IAX Connection", "")
-iax.addremove = true
-
-alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "")
-alwaysinternational.optional = true
-
-context = iax:option(ListValue, "context", "Context to use", "")
-context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
-cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
-cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
-
-countrycode = iax:option(Value, "countrycode", "Country Code for connection", "")
-countrycode.optional = true
-
-extension = iax:option(Value, "extension", "Add as Extension", "")
-extension.optional = true
-
-host = iax:option(Value, "host", "Host name (or blank)", "")
-host.optional = true
-
-internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "")
-internationalprefix.optional = true
-
-prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "")
-prefix.optional = true
-
-secret = iax:option(Value, "secret", "Secret", "")
-secret.optional = true
-
-timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "")
-timeout.optional = true
-
-type = iax:option(ListValue, "type", "Option type", "")
-type:value("friend", "Friend (outbound/inbound)")
-type:value("user", "User (inbound - authenticate by \"from\")")
-type:value("peer", "Peer (outbound - match by host)")
-type.optional = true
-
-username = iax:option(Value, "username", "User name", "")
-username.optional = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua
deleted file mode 100644
index dd79e46387..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua
+++ /dev/null
@@ -1,22 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "")
-
-audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "")
-
-
-meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "")
-meetme.addremove = true
-
-adminpin = meetme:option(Value, "adminpin", "Admin PIN", "")
-adminpin.password = true
-
-pin = meetme:option(Value, "pin", "Meeting PIN", "")
-pin.password = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua
deleted file mode 100644
index ac64754cb7..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua
+++ /dev/null
@@ -1,391 +0,0 @@
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-app_alarmreceiver = module:option(ListValue, "app_alarmreceiver", "Alarm Receiver Application", "")
-app_alarmreceiver:value("yes", "Load")
-app_alarmreceiver:value("no", "Do Not Load")
-app_alarmreceiver:value("auto", "Load as Required")
-app_alarmreceiver.rmempty = true
-
-app_authenticate = module:option(ListValue, "app_authenticate", "Authentication Application", "")
-app_authenticate:value("yes", "Load")
-app_authenticate:value("no", "Do Not Load")
-app_authenticate:value("auto", "Load as Required")
-app_authenticate.rmempty = true
-
-app_cdr = module:option(ListValue, "app_cdr", "Make sure asterisk doesn't save CDR", "")
-app_cdr:value("yes", "Load")
-app_cdr:value("no", "Do Not Load")
-app_cdr:value("auto", "Load as Required")
-app_cdr.rmempty = true
-
-app_chanisavail = module:option(ListValue, "app_chanisavail", "Check if channel is available", "")
-app_chanisavail:value("yes", "Load")
-app_chanisavail:value("no", "Do Not Load")
-app_chanisavail:value("auto", "Load as Required")
-app_chanisavail.rmempty = true
-
-app_chanspy = module:option(ListValue, "app_chanspy", "Listen in on any channel", "")
-app_chanspy:value("yes", "Load")
-app_chanspy:value("no", "Do Not Load")
-app_chanspy:value("auto", "Load as Required")
-app_chanspy.rmempty = true
-
-app_controlplayback = module:option(ListValue, "app_controlplayback", "Control Playback Application", "")
-app_controlplayback:value("yes", "Load")
-app_controlplayback:value("no", "Do Not Load")
-app_controlplayback:value("auto", "Load as Required")
-app_controlplayback.rmempty = true
-
-app_cut = module:option(ListValue, "app_cut", "Cuts up variables", "")
-app_cut:value("yes", "Load")
-app_cut:value("no", "Do Not Load")
-app_cut:value("auto", "Load as Required")
-app_cut.rmempty = true
-
-app_db = module:option(ListValue, "app_db", "Database access functions", "")
-app_db:value("yes", "Load")
-app_db:value("no", "Do Not Load")
-app_db:value("auto", "Load as Required")
-app_db.rmempty = true
-
-app_dial = module:option(ListValue, "app_dial", "Dialing Application", "")
-app_dial:value("yes", "Load")
-app_dial:value("no", "Do Not Load")
-app_dial:value("auto", "Load as Required")
-app_dial.rmempty = true
-
-app_dictate = module:option(ListValue, "app_dictate", "Virtual Dictation Machine Application", "")
-app_dictate:value("yes", "Load")
-app_dictate:value("no", "Do Not Load")
-app_dictate:value("auto", "Load as Required")
-app_dictate.rmempty = true
-
-app_directed_pickup = module:option(ListValue, "app_directed_pickup", "Directed Call Pickup Support", "")
-app_directed_pickup:value("yes", "Load")
-app_directed_pickup:value("no", "Do Not Load")
-app_directed_pickup:value("auto", "Load as Required")
-app_directed_pickup.rmempty = true
-
-app_directory = module:option(ListValue, "app_directory", "Extension Directory", "")
-app_directory:value("yes", "Load")
-app_directory:value("no", "Do Not Load")
-app_directory:value("auto", "Load as Required")
-app_directory.rmempty = true
-
-app_disa = module:option(ListValue, "app_disa", "DISA (Direct Inward System Access) Application", "")
-app_disa:value("yes", "Load")
-app_disa:value("no", "Do Not Load")
-app_disa:value("auto", "Load as Required")
-app_disa.rmempty = true
-
-app_dumpchan = module:option(ListValue, "app_dumpchan", "Dump channel variables Application", "")
-app_dumpchan:value("yes", "Load")
-app_dumpchan:value("no", "Do Not Load")
-app_dumpchan:value("auto", "Load as Required")
-app_dumpchan.rmempty = true
-
-app_echo = module:option(ListValue, "app_echo", "Simple Echo Application", "")
-app_echo:value("yes", "Load")
-app_echo:value("no", "Do Not Load")
-app_echo:value("auto", "Load as Required")
-app_echo.rmempty = true
-
-app_enumlookup = module:option(ListValue, "app_enumlookup", "ENUM Lookup", "")
-app_enumlookup:value("yes", "Load")
-app_enumlookup:value("no", "Do Not Load")
-app_enumlookup:value("auto", "Load as Required")
-app_enumlookup.rmempty = true
-
-app_eval = module:option(ListValue, "app_eval", "Reevaluates strings", "")
-app_eval:value("yes", "Load")
-app_eval:value("no", "Do Not Load")
-app_eval:value("auto", "Load as Required")
-app_eval.rmempty = true
-
-app_exec = module:option(ListValue, "app_exec", "Executes applications", "")
-app_exec:value("yes", "Load")
-app_exec:value("no", "Do Not Load")
-app_exec:value("auto", "Load as Required")
-app_exec.rmempty = true
-
-app_externalivr = module:option(ListValue, "app_externalivr", "External IVR application interface", "")
-app_externalivr:value("yes", "Load")
-app_externalivr:value("no", "Do Not Load")
-app_externalivr:value("auto", "Load as Required")
-app_externalivr.rmempty = true
-
-app_forkcdr = module:option(ListValue, "app_forkcdr", "Fork The CDR into 2 separate entities", "")
-app_forkcdr:value("yes", "Load")
-app_forkcdr:value("no", "Do Not Load")
-app_forkcdr:value("auto", "Load as Required")
-app_forkcdr.rmempty = true
-
-app_getcpeid = module:option(ListValue, "app_getcpeid", "Get ADSI CPE ID", "")
-app_getcpeid:value("yes", "Load")
-app_getcpeid:value("no", "Do Not Load")
-app_getcpeid:value("auto", "Load as Required")
-app_getcpeid.rmempty = true
-
-app_groupcount = module:option(ListValue, "app_groupcount", "Group Management Routines", "")
-app_groupcount:value("yes", "Load")
-app_groupcount:value("no", "Do Not Load")
-app_groupcount:value("auto", "Load as Required")
-app_groupcount.rmempty = true
-
-app_ices = module:option(ListValue, "app_ices", "Encode and Stream via icecast and ices", "")
-app_ices:value("yes", "Load")
-app_ices:value("no", "Do Not Load")
-app_ices:value("auto", "Load as Required")
-app_ices.rmempty = true
-
-app_image = module:option(ListValue, "app_image", "Image Transmission Application", "")
-app_image:value("yes", "Load")
-app_image:value("no", "Do Not Load")
-app_image:value("auto", "Load as Required")
-app_image.rmempty = true
-
-app_lookupblacklist = module:option(ListValue, "app_lookupblacklist", "Look up Caller*ID name/number from black", "")
-app_lookupblacklist:value("yes", "Load")
-app_lookupblacklist:value("no", "Do Not Load")
-app_lookupblacklist:value("auto", "Load as Required")
-app_lookupblacklist.rmempty = true
-
-app_lookupcidname = module:option(ListValue, "app_lookupcidname", "Look up CallerID Name from local database", "")
-app_lookupcidname:value("yes", "Load")
-app_lookupcidname:value("no", "Do Not Load")
-app_lookupcidname:value("auto", "Load as Required")
-app_lookupcidname.rmempty = true
-
-app_macro = module:option(ListValue, "app_macro", "Extension Macros", "")
-app_macro:value("yes", "Load")
-app_macro:value("no", "Do Not Load")
-app_macro:value("auto", "Load as Required")
-app_macro.rmempty = true
-
-app_math = module:option(ListValue, "app_math", "A simple math Application", "")
-app_math:value("yes", "Load")
-app_math:value("no", "Do Not Load")
-app_math:value("auto", "Load as Required")
-app_math.rmempty = true
-
-app_md5 = module:option(ListValue, "app_md5", "MD5 checksum Application", "")
-app_md5:value("yes", "Load")
-app_md5:value("no", "Do Not Load")
-app_md5:value("auto", "Load as Required")
-app_md5.rmempty = true
-
-app_milliwatt = module:option(ListValue, "app_milliwatt", "Digital Milliwatt (mu-law) Test Application", "")
-app_milliwatt:value("yes", "Load")
-app_milliwatt:value("no", "Do Not Load")
-app_milliwatt:value("auto", "Load as Required")
-app_milliwatt.rmempty = true
-
-app_mixmonitor = module:option(ListValue, "app_mixmonitor", "Record a call and mix the audio during the recording", "")
-app_mixmonitor:value("yes", "Load")
-app_mixmonitor:value("no", "Do Not Load")
-app_mixmonitor:value("auto", "Load as Required")
-app_mixmonitor.rmempty = true
-
-app_parkandannounce = module:option(ListValue, "app_parkandannounce", "Call Parking and Announce Application", "")
-app_parkandannounce:value("yes", "Load")
-app_parkandannounce:value("no", "Do Not Load")
-app_parkandannounce:value("auto", "Load as Required")
-app_parkandannounce.rmempty = true
-
-app_playback = module:option(ListValue, "app_playback", "Trivial Playback Application", "")
-app_playback:value("yes", "Load")
-app_playback:value("no", "Do Not Load")
-app_playback:value("auto", "Load as Required")
-app_playback.rmempty = true
-
-app_privacy = module:option(ListValue, "app_privacy", "Require phone number to be entered", "")
-app_privacy:value("yes", "Load")
-app_privacy:value("no", "Do Not Load")
-app_privacy:value("auto", "Load as Required")
-app_privacy.rmempty = true
-
-app_queue = module:option(ListValue, "app_queue", "True Call Queueing", "")
-app_queue:value("yes", "Load")
-app_queue:value("no", "Do Not Load")
-app_queue:value("auto", "Load as Required")
-app_queue.rmempty = true
-
-app_random = module:option(ListValue, "app_random", "Random goto", "")
-app_random:value("yes", "Load")
-app_random:value("no", "Do Not Load")
-app_random:value("auto", "Load as Required")
-app_random.rmempty = true
-
-app_read = module:option(ListValue, "app_read", "Read Variable Application", "")
-app_read:value("yes", "Load")
-app_read:value("no", "Do Not Load")
-app_read:value("auto", "Load as Required")
-app_read.rmempty = true
-
-app_readfile = module:option(ListValue, "app_readfile", "Read in a file", "")
-app_readfile:value("yes", "Load")
-app_readfile:value("no", "Do Not Load")
-app_readfile:value("auto", "Load as Required")
-app_readfile.rmempty = true
-
-app_realtime = module:option(ListValue, "app_realtime", "Realtime Data Lookup/Rewrite", "")
-app_realtime:value("yes", "Load")
-app_realtime:value("no", "Do Not Load")
-app_realtime:value("auto", "Load as Required")
-app_realtime.rmempty = true
-
-app_record = module:option(ListValue, "app_record", "Trivial Record Application", "")
-app_record:value("yes", "Load")
-app_record:value("no", "Do Not Load")
-app_record:value("auto", "Load as Required")
-app_record.rmempty = true
-
-app_sayunixtime = module:option(ListValue, "app_sayunixtime", "Say time", "")
-app_sayunixtime:value("yes", "Load")
-app_sayunixtime:value("no", "Do Not Load")
-app_sayunixtime:value("auto", "Load as Required")
-app_sayunixtime.rmempty = true
-
-app_senddtmf = module:option(ListValue, "app_senddtmf", "Send DTMF digits Application", "")
-app_senddtmf:value("yes", "Load")
-app_senddtmf:value("no", "Do Not Load")
-app_senddtmf:value("auto", "Load as Required")
-app_senddtmf.rmempty = true
-
-app_sendtext = module:option(ListValue, "app_sendtext", "Send Text Applications", "")
-app_sendtext:value("yes", "Load")
-app_sendtext:value("no", "Do Not Load")
-app_sendtext:value("auto", "Load as Required")
-app_sendtext.rmempty = true
-
-app_setcallerid = module:option(ListValue, "app_setcallerid", "Set CallerID Application", "")
-app_setcallerid:value("yes", "Load")
-app_setcallerid:value("no", "Do Not Load")
-app_setcallerid:value("auto", "Load as Required")
-app_setcallerid.rmempty = true
-
-app_setcdruserfield = module:option(ListValue, "app_setcdruserfield", "CDR user field apps", "")
-app_setcdruserfield:value("yes", "Load")
-app_setcdruserfield:value("no", "Do Not Load")
-app_setcdruserfield:value("auto", "Load as Required")
-app_setcdruserfield.rmempty = true
-
-app_setcidname = module:option(ListValue, "app_setcidname", "load => .so ; Set CallerID Name", "")
-app_setcidname:value("yes", "Load")
-app_setcidname:value("no", "Do Not Load")
-app_setcidname:value("auto", "Load as Required")
-app_setcidname.rmempty = true
-
-app_setcidnum = module:option(ListValue, "app_setcidnum", "load => .so ; Set CallerID Number", "")
-app_setcidnum:value("yes", "Load")
-app_setcidnum:value("no", "Do Not Load")
-app_setcidnum:value("auto", "Load as Required")
-app_setcidnum.rmempty = true
-
-app_setrdnis = module:option(ListValue, "app_setrdnis", "Set RDNIS Number", "")
-app_setrdnis:value("yes", "Load")
-app_setrdnis:value("no", "Do Not Load")
-app_setrdnis:value("auto", "Load as Required")
-app_setrdnis.rmempty = true
-
-app_settransfercapability = module:option(ListValue, "app_settransfercapability", "Set ISDN Transfer Capability", "")
-app_settransfercapability:value("yes", "Load")
-app_settransfercapability:value("no", "Do Not Load")
-app_settransfercapability:value("auto", "Load as Required")
-app_settransfercapability.rmempty = true
-
-app_sms = module:option(ListValue, "app_sms", "SMS/PSTN handler", "")
-app_sms:value("yes", "Load")
-app_sms:value("no", "Do Not Load")
-app_sms:value("auto", "Load as Required")
-app_sms.rmempty = true
-
-app_softhangup = module:option(ListValue, "app_softhangup", "Hangs up the requested channel", "")
-app_softhangup:value("yes", "Load")
-app_softhangup:value("no", "Do Not Load")
-app_softhangup:value("auto", "Load as Required")
-app_softhangup.rmempty = true
-
-app_stack = module:option(ListValue, "app_stack", "Stack Routines", "")
-app_stack:value("yes", "Load")
-app_stack:value("no", "Do Not Load")
-app_stack:value("auto", "Load as Required")
-app_stack.rmempty = true
-
-app_system = module:option(ListValue, "app_system", "Generic System() application", "")
-app_system:value("yes", "Load")
-app_system:value("no", "Do Not Load")
-app_system:value("auto", "Load as Required")
-app_system.rmempty = true
-
-app_talkdetect = module:option(ListValue, "app_talkdetect", "Playback with Talk Detection", "")
-app_talkdetect:value("yes", "Load")
-app_talkdetect:value("no", "Do Not Load")
-app_talkdetect:value("auto", "Load as Required")
-app_talkdetect.rmempty = true
-
-app_test = module:option(ListValue, "app_test", "Interface Test Application", "")
-app_test:value("yes", "Load")
-app_test:value("no", "Do Not Load")
-app_test:value("auto", "Load as Required")
-app_test.rmempty = true
-
-app_transfer = module:option(ListValue, "app_transfer", "Transfer", "")
-app_transfer:value("yes", "Load")
-app_transfer:value("no", "Do Not Load")
-app_transfer:value("auto", "Load as Required")
-app_transfer.rmempty = true
-
-app_txtcidname = module:option(ListValue, "app_txtcidname", "TXTCIDName", "")
-app_txtcidname:value("yes", "Load")
-app_txtcidname:value("no", "Do Not Load")
-app_txtcidname:value("auto", "Load as Required")
-app_txtcidname.rmempty = true
-
-app_url = module:option(ListValue, "app_url", "Send URL Applications", "")
-app_url:value("yes", "Load")
-app_url:value("no", "Do Not Load")
-app_url:value("auto", "Load as Required")
-app_url.rmempty = true
-
-app_userevent = module:option(ListValue, "app_userevent", "Custom User Event Application", "")
-app_userevent:value("yes", "Load")
-app_userevent:value("no", "Do Not Load")
-app_userevent:value("auto", "Load as Required")
-app_userevent.rmempty = true
-
-app_verbose = module:option(ListValue, "app_verbose", "Send verbose output", "")
-app_verbose:value("yes", "Load")
-app_verbose:value("no", "Do Not Load")
-app_verbose:value("auto", "Load as Required")
-app_verbose.rmempty = true
-
-app_voicemail = module:option(ListValue, "app_voicemail", "Voicemail", "")
-app_voicemail:value("yes", "Load")
-app_voicemail:value("no", "Do Not Load")
-app_voicemail:value("auto", "Load as Required")
-app_voicemail.rmempty = true
-
-app_waitforring = module:option(ListValue, "app_waitforring", "Waits until first ring after time", "")
-app_waitforring:value("yes", "Load")
-app_waitforring:value("no", "Do Not Load")
-app_waitforring:value("auto", "Load as Required")
-app_waitforring.rmempty = true
-
-app_waitforsilence = module:option(ListValue, "app_waitforsilence", "Wait For Silence Application", "")
-app_waitforsilence:value("yes", "Load")
-app_waitforsilence:value("no", "Do Not Load")
-app_waitforsilence:value("auto", "Load as Required")
-app_waitforsilence.rmempty = true
-
-app_while = module:option(ListValue, "app_while", "While Loops and Conditional Execution", "")
-app_while:value("yes", "Load")
-app_while:value("no", "Do Not Load")
-app_while:value("auto", "Load as Required")
-app_while.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua
deleted file mode 100644
index 13dcba5101..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua
+++ /dev/null
@@ -1,47 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-cdr_csv = module:option(ListValue, "cdr_csv", "Comma Separated Values CDR Backend", "")
-cdr_csv:value("yes", "Load")
-cdr_csv:value("no", "Do Not Load")
-cdr_csv:value("auto", "Load as Required")
-cdr_csv.rmempty = true
-
-cdr_custom = module:option(ListValue, "cdr_custom", "Customizable Comma Separated Values CDR Backend", "")
-cdr_custom:value("yes", "Load")
-cdr_custom:value("no", "Do Not Load")
-cdr_custom:value("auto", "Load as Required")
-cdr_custom.rmempty = true
-
-cdr_manager = module:option(ListValue, "cdr_manager", "Asterisk Call Manager CDR Backend", "")
-cdr_manager:value("yes", "Load")
-cdr_manager:value("no", "Do Not Load")
-cdr_manager:value("auto", "Load as Required")
-cdr_manager.rmempty = true
-
-cdr_mysql = module:option(ListValue, "cdr_mysql", "MySQL CDR Backend", "")
-cdr_mysql:value("yes", "Load")
-cdr_mysql:value("no", "Do Not Load")
-cdr_mysql:value("auto", "Load as Required")
-cdr_mysql.rmempty = true
-
-cdr_pgsql = module:option(ListValue, "cdr_pgsql", "PostgreSQL CDR Backend", "")
-cdr_pgsql:value("yes", "Load")
-cdr_pgsql:value("no", "Do Not Load")
-cdr_pgsql:value("auto", "Load as Required")
-cdr_pgsql.rmempty = true
-
-cdr_sqlite = module:option(ListValue, "cdr_sqlite", "SQLite CDR Backend", "")
-cdr_sqlite:value("yes", "Load")
-cdr_sqlite:value("no", "Do Not Load")
-cdr_sqlite:value("auto", "Load as Required")
-cdr_sqlite.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua
deleted file mode 100644
index 425569dd0c..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua
+++ /dev/null
@@ -1,45 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-chan_agent = module:option(ListValue, "chan_agent", "Agent Proxy Channel", "")
-chan_agent:value("yes", "Load")
-chan_agent:value("no", "Do Not Load")
-chan_agent:value("auto", "Load as Required")
-chan_agent.rmempty = true
-
-chan_alsa = module:option(ListValue, "chan_alsa", "Channel driver for GTalk", "")
-chan_alsa:value("yes", "Load")
-chan_alsa:value("no", "Do Not Load")
-chan_alsa:value("auto", "Load as Required")
-chan_alsa.rmempty = true
-
-chan_gtalk = module:option(ListValue, "chan_gtalk", "Channel driver for GTalk", "")
-chan_gtalk:value("yes", "Load")
-chan_gtalk:value("no", "Do Not Load")
-chan_gtalk:value("auto", "Load as Required")
-chan_gtalk.rmempty = true
-
-chan_iax2 = module:option(Flag, "chan_iax2", "Option chan_iax2", "")
-chan_iax2.rmempty = true
-
-chan_local = module:option(ListValue, "chan_local", "Local Proxy Channel", "")
-chan_local:value("yes", "Load")
-chan_local:value("no", "Do Not Load")
-chan_local:value("auto", "Load as Required")
-chan_local.rmempty = true
-
-chan_sip = module:option(ListValue, "chan_sip", "Session Initiation Protocol (SIP)", "")
-chan_sip:value("yes", "Load")
-chan_sip:value("no", "Do Not Load")
-chan_sip:value("auto", "Load as Required")
-chan_sip.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua
deleted file mode 100644
index 0893c0e2da..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua
+++ /dev/null
@@ -1,53 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-codec_a_mu = module:option(ListValue, "codec_a_mu", "A-law and Mulaw direct Coder/Decoder", "")
-codec_a_mu:value("yes", "Load")
-codec_a_mu:value("no", "Do Not Load")
-codec_a_mu:value("auto", "Load as Required")
-codec_a_mu.rmempty = true
-
-codec_adpcm = module:option(ListValue, "codec_adpcm", "Adaptive Differential PCM Coder/Decoder", "")
-codec_adpcm:value("yes", "Load")
-codec_adpcm:value("no", "Do Not Load")
-codec_adpcm:value("auto", "Load as Required")
-codec_adpcm.rmempty = true
-
-codec_alaw = module:option(ListValue, "codec_alaw", "A-law Coder/Decoder", "")
-codec_alaw:value("yes", "Load")
-codec_alaw:value("no", "Do Not Load")
-codec_alaw:value("auto", "Load as Required")
-codec_alaw.rmempty = true
-
-codec_g726 = module:option(ListValue, "codec_g726", "ITU G.726-32kbps G726 Transcoder", "")
-codec_g726:value("yes", "Load")
-codec_g726:value("no", "Do Not Load")
-codec_g726:value("auto", "Load as Required")
-codec_g726.rmempty = true
-
-codec_gsm = module:option(ListValue, "codec_gsm", "GSM/PCM16 (signed linear) Codec Translation", "")
-codec_gsm:value("yes", "Load")
-codec_gsm:value("no", "Do Not Load")
-codec_gsm:value("auto", "Load as Required")
-codec_gsm.rmempty = true
-
-codec_speex = module:option(ListValue, "codec_speex", "Speex/PCM16 (signed linear) Codec Translator", "")
-codec_speex:value("yes", "Load")
-codec_speex:value("no", "Do Not Load")
-codec_speex:value("auto", "Load as Required")
-codec_speex.rmempty = true
-
-codec_ulaw = module:option(ListValue, "codec_ulaw", "Mu-law Coder/Decoder", "")
-codec_ulaw:value("yes", "Load")
-codec_ulaw:value("no", "Do Not Load")
-codec_ulaw:value("auto", "Load as Required")
-codec_ulaw.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua
deleted file mode 100644
index 9b59d94054..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua
+++ /dev/null
@@ -1,89 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-format_au = module:option(ListValue, "format_au", "Sun Microsystems AU format (signed linear)", "")
-format_au:value("yes", "Load")
-format_au:value("no", "Do Not Load")
-format_au:value("auto", "Load as Required")
-format_au.rmempty = true
-
-format_g723 = module:option(ListValue, "format_g723", "G.723.1 Simple Timestamp File Format", "")
-format_g723:value("yes", "Load")
-format_g723:value("no", "Do Not Load")
-format_g723:value("auto", "Load as Required")
-format_g723.rmempty = true
-
-format_g726 = module:option(ListValue, "format_g726", "Raw G.726 (16/24/32/40kbps) data", "")
-format_g726:value("yes", "Load")
-format_g726:value("no", "Do Not Load")
-format_g726:value("auto", "Load as Required")
-format_g726.rmempty = true
-
-format_g729 = module:option(ListValue, "format_g729", "Raw G729 data", "")
-format_g729:value("yes", "Load")
-format_g729:value("no", "Do Not Load")
-format_g729:value("auto", "Load as Required")
-format_g729.rmempty = true
-
-format_gsm = module:option(ListValue, "format_gsm", "Raw GSM data", "")
-format_gsm:value("yes", "Load")
-format_gsm:value("no", "Do Not Load")
-format_gsm:value("auto", "Load as Required")
-format_gsm.rmempty = true
-
-format_h263 = module:option(ListValue, "format_h263", "Raw h263 data", "")
-format_h263:value("yes", "Load")
-format_h263:value("no", "Do Not Load")
-format_h263:value("auto", "Load as Required")
-format_h263.rmempty = true
-
-format_jpeg = module:option(ListValue, "format_jpeg", "JPEG (Joint Picture Experts Group) Image", "")
-format_jpeg:value("yes", "Load")
-format_jpeg:value("no", "Do Not Load")
-format_jpeg:value("auto", "Load as Required")
-format_jpeg.rmempty = true
-
-format_pcm = module:option(ListValue, "format_pcm", "Raw uLaw 8khz Audio support (PCM)", "")
-format_pcm:value("yes", "Load")
-format_pcm:value("no", "Do Not Load")
-format_pcm:value("auto", "Load as Required")
-format_pcm.rmempty = true
-
-format_pcm_alaw = module:option(ListValue, "format_pcm_alaw", "load => .so ; Raw aLaw 8khz PCM Audio support", "")
-format_pcm_alaw:value("yes", "Load")
-format_pcm_alaw:value("no", "Do Not Load")
-format_pcm_alaw:value("auto", "Load as Required")
-format_pcm_alaw.rmempty = true
-
-format_sln = module:option(ListValue, "format_sln", "Raw Signed Linear Audio support (SLN)", "")
-format_sln:value("yes", "Load")
-format_sln:value("no", "Do Not Load")
-format_sln:value("auto", "Load as Required")
-format_sln.rmempty = true
-
-format_vox = module:option(ListValue, "format_vox", "Dialogic VOX (ADPCM) File Format", "")
-format_vox:value("yes", "Load")
-format_vox:value("no", "Do Not Load")
-format_vox:value("auto", "Load as Required")
-format_vox.rmempty = true
-
-format_wav = module:option(ListValue, "format_wav", "Microsoft WAV format (8000hz Signed Line", "")
-format_wav:value("yes", "Load")
-format_wav:value("no", "Do Not Load")
-format_wav:value("auto", "Load as Required")
-format_wav.rmempty = true
-
-format_wav_gsm = module:option(ListValue, "format_wav_gsm", "Microsoft WAV format (Proprietary GSM)", "")
-format_wav_gsm:value("yes", "Load")
-format_wav_gsm:value("no", "Do Not Load")
-format_wav_gsm:value("auto", "Load as Required")
-format_wav_gsm.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua
deleted file mode 100644
index 04eb97473a..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua
+++ /dev/null
@@ -1,29 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-func_callerid = module:option(ListValue, "func_callerid", "Caller ID related dialplan functions", "")
-func_callerid:value("yes", "Load")
-func_callerid:value("no", "Do Not Load")
-func_callerid:value("auto", "Load as Required")
-func_callerid.rmempty = true
-
-func_enum = module:option(ListValue, "func_enum", "ENUM Functions", "")
-func_enum:value("yes", "Load")
-func_enum:value("no", "Do Not Load")
-func_enum:value("auto", "Load as Required")
-func_enum.rmempty = true
-
-func_uri = module:option(ListValue, "func_uri", "URI encoding / decoding functions", "")
-func_uri:value("yes", "Load")
-func_uri:value("no", "Do Not Load")
-func_uri:value("auto", "Load as Required")
-func_uri.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua
deleted file mode 100644
index cca4f34d5f..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua
+++ /dev/null
@@ -1,53 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-pbx_ael = module:option(ListValue, "pbx_ael", "Asterisk Extension Language Compiler", "")
-pbx_ael:value("yes", "Load")
-pbx_ael:value("no", "Do Not Load")
-pbx_ael:value("auto", "Load as Required")
-pbx_ael.rmempty = true
-
-pbx_config = module:option(ListValue, "pbx_config", "Text Extension Configuration", "")
-pbx_config:value("yes", "Load")
-pbx_config:value("no", "Do Not Load")
-pbx_config:value("auto", "Load as Required")
-pbx_config.rmempty = true
-
-pbx_functions = module:option(ListValue, "pbx_functions", "load => .so ; Builtin dialplan functions", "")
-pbx_functions:value("yes", "Load")
-pbx_functions:value("no", "Do Not Load")
-pbx_functions:value("auto", "Load as Required")
-pbx_functions.rmempty = true
-
-pbx_loopback = module:option(ListValue, "pbx_loopback", "Loopback Switch", "")
-pbx_loopback:value("yes", "Load")
-pbx_loopback:value("no", "Do Not Load")
-pbx_loopback:value("auto", "Load as Required")
-pbx_loopback.rmempty = true
-
-pbx_realtime = module:option(ListValue, "pbx_realtime", "Realtime Switch", "")
-pbx_realtime:value("yes", "Load")
-pbx_realtime:value("no", "Do Not Load")
-pbx_realtime:value("auto", "Load as Required")
-pbx_realtime.rmempty = true
-
-pbx_spool = module:option(ListValue, "pbx_spool", "Outgoing Spool Support", "")
-pbx_spool:value("yes", "Load")
-pbx_spool:value("no", "Do Not Load")
-pbx_spool:value("auto", "Load as Required")
-pbx_spool.rmempty = true
-
-pbx_wilcalu = module:option(ListValue, "pbx_wilcalu", "Wil Cal U (Auto Dialer)", "")
-pbx_wilcalu:value("yes", "Load")
-pbx_wilcalu:value("no", "Do Not Load")
-pbx_wilcalu:value("auto", "Load as Required")
-pbx_wilcalu.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua
deleted file mode 100644
index 7c818760d1..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua
+++ /dev/null
@@ -1,100 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-featuremap = cbimap:section(TypedSection, "featuremap", "Feature Key maps", "")
-featuremap.anonymous = true
-featuremap.addremove = true
-
-atxfer = featuremap:option(Value, "atxfer", "Attended transfer key", "")
-atxfer.rmempty = true
-
-blindxfer = featuremap:option(Value, "blindxfer", "Blind transfer key", "")
-blindxfer.rmempty = true
-
-disconnect = featuremap:option(Value, "disconnect", "Key to Disconnect call", "")
-disconnect.rmempty = true
-
-parkcall = featuremap:option(Value, "parkcall", "Key to Park call", "")
-parkcall.rmempty = true
-
-
-featurepark = cbimap:section(TypedSection, "featurepark", "Parking Feature", "")
-featurepark.anonymous = true
-
-parkenabled = featurepark:option(Flag, "parkenabled", "Enable Parking", "")
-
-adsipark = featurepark:option(Flag, "adsipark", "ADSI Park", "")
-adsipark.rmempty = true
-adsipark:depends({ parkenabled = "1" })
-
-atxfernoanswertimeout = featurepark:option(Value, "atxfernoanswertimeout", "Attended transfer timeout (sec)", "")
-atxfernoanswertimeout.rmempty = true
-atxfernoanswertimeout:depends({ parkenabled = "1" })
-
-automon = featurepark:option(Value, "automon", "One touch record key", "")
-automon.rmempty = true
-automon:depends({ parkenabled = "1" })
-
-context = featurepark:option(Value, "context", "Name of call context for parking", "")
-context.rmempty = true
-context:depends({ parkenabled = "1" })
-
-courtesytone = featurepark:option(Value, "courtesytone", "Sound file to play to parked caller", "")
-courtesytone.rmempty = true
-courtesytone:depends({ parkenabled = "1" })
-
-featuredigittimeout = featurepark:option(Value, "featuredigittimeout", "Max time (ms) between digits for feature activation", "")
-featuredigittimeout.rmempty = true
-featuredigittimeout:depends({ parkenabled = "1" })
-
-findslot = featurepark:option(ListValue, "findslot", "Method to Find Parking slot", "")
-findslot:value("first", "First available slot")
-findslot:value("next", "Next free parking space")
-findslot.rmempty = true
-findslot:depends({ parkenabled = "1" })
-
-parkedmusicclass = featurepark:option(ListValue, "parkedmusicclass", "Music on Hold class for the parked channel", "")
-parkedmusicclass.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk" )
-parkedmusicclass:depends({ parkenabled = "1" })
-cbimap.uci:foreach( "asterisk", "moh", function(s) parkedmusicclass:value(s['.name']) end )
-
-parkedplay = featurepark:option(ListValue, "parkedplay", "Play courtesy tone to", "")
-parkedplay:value("caller", "Caller")
-parkedplay:value("parked", "Parked user")
-parkedplay:value("both", "Both")
-parkedplay.rmempty = true
-parkedplay:depends({ parkenabled = "1" })
-
-parkext = featurepark:option(Value, "parkext", "Extension to dial to park", "")
-parkext.rmempty = true
-parkext:depends({ parkenabled = "1" })
-
-parkingtime = featurepark:option(Value, "parkingtime", "Parking time (secs)", "")
-parkingtime.rmempty = true
-parkingtime:depends({ parkenabled = "1" })
-
-parkpos = featurepark:option(Value, "parkpos", "Range of extensions for call parking", "")
-parkpos.rmempty = true
-parkpos:depends({ parkenabled = "1" })
-
-pickupexten = featurepark:option(Value, "pickupexten", "Pickup extension", "")
-pickupexten.rmempty = true
-pickupexten:depends({ parkenabled = "1" })
-
-transferdigittimeout = featurepark:option(Value, "transferdigittimeout", "Seconds to wait between digits when transferring", "")
-transferdigittimeout.rmempty = true
-transferdigittimeout:depends({ parkenabled = "1" })
-
-xferfailsound = featurepark:option(Value, "xferfailsound", "sound when attended transfer is complete", "")
-xferfailsound.rmempty = true
-xferfailsound:depends({ parkenabled = "1" })
-
-xfersound = featurepark:option(Value, "xfersound", "Sound when attended transfer fails", "")
-xfersound.rmempty = true
-xfersound:depends({ parkenabled = "1" })
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua
deleted file mode 100644
index 4bef199d8a..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua
+++ /dev/null
@@ -1,77 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-module = cbimap:section(TypedSection, "module", "Modules", "")
-module.anonymous = true
-
-res_config_mysql = module:option(ListValue, "res_config_mysql", "MySQL Config Resource", "")
-res_config_mysql:value("yes", "Load")
-res_config_mysql:value("no", "Do Not Load")
-res_config_mysql:value("auto", "Load as Required")
-res_config_mysql.rmempty = true
-
-res_config_odbc = module:option(ListValue, "res_config_odbc", "ODBC Config Resource", "")
-res_config_odbc:value("yes", "Load")
-res_config_odbc:value("no", "Do Not Load")
-res_config_odbc:value("auto", "Load as Required")
-res_config_odbc.rmempty = true
-
-res_config_pgsql = module:option(ListValue, "res_config_pgsql", "PGSQL Module", "")
-res_config_pgsql:value("yes", "Load")
-res_config_pgsql:value("no", "Do Not Load")
-res_config_pgsql:value("auto", "Load as Required")
-res_config_pgsql.rmempty = true
-
-res_crypto = module:option(ListValue, "res_crypto", "Cryptographic Digital Signatures", "")
-res_crypto:value("yes", "Load")
-res_crypto:value("no", "Do Not Load")
-res_crypto:value("auto", "Load as Required")
-res_crypto.rmempty = true
-
-res_features = module:option(ListValue, "res_features", "Call Parking Resource", "")
-res_features:value("yes", "Load")
-res_features:value("no", "Do Not Load")
-res_features:value("auto", "Load as Required")
-res_features.rmempty = true
-
-res_indications = module:option(ListValue, "res_indications", "Indications Configuration", "")
-res_indications:value("yes", "Load")
-res_indications:value("no", "Do Not Load")
-res_indications:value("auto", "Load as Required")
-res_indications.rmempty = true
-
-res_monitor = module:option(ListValue, "res_monitor", "Call Monitoring Resource", "")
-res_monitor:value("yes", "Load")
-res_monitor:value("no", "Do Not Load")
-res_monitor:value("auto", "Load as Required")
-res_monitor.rmempty = true
-
-res_musiconhold = module:option(ListValue, "res_musiconhold", "Music On Hold Resource", "")
-res_musiconhold:value("yes", "Load")
-res_musiconhold:value("no", "Do Not Load")
-res_musiconhold:value("auto", "Load as Required")
-res_musiconhold.rmempty = true
-
-res_odbc = module:option(ListValue, "res_odbc", "ODBC Resource", "")
-res_odbc:value("yes", "Load")
-res_odbc:value("no", "Do Not Load")
-res_odbc:value("auto", "Load as Required")
-res_odbc.rmempty = true
-
-res_smdi = module:option(ListValue, "res_smdi", "SMDI Module", "")
-res_smdi:value("yes", "Load")
-res_smdi:value("no", "Do Not Load")
-res_smdi:value("auto", "Load as Required")
-res_smdi.rmempty = true
-
-res_snmp = module:option(ListValue, "res_snmp", "SNMP Module", "")
-res_snmp:value("yes", "Load")
-res_snmp:value("no", "Do Not Load")
-res_snmp:value("auto", "Load as Required")
-res_snmp.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua
deleted file mode 100644
index a095ec3ecc..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua
+++ /dev/null
@@ -1,98 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-sip = cbimap:section(TypedSection, "sip", "SIP Connection", "")
-sip.addremove = true
-
-alwaysinternational = sip:option(Flag, "alwaysinternational", "Always Dial International", "")
-alwaysinternational.optional = true
-
-canreinvite = sip:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
-canreinvite:value("yes", "Yes")
-canreinvite:value("nonat", "Yes when not behind NAT")
-canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
-canreinvite:value("no", "No")
-canreinvite.optional = true
-
-context = sip:option(ListValue, "context", "Context to use", "")
-context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
-cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
-cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
-
-countrycode = sip:option(Value, "countrycode", "Country Code for connection", "")
-countrycode.optional = true
-
-dtmfmode = sip:option(ListValue, "dtmfmode", "DTMF mode", "")
-dtmfmode:value("info", "Use RFC2833 or INFO for the BudgeTone")
-dtmfmode:value("rfc2833", "Use RFC2833 for the BudgeTone")
-dtmfmode:value("inband", "Use Inband (only with ulaw/alaw)")
-dtmfmode.optional = true
-
-extension = sip:option(Value, "extension", "Add as Extension", "")
-extension.optional = true
-
-fromdomain = sip:option(Value, "fromdomain", "Primary domain identity for From: headers", "")
-fromdomain.optional = true
-
-fromuser = sip:option(Value, "fromuser", "From user (required by many SIP providers)", "")
-fromuser.optional = true
-
-host = sip:option(Value, "host", "Host name (or blank)", "")
-host.optional = true
-
-incoming = sip:option(DynamicList, "incoming", "Ring on incoming dialplan contexts", "")
-incoming.optional = true
-
-insecure = sip:option(ListValue, "insecure", "Allow Insecure for", "")
-insecure:value("port", "Allow mismatched port number")
-insecure:value("invite", "Do not require auth of incoming INVITE")
-insecure:value("port,invite", "Allow mismatched port and Do not require auth of incoming INVITE")
-insecure.optional = true
-
-internationalprefix = sip:option(Value, "internationalprefix", "International Dial Prefix", "")
-internationalprefix.optional = true
-
-mailbox = sip:option(Value, "mailbox", "Mailbox for MWI", "")
-mailbox.optional = true
-
-nat = sip:option(Flag, "nat", "NAT between phone and Asterisk", "")
-nat.optional = true
-
-pedantic = sip:option(Flag, "pedantic", "Check tags in headers", "")
-pedantic.optional = true
-
-port = sip:option(Value, "port", "SIP Port", "")
-port.optional = true
-
-prefix = sip:option(Value, "prefix", "Dial Prefix (for external line)", "")
-prefix.optional = true
-
-qualify = sip:option(Value, "qualify", "Reply Timeout (ms) for down connection", "")
-qualify.optional = true
-
-register = sip:option(Flag, "register", "Register connection", "")
-register.optional = true
-
-secret = sip:option(Value, "secret", "Secret", "")
-secret.optional = true
-
-selfmailbox = sip:option(Flag, "selfmailbox", "Dial own extension for mailbox", "")
-selfmailbox.optional = true
-
-timeout = sip:option(Value, "timeout", "Dial Timeout (sec)", "")
-timeout.optional = true
-
-type = sip:option(ListValue, "type", "Client Type", "")
-type:value("friend", "Friend (outbound/inbound)")
-type:value("user", "User (inbound - authenticate by \"from\")")
-type:value("peer", "Peer (outbound - match by host)")
-type.optional = true
-
-username = sip:option(Value, "username", "Username", "")
-username.optional = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua
deleted file mode 100644
index 7341dfbe64..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua
+++ /dev/null
@@ -1,41 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-voicegeneral = cbimap:section(TypedSection, "voicegeneral", "Voicemail general options", "")
-
-serveremail = voicegeneral:option(Value, "serveremail", "From Email address of server", "")
-
-
-voicemail = cbimap:section(TypedSection, "voicemail", "Voice Mail boxes", "")
-voicemail.addremove = true
-
-attach = voicemail:option(Flag, "attach", "Email contains attachment", "")
-attach.rmempty = true
-
-email = voicemail:option(Value, "email", "Email", "")
-email.rmempty = true
-
-name = voicemail:option(Value, "name", "Display Name", "")
-name.rmempty = true
-
-password = voicemail:option(Value, "password", "Password", "")
-password.rmempty = true
-
-zone = voicemail:option(ListValue, "zone", "Voice Zone", "")
-cbimap.uci:foreach( "asterisk", "voicezone", function(s) zone:value(s['.name']) end )
-
-
-voicezone = cbimap:section(TypedSection, "voicezone", "Voice Zone settings", "")
-voicezone.addremove = true
-
-message = voicezone:option(Value, "message", "Message Format", "")
-message.rmempty = true
-
-zone = voicezone:option(Value, "zone", "Time Zone", "")
-zone.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua
deleted file mode 100644
index 026aab4c63..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua
+++ /dev/null
@@ -1,151 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "asterisk", "")
-
-asterisk = cbimap:section(TypedSection, "asterisk", "Asterisk General Options", "")
-asterisk.anonymous = true
-
-agidir = asterisk:option(Value, "agidir", "AGI directory", "")
-agidir.rmempty = true
-
-cache_record_files = asterisk:option(Flag, "cache_record_files", "Cache recorded sound files during recording", "")
-cache_record_files.rmempty = true
-
-debug = asterisk:option(Value, "debug", "Debug Level", "")
-debug.rmempty = true
-
-dontwarn = asterisk:option(Flag, "dontwarn", "Disable some warnings", "")
-dontwarn.rmempty = true
-
-dumpcore = asterisk:option(Flag, "dumpcore", "Dump core on crash", "")
-dumpcore.rmempty = true
-
-highpriority = asterisk:option(Flag, "highpriority", "High Priority", "")
-highpriority.rmempty = true
-
-initcrypto = asterisk:option(Flag, "initcrypto", "Initialise Crypto", "")
-initcrypto.rmempty = true
-
-internal_timing = asterisk:option(Flag, "internal_timing", "Use Internal Timing", "")
-internal_timing.rmempty = true
-
-logdir = asterisk:option(Value, "logdir", "Log directory", "")
-logdir.rmempty = true
-
-maxcalls = asterisk:option(Value, "maxcalls", "Maximum number of calls allowed", "")
-maxcalls.rmempty = true
-
-maxload = asterisk:option(Value, "maxload", "Maximum load to stop accepting new calls", "")
-maxload.rmempty = true
-
-nocolor = asterisk:option(Flag, "nocolor", "Disable console colors", "")
-nocolor.rmempty = true
-
-record_cache_dir = asterisk:option(Value, "record_cache_dir", "Sound files Cache directory", "")
-record_cache_dir.rmempty = true
-record_cache_dir:depends({ ["cache_record_files"] = "true" })
-
-rungroup = asterisk:option(Flag, "rungroup", "The Group to run as", "")
-rungroup.rmempty = true
-
-runuser = asterisk:option(Flag, "runuser", "The User to run as", "")
-runuser.rmempty = true
-
-spooldir = asterisk:option(Value, "spooldir", "Voicemail Spool directory", "")
-spooldir.rmempty = true
-
-systemname = asterisk:option(Value, "systemname", "Prefix UniquID with system name", "")
-systemname.rmempty = true
-
-transcode_via_sln = asterisk:option(Flag, "transcode_via_sln", "Build transcode paths via SLINEAR, not directly", "")
-transcode_via_sln.rmempty = true
-
-transmit_silence_during_record = asterisk:option(Flag, "transmit_silence_during_record", "Transmit SLINEAR silence while recording a channel", "")
-transmit_silence_during_record.rmempty = true
-
-verbose = asterisk:option(Value, "verbose", "Verbose Level", "")
-verbose.rmempty = true
-
-zone = asterisk:option(Value, "zone", "Time Zone", "")
-zone.rmempty = true
-
-
-hardwarereboot = cbimap:section(TypedSection, "hardwarereboot", "Reload Hardware Config", "")
-
-method = hardwarereboot:option(ListValue, "method", "Reboot Method", "")
-method:value("web", "Web URL (wget)")
-method:value("system", "program to run")
-method.rmempty = true
-
-param = hardwarereboot:option(Value, "param", "Parameter", "")
-param.rmempty = true
-
-
-iaxgeneral = cbimap:section(TypedSection, "iaxgeneral", "IAX General Options", "")
-iaxgeneral.anonymous = true
-iaxgeneral.addremove = true
-
-allow = iaxgeneral:option(MultiValue, "allow", "Allow Codecs", "")
-allow:value("alaw", "alaw")
-allow:value("gsm", "gsm")
-allow:value("g726", "g726")
-allow.rmempty = true
-
-canreinvite = iaxgeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
-canreinvite:value("yes", "Yes")
-canreinvite:value("nonat", "Yes when not behind NAT")
-canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
-canreinvite:value("no", "No")
-canreinvite.rmempty = true
-
-static = iaxgeneral:option(Flag, "static", "Static", "")
-static.rmempty = true
-
-writeprotect = iaxgeneral:option(Flag, "writeprotect", "Write Protect", "")
-writeprotect.rmempty = true
-
-
-sipgeneral = cbimap:section(TypedSection, "sipgeneral", "Section sipgeneral", "")
-sipgeneral.anonymous = true
-sipgeneral.addremove = true
-
-allow = sipgeneral:option(MultiValue, "allow", "Allow codecs", "")
-allow:value("ulaw", "ulaw")
-allow:value("alaw", "alaw")
-allow:value("gsm", "gsm")
-allow:value("g726", "g726")
-allow.rmempty = true
-
-port = sipgeneral:option(Value, "port", "SIP Port", "")
-port.rmempty = true
-
-realm = sipgeneral:option(Value, "realm", "SIP realm", "")
-realm.rmempty = true
-
-
-moh = cbimap:section(TypedSection, "moh", "Music On Hold", "")
-
-application = moh:option(Value, "application", "Application", "")
-application.rmempty = true
-application:depends({ ["asterisk.moh.mode"] = "custom" })
-
-directory = moh:option(Value, "directory", "Directory of Music", "")
-directory.rmempty = true
-
-mode = moh:option(ListValue, "mode", "Option mode", "")
-mode:value("system", "program to run")
-mode:value("files", "Read files from directory")
-mode:value("quietmp3", "Quite MP3")
-mode:value("mp3", "Loud MP3")
-mode:value("mp3nb", "unbuffered MP3")
-mode:value("quietmp3nb", "Quiet Unbuffered MP3")
-mode:value("custom", "Run a custom application")
-mode.rmempty = true
-
-random = moh:option(Flag, "random", "Random Play", "")
-random.rmempty = true
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua
deleted file mode 100644
index b4c81bb29d..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua
+++ /dev/null
@@ -1,125 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
-local function find_outgoing_contexts(uci)
- local c = { }
- local h = { }
-
--- uci:foreach("asterisk", "dialplan",
--- function(s)
--- if not h[s['.name']] then
--- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] }
--- h[s['.name']] = true
--- end
--- end)
-
- uci:foreach("asterisk", "dialzone",
- function(s)
- if not h[s['.name']] then
- c[#c+1] = { s['.name'], "Dialzone: %s" % s['.name'] }
- h[s['.name']] = true
- end
- end)
-
- return c
-end
-
-local function find_incoming_contexts(uci)
- local c = { }
- local h = { }
-
- uci:foreach("asterisk", "sip",
- function(s)
- if s.context and not h[s.context] and
- uci:get_bool("asterisk", s['.name'], "provider")
- then
- c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context }
- h[s.context] = true
- end
- end)
-
- return c
-end
-
-local function find_trunks(uci)
- local t = { }
-
- uci:foreach("asterisk", "sip",
- function(s)
- if uci:get_bool("asterisk", s['.name'], "provider") then
- t[#t+1] = {
- "SIP/%s" % s['.name'],
- "SIP: %s" % s['.name']
- }
- end
- end)
-
- uci:foreach("asterisk", "iax",
- function(s)
- t[#t+1] = {
- "IAX/%s" % s['.name'],
- "IAX: %s" % s.extension or s['.name']
- }
- end)
-
- return t
-end
-
---[[
-
-dialzone {name} - Outgoing zone.
- uses - Outgoing line to use: TYPE/Name
- match (list) - Number to match
- countrycode - The effective country code of this dialzone
- international (list) - International prefix to match
- localzone - dialzone for local numbers
- addprefix - Prexix required to dial out.
- localprefix - Prefix for a local call
-
-]]
-
-
---
--- SIP dialzone configuration
---
-if arg[1] then
- cbimap = Map("asterisk", "Edit Dialplan Entry")
-
- entry = cbimap:section(NamedSection, arg[1])
-
- back = entry:option(DummyValue, "_overview", "Back to dialplan overview")
- back.value = ""
- back.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans")
-
- desc = entry:option(Value, "description", "Description")
- function desc.cfgvalue(self, s, ...)
- return Value.cfgvalue(self, s, ...) or s
- end
-
- match = entry:option(DynamicList, "match", "Number matches")
-
- intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)")
-
- trunk = entry:option(MultiValue, "uses", "Used trunk")
- for _, v in ipairs(find_trunks(cbimap.uci)) do
- trunk:value(unpack(v))
- end
-
- aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)")
- --ast.idd.cbifill(aprefix)
-
- ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)")
- ast.cc.cbifill(ccode)
-
- lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers")
- lzone:value("", "no special treatment of local numbers")
- for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do
- lzone:value(unpack(v))
- end
-
- lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)")
-
- return cbimap
-end
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua
deleted file mode 100644
index 4ffeca4f8a..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua
+++ /dev/null
@@ -1,103 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
-cbimap = Map("asterisk", "Registered Trunks")
-cbimap.pageaction = false
-
-local sip_peers = { }
-cbimap.uci:foreach("asterisk", "sip",
- function(s)
- if s.type == "peer" then
- s.name = s['.name']
- s.info = ast.sip.peer(s.name)
- sip_peers[s.name] = s
- end
- end)
-
-
-sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks")
-sip_table.template = "cbi/tblsection"
-sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s")
-sip_table.addremove = true
-sip_table.sectionhead = "Extension"
-
-function sip_table.filter(self, s)
- return s and (
- cbimap.uci:get("asterisk", s, "type") == nil or
- cbimap.uci:get_bool("asterisk", s, "provider")
- )
-end
-
-function sip_table.create(self, section)
- if TypedSection.create(self, section) then
- created = section
- else
- self.invalid_cts = true
- end
-end
-
-function sip_table.parse(self, ...)
- TypedSection.parse(self, ...)
- if created then
- cbimap.uci:tset("asterisk", created, {
- type = "friend",
- qualify = "yes",
- provider = "yes"
- })
-
- cbimap.uci:save("asterisk")
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "trunks", "sip", created
- ))
- end
-end
-
-
-user = sip_table:option(DummyValue, "username", "Username")
-
-host = sip_table:option(DummyValue, "host", "Hostname")
-function host.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.address then
- return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port }
- else
- return "n/a"
- end
-end
-
-context = sip_table:option(DummyValue, "context", "Dialplan")
-context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
-function context.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "(default)"
-end
-
-online = sip_table:option(DummyValue, "online", "Registered")
-function online.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online == nil then
- return "n/a"
- else
- return sip_peers[s] and sip_peers[s].info.online
- and "yes" or "no (%s)" %{
- sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
- }
- end
-end
-
-delay = sip_table:option(DummyValue, "delay", "Delay")
-function delay.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online then
- return "%i ms" % sip_peers[s].info.delay
- else
- return "n/a"
- end
-end
-
-info = sip_table:option(Button, "_info", "Info")
-function info.write(self, s)
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "trunks", "sip", s, "info"
- ))
-end
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua
deleted file mode 100644
index 5585c062d2..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua
+++ /dev/null
@@ -1,123 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-local uci = require("luci.model.uci").cursor()
-
---[[
- Dialzone overview table
-]]
-
-if not arg[1] then
- zonemap = Map("asterisk", "Dial Zones", [[
- Dial zones hold patterns of dialed numbers to match.
- Each zone has one or more trunks assigned. If the first trunk is
- congested, Asterisk will try to use the next available connection.
- If all trunks fail, then the following zones in the parent dialplan
- are tried.
- ]])
-
- local zones, znames = ast.dialzone.zones()
-
- zonetbl = zonemap:section(Table, zones, "Zone Overview")
- zonetbl.sectionhead = "Zone"
- zonetbl.addremove = true
- zonetbl.anonymous = false
- zonetbl.extedit = luci.dispatcher.build_url(
- "admin", "asterisk", "dialplans", "zones", "%s"
- )
-
- function zonetbl.cfgsections(self)
- return znames
- end
-
- function zonetbl.parse(self)
- for k, v in pairs(self.map:formvaluetable(
- luci.cbi.REMOVE_PREFIX .. self.config
- ) or {}) do
- if k:sub(-2) == ".x" then k = k:sub(1, #k - 2) end
- uci:delete("asterisk", k)
- uci:save("asterisk")
- self.data[k] = nil
- for i = 1,#znames do
- if znames[i] == k then
- table.remove(znames, i)
- break
- end
- end
- end
-
- Table.parse(self)
- end
-
- zonetbl:option(DummyValue, "description", "Description")
- zonetbl:option(DummyValue, "addprefix")
-
- match = zonetbl:option(DummyValue, "matches")
- function match.cfgvalue(self, s)
- return table.concat(zones[s].matches, ", ")
- end
-
- trunks = zonetbl:option(DummyValue, "trunk")
- trunks.template = "asterisk/cbi/cell"
- function trunks.cfgvalue(self, s)
- return ast.tools.hyperlinks(zones[s].trunks)
- end
-
- return zonemap
-
---[[
- Zone edit form
-]]
-
-else
- zoneedit = Map("asterisk", "Edit Dialzone")
-
- entry = zoneedit:section(NamedSection, arg[1])
- entry.title = "Zone %q" % arg[1];
-
- back = entry:option(DummyValue, "_overview", "Back to dialzone overview")
- back.value = ""
- back.titleref = luci.dispatcher.build_url(
- "admin", "asterisk", "dialplans", "zones"
- )
-
- desc = entry:option(Value, "description", "Description")
- function desc.cfgvalue(self, s, ...)
- return Value.cfgvalue(self, s, ...) or s
- end
-
- trunks = entry:option(MultiValue, "uses", "Used trunks")
- trunks.widget = "checkbox"
- uci:foreach("asterisk", "sip",
- function(s)
- if s.provider == "yes" then
- trunks:value(
- "SIP/%s" % s['.name'],
- "SIP/%s (%s)" %{ s['.name'], s.host or 'n/a' }
- )
- end
- end)
-
-
- match = entry:option(DynamicList, "match", "Number matches")
-
- intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)")
-
- aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)")
- ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)")
-
- lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers")
- lzone:value("", "no special treatment of local numbers")
- for _, z in ipairs(ast.dialzone.zones()) do
- lzone:value(z.name, "%q (%s)" %{ z.name, z.description })
- end
- --for _, v in ipairs(find_outgoing_contexts(zoneedit.uci)) do
- -- lzone:value(unpack(v))
- --end
-
- lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)")
-
- return zoneedit
-
-end
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua
deleted file mode 100644
index e409d706ae..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua
+++ /dev/null
@@ -1,38 +0,0 @@
--- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require "luci.asterisk"
-
-cbimap = Map("asterisk", "MeetMe - Rooms")
-
-meetme = cbimap:section(TypedSection, "meetme", "MeetMe Rooms")
-meetme.addremove = true
-meetme.anonymous = true
-meetme.template = "cbi/tblsection"
-meetme:option(Value, "_description", "Description", "Short room description")
-
-room = meetme:option(Value, "room", "Room Number", "Unique room identifier")
-
-function room.write(self, s, val)
- if val and #val > 0 then
- local old = self:cfgvalue(s)
- self.map.uci:foreach("asterisk", "dialplanmeetme",
- function(v)
- if v.room == old then
- self.map:set(v['.name'], "room", val)
- end
- end)
- Value.write(self, s, val)
- end
-end
-
-
-meetme:option(Value, "pin", "PIN", "PIN required to access")
-meetme:option(Value, "adminpin", "Admin PIN", "PIN required for administration")
-
-function meetme.remove(self, s)
- return ast.meetme.remove(self.map:get(s, "room"), self.map.uci)
-end
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua
deleted file mode 100644
index 9e5aed7f34..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua
+++ /dev/null
@@ -1,17 +0,0 @@
--- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-cbimap = Map("asterisk", "MeetMe - Common Settings",
- "Common settings for MeetMe phone conferences.")
-
-meetme = cbimap:section(TypedSection, "meetmegeneral", "General MeetMe Options")
-meetme.addremove = false
-meetme.anonymous = true
-
-audiobuffers = meetme:option(ListValue, "audiobuffers",
- "Number of 20ms audio buffers to use for conferences")
-
-for i = 2, 32 do audiobuffers:value(i) end
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua
deleted file mode 100644
index 01dfc1682f..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua
+++ /dev/null
@@ -1,145 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
-local function find_outgoing_contexts(uci)
- local c = { }
- local h = { }
-
- uci:foreach("asterisk", "dialplan",
- function(s)
- if not h[s['.name']] then
- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] }
- h[s['.name']] = true
- end
- end)
-
- return c
-end
-
-local function find_incoming_contexts(uci)
- local c = { }
- local h = { }
-
- uci:foreach("asterisk", "sip",
- function(s)
- if s.context and not h[s.context] and
- uci:get_bool("asterisk", s['.name'], "provider")
- then
- c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context }
- h[s.context] = true
- end
- end)
-
- return c
-end
-
-
---
--- SIP phone info
---
-if arg[2] == "info" then
- form = SimpleForm("asterisk", "SIP Phone Information")
- form.reset = false
- form.submit = "Back to overview"
-
- local info, keys = ast.sip.peer(arg[1])
- local data = { }
-
- for _, key in ipairs(keys) do
- data[#data+1] = {
- key = key,
- val = type(info[key]) == "boolean"
- and ( info[key] and "yes" or "no" )
- or ( info[key] == nil or #info[key] == 0 )
- and "(none)"
- or tostring(info[key])
- }
- end
-
- itbl = form:section(Table, data, "SIP Phone %q" % arg[1])
- itbl:option(DummyValue, "key", "Key")
- itbl:option(DummyValue, "val", "Value")
-
- function itbl.parse(...)
- luci.http.redirect(
- luci.dispatcher.build_url("admin", "asterisk", "phones")
- )
- end
-
- return form
-
---
--- SIP phone configuration
---
-elseif arg[1] then
- cbimap = Map("asterisk", "Edit SIP Client")
-
- peer = cbimap:section(NamedSection, arg[1])
- peer.hidden = {
- type = "friend",
- qualify = "yes",
- host = "dynamic",
- nat = "no",
- canreinvite = "no"
- }
-
- back = peer:option(DummyValue, "_overview", "Back to phone overview")
- back.value = ""
- back.titleref = luci.dispatcher.build_url("admin", "asterisk", "phones")
-
- active = peer:option(Flag, "disable", "Account enabled")
- active.enabled = "yes"
- active.disabled = "no"
- function active.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "yes"
- end
-
- exten = peer:option(Value, "extension", "Extension Number")
- cbimap.uci:foreach("asterisk", "dialplanexten",
- function(s)
- exten:value(
- s.extension,
- "%s (via %s/%s)" %{ s.extension, s.type:upper(), s.target }
- )
- end)
-
- display = peer:option(Value, "callerid", "Display Name")
-
- username = peer:option(Value, "username", "Authorization ID")
- password = peer:option(Value, "secret", "Authorization Password")
- password.password = true
-
- regtimeout = peer:option(Value, "registertimeout", "Registration Time Value")
- function regtimeout.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "60"
- end
-
- sipport = peer:option(Value, "port", "SIP Port")
- function sipport.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "5060"
- end
-
- linekey = peer:option(ListValue, "_linekey", "Linekey Mode (broken)")
- linekey:value("", "Off")
- linekey:value("trunk", "Trunk Appearance")
- linekey:value("call", "Call Appearance")
-
- dialplan = peer:option(ListValue, "context", "Assign Dialplan")
- dialplan.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans")
- for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do
- dialplan:value(unpack(v))
- end
-
- incoming = peer:option(StaticList, "incoming", "Receive incoming calls from")
- for _, v in ipairs(find_incoming_contexts(cbimap.uci)) do
- incoming:value(unpack(v))
- end
-
- --function incoming.cfgvalue(...)
- --error(table.concat(MultiValue.cfgvalue(...),"."))
- --end
-
- return cbimap
-end
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua
deleted file mode 100644
index a6c44f9335..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua
+++ /dev/null
@@ -1,104 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
-cbimap = Map("asterisk", "Registered Phones")
-cbimap.pageaction = false
-
-local sip_peers = { }
-cbimap.uci:foreach("asterisk", "sip",
- function(s)
- if s.type ~= "peer" then
- s.name = s['.name']
- s.info = ast.sip.peer(s.name)
- sip_peers[s.name] = s
- end
- end)
-
-
-sip_table = cbimap:section(TypedSection, "sip", "SIP Phones")
-sip_table.template = "cbi/tblsection"
-sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "phones", "sip", "%s")
-sip_table.addremove = true
-
-function sip_table.filter(self, s)
- return s and not cbimap.uci:get_bool("asterisk", s, "provider")
-end
-
-function sip_table.create(self, section)
- if TypedSection.create(self, section) then
- created = section
- cbimap.uci:tset("asterisk", section, {
- type = "friend",
- qualify = "yes",
- provider = "no",
- host = "dynamic",
- nat = "no",
- canreinvite = "no",
- extension = section:match("^%d+$") and section or "",
- username = section:match("^%d+$") and section or ""
- })
- else
- self.invalid_cts = true
- end
-end
-
-function sip_table.parse(self, ...)
- TypedSection.parse(self, ...)
- if created then
- cbimap.uci:save("asterisk")
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "phones", "sip", created
- ))
- end
-end
-
-
-user = sip_table:option(DummyValue, "username", "Username")
-function user.cfgvalue(self, s)
- return sip_peers[s] and sip_peers[s].callerid or
- AbstractValue.cfgvalue(self, s)
-end
-
-host = sip_table:option(DummyValue, "host", "Hostname")
-function host.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.address then
- return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port }
- else
- return "n/a"
- end
-end
-
-context = sip_table:option(DummyValue, "context", "Dialplan")
-context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
-
-online = sip_table:option(DummyValue, "online", "Registered")
-function online.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online == nil then
- return "n/a"
- else
- return sip_peers[s] and sip_peers[s].info.online
- and "yes" or "no (%s)" % {
- sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
- }
- end
-end
-
-delay = sip_table:option(DummyValue, "delay", "Delay")
-function delay.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online then
- return "%i ms" % sip_peers[s].info.delay
- else
- return "n/a"
- end
-end
-
-info = sip_table:option(Button, "_info", "Info")
-function info.write(self, s)
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "phones", "sip", s, "info"
- ))
-end
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua
deleted file mode 100644
index eedc1c2cac..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua
+++ /dev/null
@@ -1,86 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
---
--- SIP trunk info
---
-if arg[2] == "info" then
- form = SimpleForm("asterisk", "SIP Trunk Information")
- form.reset = false
- form.submit = "Back to overview"
-
- local info, keys = ast.sip.peer(arg[1])
- local data = { }
-
- for _, key in ipairs(keys) do
- data[#data+1] = {
- key = key,
- val = type(info[key]) == "boolean"
- and ( info[key] and "yes" or "no" )
- or ( info[key] == nil or #info[key] == 0 )
- and "(none)"
- or tostring(info[key])
- }
- end
-
- itbl = form:section(Table, data, "SIP Trunk %q" % arg[1])
- itbl:option(DummyValue, "key", "Key")
- itbl:option(DummyValue, "val", "Value")
-
- function itbl.parse(...)
- luci.http.redirect(
- luci.dispatcher.build_url("admin", "asterisk", "trunks")
- )
- end
-
- return form
-
---
--- SIP trunk config
---
-elseif arg[1] then
- cbimap = Map("asterisk", "Edit SIP Trunk")
-
- peer = cbimap:section(NamedSection, arg[1])
- peer.hidden = {
- type = "peer",
- qualify = "yes",
- }
-
- back = peer:option(DummyValue, "_overview", "Back to trunk overview")
- back.value = ""
- back.titleref = luci.dispatcher.build_url("admin", "asterisk", "trunks")
-
- sipdomain = peer:option(Value, "host", "SIP Domain")
- sipport = peer:option(Value, "port", "SIP Port")
- function sipport.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "5060"
- end
-
- username = peer:option(Value, "username", "Authorization ID")
- password = peer:option(Value, "secret", "Authorization Password")
- password.password = true
-
- outboundproxy = peer:option(Value, "outboundproxy", "Outbound Proxy")
- outboundport = peer:option(Value, "outboundproxyport", "Outbound Proxy Port")
-
- register = peer:option(Flag, "register", "Register with peer")
- register.enabled = "yes"
- register.disabled = "no"
-
- regext = peer:option(Value, "registerextension", "Extension to register (optional)")
- regext:depends({register="1"})
-
- didval = peer:option(ListValue, "_did", "Number of assigned DID numbers")
- didval:value("", "(none)")
- for i=1,24 do didval:value(i) end
-
- dialplan = peer:option(ListValue, "context", "Dialplan Context")
- dialplan:value(arg[1] .. "_inbound", "(default)")
- cbimap.uci:foreach("asterisk", "dialplan",
- function(s) dialplan:value(s['.name']) end)
-
- return cbimap
-end
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua
deleted file mode 100644
index 44c8ca87d5..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua
+++ /dev/null
@@ -1,94 +0,0 @@
--- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require("luci.asterisk")
-
-cbimap = Map("asterisk", "Trunks")
-cbimap.pageaction = false
-
-local sip_peers = { }
-cbimap.uci:foreach("asterisk", "sip",
- function(s)
- if s.type == "peer" then
- s.name = s['.name']
- s.info = ast.sip.peer(s.name)
- sip_peers[s.name] = s
- end
- end)
-
-
-sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks")
-sip_table.template = "cbi/tblsection"
-sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s")
-sip_table.addremove = true
-sip_table.sectionhead = "Extension"
-
-function sip_table.filter(self, s)
- return s and (
- cbimap.uci:get("asterisk", s, "type") == nil or
- cbimap.uci:get_bool("asterisk", s, "provider")
- )
-end
-
-function sip_table.create(self, section)
- if TypedSection.create(self, section) then
- created = section
- else
- self.invalid_cts = true
- end
-end
-
-function sip_table.parse(self, ...)
- TypedSection.parse(self, ...)
- if created then
- cbimap.uci:tset("asterisk", created, {
- type = "friend",
- qualify = "yes",
- provider = "yes"
- })
-
- cbimap.uci:save("asterisk")
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "trunks", "sip", created
- ))
- end
-end
-
-
-user = sip_table:option(DummyValue, "username", "Username")
-
-context = sip_table:option(DummyValue, "context", "Dialplan")
-context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
-function context.cfgvalue(...)
- return AbstractValue.cfgvalue(...) or "(default)"
-end
-
-online = sip_table:option(DummyValue, "online", "Registered")
-function online.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online == nil then
- return "n/a"
- else
- return sip_peers[s] and sip_peers[s].info.online
- and "yes" or "no (%s)" %{
- sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
- }
- end
-end
-
-delay = sip_table:option(DummyValue, "delay", "Delay")
-function delay.cfgvalue(self, s)
- if sip_peers[s] and sip_peers[s].info.online then
- return "%i ms" % sip_peers[s].info.delay
- else
- return "n/a"
- end
-end
-
-info = sip_table:option(Button, "_info", "Info")
-function info.write(self, s)
- luci.http.redirect(luci.dispatcher.build_url(
- "admin", "asterisk", "trunks", "sip", s, "info"
- ))
-end
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua
deleted file mode 100644
index 51143e6a88..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua
+++ /dev/null
@@ -1,48 +0,0 @@
--- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ast = require "luci.asterisk"
-
-cbimap = Map("asterisk", "Voicemail - Mailboxes")
-
-voicemail = cbimap:section(TypedSection, "voicemail", "Voicemail Boxes")
-voicemail.addremove = true
-voicemail.anonymous = true
-voicemail.template = "cbi/tblsection"
-
-context = voicemail:option(ListValue, "context", "Context")
-context:value("default")
-
-number = voicemail:option(Value, "number",
- "Mailbox Number", "Unique mailbox identifier")
-
-function number.write(self, s, val)
- if val and #val > 0 then
- local old = self:cfgvalue(s)
- self.map.uci:foreach("asterisk", "dialplanvoice",
- function(v)
- if v.voicebox == old then
- self.map:set(v['.name'], "voicebox", val)
- end
- end)
- Value.write(self, s, val)
- end
-end
-
-
-voicemail:option(Value, "name", "Ownername", "Human readable display name")
-voicemail:option(Value, "password", "Password", "Access protection")
-voicemail:option(Value, "email", "eMail", "Where to send voice messages")
-voicemail:option(Value, "page", "Pager", "Pager number")
-
-zone = voicemail:option(ListValue, "zone", "Timezone", "Used time format")
-zone.titleref = luci.dispatcher.build_url("admin/asterisk/voicemail/settings")
-cbimap.uci:foreach("asterisk", "voicezone",
- function(s) zone:value(s['.name']) end)
-
-function voicemail.remove(self, s)
- return ast.voicemail.remove(self.map:get(s, "number"), self.map.uci)
-end
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua
deleted file mode 100644
index ef52a32e7d..0000000000
--- a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua
+++ /dev/null
@@ -1,51 +0,0 @@
--- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-require "luci.sys.zoneinfo"
-
-
-cbimap = Map("asterisk", "Voicemail - Common Settings")
-
-voicegeneral = cbimap:section(TypedSection, "voicegeneral",
- "General Voicemail Options", "Common settings for all mailboxes are " ..
- "defined here. Most of them are optional. The storage format should " ..
- "never be changed once set.")
-
-voicegeneral.anonymous = true
-voicegeneral.addremove = false
-
-format = voicegeneral:option(MultiValue, "Used storage formats")
-format.widget = "checkbox"
-format:value("wav49")
-format:value("gsm")
-format:value("wav")
-
-voicegeneral:option(Flag, "sendvoicemail", "Enable sending of emails")
-voicegeneral:option(Flag, "attach", "Attach voice messages to emails")
-voicegeneral:option(Value, "serveremail", "Used email sender address")
-voicegeneral:option(Value, "emaildateformat", "Date format used in emails").optional = true
-voicegeneral:option(Value, "maxlogins", "Max. failed login attempts").optional = true
-voicegeneral:option(Value, "maxmsg", "Max. allowed messages per mailbox").optional = true
-voicegeneral:option(Value, "minmessage", "Min. number of seconds for voicemail").optional = true
-voicegeneral:option(Value, "maxmessage", "Max. number of seconds for voicemail").optional = true
-voicegeneral:option(Value, "maxsilence", "Seconds of silence until stop recording").optional = true
-voicegeneral:option(Value, "maxgreet", "Max. number of seconds for greetings").optional = true
-voicegeneral:option(Value, "skipms", "Milliseconds to skip for rew./ff.").optional = true
-voicegeneral:option(Value, "silencethreshold", "Threshold to detect silence").optional = true
-
-
-voicezone = cbimap:section(TypedSection, "voicezone", "Time Zones",
- "Time zones define how dates and times are expressen when used in " ..
- "an voice mails. Refer to the asterisk manual for placeholder values.")
-
-voicezone.addremove = true
-voicezone.sectionhead = "Name"
-voicezone.template = "cbi/tblsection"
-
-tz = voicezone:option(ListValue, "zone", "Location")
-for _, z in ipairs(luci.sys.zoneinfo.TZ) do tz:value(z[1]) end
-
-voicezone:option(Value, "message", "Date Format")
-
-
-return cbimap
diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm
deleted file mode 100644
index 3afb26bdac..0000000000
--- a/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm
+++ /dev/null
@@ -1,13 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%+cbi/valueheader%>
-<% if self.href then %><a href="<%=self.href%>"><% end -%>
- <%=self:cfgvalue(section)%>
-<%- if self.href then %></a><%end%>
-&#160;
-<input type="hidden" id="<%=cbid%>" value="<%=luci.util.pcdata(self:cfgvalue(section))%>" />
-<%+cbi/valuefooter%>
diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm
deleted file mode 100644
index 1c58b0a02c..0000000000
--- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm
+++ /dev/null
@@ -1,244 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%+header%>
-
-<%
- local uci = luci.model.uci.cursor_state()
- local ast = require "luci.asterisk"
-
- function digit_pattern(s,t)
- return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'%s>%s</code>"
- %{ t and " title='" .. t .. "'" or "", s }
- end
-
- function rowstyle(i)
- return "cbi-rowstyle-%i" %{
- ( i % 2 ) == 0 and 2 or 1
- }
- end
-
- function format_matches(z)
- local html = { }
-
- if type(z) ~= "table" then
- z = { matches = { z } }
- end
-
- if z.localprefix then
- for _, m in ipairs(z.matches) do
- html[#html+1] =
- digit_pattern(z.localprefix, "local prefix") .. " " ..
- digit_pattern(m)
- end
- end
-
- if z.intlmatches and #z.intlmatches > 0 then
- for _, i in ipairs(z.intlmatches) do
- for _, m in ipairs(z.matches) do
- html[#html+1] = "%s %s" %{
- digit_pattern("(%s)" % i, "intl. prefix"),
- digit_pattern(m)
- }
- end
- end
- else
- for _, m in ipairs(z.matches) do
- html[#html+1] = digit_pattern(m)
- end
- end
-
- return table.concat(html, "; ")
- end
-%>
-
-
-<form method="post" action="<%=url('admin/asterisk/dialplans')%>" enctype="multipart/form-data">
- <div>
- <input type="hidden" name="cbi.submit" value="1" />
- <input type="submit" value="Save" class="hidden" />
- </div>
-
-<div class="cbi-map" id="cbi-asterisk">
- <h2 name="content">Outgoing Call Routing</h2>
- <div class="cbi-map-descr">
- Here you can manage your dial plans which are used to route outgoing calls from your local extensions.<br /><br />
- Related tasks:<br />
- <a href="<%=url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> |
- <a href="<%=url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> |
- <a href="<%=url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a>
- </div>
- <!-- tblsection -->
- <fieldset class="cbi-section" id="cbi-asterisk-sip">
- <!--<legend>Dialplans</legend>-->
- <div class="cbi-section-descr"></div>
-
- <% for i, plan in pairs(ast.dialplan.plans()) do %>
- <div class="cbi-section-node">
- <div class="table cbi-section-table">
- <div class="tr cbi-section-table-titles">
- <div style="text-align: left; padding: 3px" class="th cbi-section-table-cell">
- <big>Dialplan <em><%=plan.name%></em></big>
- </div>
- <div class="td">
- <a href="<%=url('admin/asterisk/dialplans')%>?delplan=<%=plan.name%>">
- <img style="border:none" alt="Remove this dialplan" title="Remove this dialplan" src="/luci-static/resources/cbi/remove.gif" />
- </a>
- </div>
- </div>
-
- <!-- dialzones -->
- <% local zones_used = { }; local row = 0 %>
- <% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %>
- <div class="tr cbi-section-table-row <%=rowstyle(row)%>">
- <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
- <strong>&#x2514; Dialzone <em><%=zone.name%></em></strong> (<%=zone.description%>)
- <p style="padding-left: 1em; margin-bottom:0">
- Lines:
- <%=ast.tools.hyperlinks(
- zone.trunks, function(v)
- return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
- end
- )%><br />
- Matches:
- <%=format_matches(zone)%>
- </p>
- </div>
- <div style="width:5%" class="td cbi-value-field">
- <a href="<%=url('admin/asterisk/dialplans/out', zone.name)%>">
- <img style="border:none" alt="Edit dialzone" title="Edit dialzone" src="/luci-static/resources/cbi/edit.gif" />
- </a>
- <a href="<%=url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>">
- <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
- </a>
- </div>
- </div>
- <% row = row + 1; end %>
- <!-- /dialzones -->
-
- <!-- voicemail -->
- <% local boxes_used = { } %>
- <% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %>
- <div class="tr cbi-section-table-row <%=rowstyle(row)%>">
- <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
- <strong>&#x2514; Voicemailbox <em><%=box.id%></em></strong> (<%=box.name%>)
- <p style="padding-left: 1em; margin-bottom:0">
- Owner: <%=box.name%> |
- eMail: <%=#box.email > 0 and box.email or 'n/a'%> |
- Pager: <%=#box.page > 0 and box.page or 'n/a'%><br />
- Matches: <%=format_matches(ext)%>
- </p>
- </div>
- <div style="width:5%" class="td cbi-value-field">
- <a href="<%=url('admin/asterisk/voicemail/mailboxes')%>">
- <img style="border:none" alt="Manage mailboxes ..." title="Manage mailboxes ..." src="/luci-static/resources/cbi/edit.gif" />
- </a>
- <a href="<%=url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>">
- <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
- </a>
- </div>
- </div>
- <% row = row + 1; end %>
- <!-- /voicemail -->
-
- <!-- meetme -->
- <% local rooms_used = { } %>
- <% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %>
- <div class="tr cbi-section-table-row <%=rowstyle(row)%>">
- <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
- <strong>&#x2514; MeetMe Room <em><%=room.room%></em></strong>
- <% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %>
- <p style="padding-left: 1em; margin-bottom:0">
- Matches: <%=format_matches(ext)%>
- </p>
- </div>
- <div style="width:5%" class="td cbi-value-field">
- <a href="<%=url('admin/asterisk/meetme/rooms')%>">
- <img style="border:none" alt="Manage conferences ..." title="Manage conferences ..." src="/luci-static/resources/cbi/edit.gif" />
- </a>
- <a href="<%=url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>">
- <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
- </a>
- </div>
- </div>
- <% row = row + 1; end %>
- <!-- /meetme -->
-
- <div class="tr cbi-section-table-row">
- <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell" colspan="2">
- <hr style="margin-bottom:0.5em; border-width:0 0 1px 0" />
-
- Add Dialzone:<br />
- <select style="width:30%" name="addzone.<%=plan.name%>">
- <option value="">-- please select --</option>
- <% for _, zone in luci.util.kspairs(ast.dialzone.zones()) do %>
- <% if not zones_used[zone.name] then %>
- <option value="<%=zone.name%>"><%=zone.name%> (<%=zone.description%>)</option>
- <% end %>
- <% end %>
- </select>
- <br /><br />
-
- Add Voicemailbox:<br />
- <select style="width:20%" name="addvbox.<%=plan.name%>" onchange="this.form['addvboxext.<%=plan.name%>'].value=this.options[this.selectedIndex].value.split('@')[0]">
- <option value="">-- please select --</option>
- <% for ext, box in luci.util.kspairs(ast.voicemail.boxes()) do %>
- <% if not boxes_used[box.id] then %>
- <option value="<%=box.id%>"><%=box.id%> (<%=box.name%>)</option>
- <% end %>
- <% end %>
- </select>
- as extension
- <input type="text" style="width:5%" name="addvboxext.<%=plan.name%>" />
- <br /><br />
-
- Add MeetMe Conference:<br />
- <select style="width:20%" name="addmeetme.<%=plan.name%>" onchange="this.form['addmeetmeext.<%=plan.name%>'].value=this.options[this.selectedIndex].value">
- <option value="">-- please select --</option>
- <% for ext, room in luci.util.kspairs(ast.meetme.rooms()) do %>
- <%# if not rooms_used[room.room] then %>
- <option value="<%=room.room%>">
- <%=room.room%>
- <% if room.description and #room.description > 0 then %>(<%=room.description%>)<% end %>
- </option>
- <%# end %>
- <% end %>
- </select>
- as extension
- <input type="text" style="width:5%" name="addmeetmeext.<%=plan.name%>" />
- <br /><br />
-
- <input type="submit" class="cbi-button cbi-button-add" value="Add item &raquo;" title="Add item ..."/>
- </div>
- </div>
-
- </div>
-
- <div class="cbi-section-create cbi-tblsection-create"></div>
- </div>
- <br />
- <% end %>
-
- <div class="cbi-section-node">
- <div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
- <h3>Create a new dialplan</h3>
- The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
-
- <%- if create_error then %>
- <br /><span style="color:red">Invalid name given!</span><br />
- <% end -%>
-
- <br />
- <input type="text" class="cbi-section-create-name" name="addplan" style="width:200px" />
- <input type="submit" class="cbi-button cbi-button-add" value="Add dialplan" title="Add dialplan"/>
- </div>
- </div>
-
- </fieldset>
-</div>
-</form>
-<div class="clear"></div>
-<%+footer%>
diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm
deleted file mode 100644
index 3cbc5002be..0000000000
--- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm
+++ /dev/null
@@ -1,164 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%+header%>
-
-<%
- local uci = luci.model.uci.cursor_state()
- local ast = require("luci.asterisk")
-
- function digit_pattern(s)
- return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'>%s</code>" % s
- end
-
- function rowstyle(i)
- return "cbi-rowstyle-%i" %{
- ( i % 2 ) == 0 and 2 or 1
- }
- end
-
- local function find_trunks()
- local t = { }
-
- uci:foreach("asterisk", "sip",
- function(s)
- if uci:get_bool("asterisk", s['.name'], "provider") then
- t[#t+1] = {
- "SIP/%s" % s['.name'],
- "SIP: %s" % s['.name']
- }
- end
- end)
-
- uci:foreach("asterisk", "iax",
- function(s)
- t[#t+1] = {
- "IAX/%s" % s['.name'],
- "IAX: %s" % s.extension or s['.name']
- }
- end)
-
- return t
- end
-
-%>
-
-
-<form method="post" action="<%=url('admin/asterisk/dialplans/zones')%>" enctype="multipart/form-data">
- <div>
- <input type="hidden" name="cbi.submit" value="1" />
- <input type="submit" value="Save" class="hidden" />
- </div>
-
-<div class="cbi-map" id="cbi-asterisk">
- <h2 name="content">Dial Zone Management</h2>
- <div class="cbi-map-descr">
- <a href="<%=url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br />
- Here you can manage your dial zones. The zones are used to route outgoing calls to the destination.
- Each zone groups multiple trunks and number matches to represent a logical destination. Zones can
- also be used to enforce certain dial restrictions on selected extensions.
- </div>
-
- <!-- tblsection -->
- <fieldset class="cbi-section" id="cbi-asterisk-sip">
- <div class="cbi-section-node">
- <div class="table cbi-section-table">
- <div class="tr cbi-section-table-titles">
- <div style="text-align: left; padding: 3px" class="th cbi-section-table-cell" colspan="6">
- <h3>Dialzone Overview</h3>
- </div>
- </div>
-
- <div class="tr cbi-section-table-descr">
- <div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Name</div>
- <div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Prepend</div>
- <div style="width: 20%; text-align:left" class="th cbi-section-table-cell">- Match</div>
- <div style="text-align:left" class="th cbi-section-table-cell">Trunk</div>
- <div style="width: 35%; text-align:left" class="th cbi-section-table-cell">Description</div>
- <div style="width: 4%; text-align:left" class="th cbi-section-table-cell"></div>
- </div>
-
- <% for i, rule in pairs(ast.dialzone.zones()) do %>
- <div class="tr cbi-section-table-row <%=rowstyle(i)%>">
- <div style="text-align:right" class="td cbi-value-field">
- <%=rule.name%>
- </div>
- <div style="text-align:right" class="td cbi-value-field">
- <% for _ in ipairs(rule.matches) do %>
- <%=rule.addprefix and digit_pattern(rule.addprefix)%>&#160;<br />
- <% end %>
- </div>
- <div style="text-align:left" class="td cbi-value-field">
- <% for _, m in ipairs(rule.matches) do %>
- <%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%>
- <%=digit_pattern(m)%><br />
- <% end %>
- </div>
- <div style="text-align:left" class="td cbi-value-field">
- <%=ast.tools.hyperlinks(
- rule.trunks, function(v)
- return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
- end
- )%>
- </div>
- <div style="text-align:left" class="td cbi-value-field">
- <%=rule.description or rule.name%>
- </div>
- <div style="text-align:left" class="td cbi-value-field">
- <a href="<%=url('admin/asterisk/dialplans/out', rule.name)%>">
- <img style="border:none" alt="Edit entry" title="Edit entry" src="/luci-static/resources/cbi/edit.gif" />
- </a>
- <a href="<%=url('admin/asterisk/dialplans/zones')%>?delzone=<%=rule.name%>">
- <img style="border:none" alt="Delete entry" title="Delete entry" src="/luci-static/resources/cbi/remove.gif" />
- </a>
- </div>
- </div>
- <% end %>
- </div>
- <div class="cbi-section-create cbi-tblsection-create"></div>
- </div>
- <br />
-
- <div class="cbi-section-node">
- <div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
- <h3>Create a new dialzone</h3>
- The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
- You can specify multiple number matches by separating them with spaces.<br />
-
- <%- if create_error then %>
- <br /><span style="color:red">Invalid name given!</span><br />
- <% end -%>
-
- <div class="table">
- <div class="tr">
- <div class="td" style="padding:3px">
- <label for="create1">1) Name</label><br />
- <input type="text" class="cbi-section-create-name" id="create1" name="newzone_name" style="width:200px" />
- <br /><br />
-
- <label for="create2">2) Number Match</label><br />
- <input type="text" class="cbi-section-create-name" id="create2" name="newzone_match" style="width:200px" />
- </div>
- <div class="td" style="padding:3px">
- <label for="create3">3) Trunks</label><br />
- <select class="cbi-input-select" multiple="multiple" id="create3" name="newzone_uses" size="4" style="width:200px">
- <% for i, t in ipairs(find_trunks()) do %>
- <option value="<%=t[1]%>"><%=t[2]%></option>
- <% end %>
- </select>
- </div>
- </div>
- </div>
- <br />
-
- <input type="submit" class="cbi-button cbi-button-add" name="newzone" value="Add entry" title="Add entry"/>
- </div>
- </div>
- </fieldset>
-</div>
-</form>
-<div class="clear"></div>
-<%+footer%>
diff --git a/applications/luci-app-asterisk/po/ca/asterisk.po b/applications/luci-app-asterisk/po/ca/asterisk.po
deleted file mode 100644
index 978c47392d..0000000000
--- a/applications/luci-app-asterisk/po/ca/asterisk.po
+++ /dev/null
@@ -1,680 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2009-05-31 19:18+0200\n"
-"Last-Translator: Eduard Duran <iopahopa@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Pootle 1.1.0\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Opcions Generals d'Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Directori AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Desa en memòria cau els sons gravats durant la gravació"
-
-#~ msgid "Debug Level"
-#~ msgstr "Nivell de depuració"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Desactiva algunes alertes"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Bolca el nucli en cas de fallada"
-
-#~ msgid "High Priority"
-#~ msgstr "Alta Prioritat"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Inicialitza Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Utilitza l'hora interna"
-
-#~ msgid "Log directory"
-#~ msgstr "Directori de registres"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Número màxim de trucades permeses"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Càrrega màxima per deixar d'acceptar trucades noves"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Desactiva els colors de consola"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Directori de memòria cau dels fitxers de so"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Executa amb els permisos del Grup"
-
-#~ msgid "The User to run as"
-#~ msgstr "Executa amb els permisos de l'Usuari"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Directori de bústia de correu"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefixa l'UniquID amb el nom del sistema"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Munta les rutes de transcodificació via SLINEAR, no directament"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmet silenci SLINEAR mentre s'enregistri un canal"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Nivell de detall"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Secció Dialplan"
-
-#~ msgid "include"
-#~ msgstr "inclou"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Connector Dialplan"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Opcions generals de Dialplan"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permet la transferència"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Buida les variables globals"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Dialplan Goto"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Conferència Dialplan"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Dialplan Time"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Bústia de correu Dialplan"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Zones de marcatge per Dialplan"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Prefix per afegir als Dialplan que coincideixin"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Coincideix amb el prefix Internacional"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Prefix (0) per afegir/esborrar a/des de números internacionals"
-
-#~ msgid "localzone"
-#~ msgstr "zona local"
-
-#~ msgid "Match plan"
-#~ msgstr "Pla coincident"
-
-#~ msgid "Connection to use"
-#~ msgstr "Connexió a fer servir"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Mapa de Funcions Principals"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Tecla de transferència assistida"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "Tecla de transferència cega"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Tecla per desconnectar trucada"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Tecla per trucada en espera"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Funció de trucada en espera"
-
-#~ msgid "ADSI Park"
-#~ msgstr "Trucada en espera ADSI"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Temps d'espera de transferència assistida (seg)"
-
-#~ msgid "One touch record key"
-#~ msgstr "Tecla de registre d'un toc"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Nom del context de la trucada en espera"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Fitxer de so per reproduir a la trucada en espera"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Temps màxim (en ms) entre dígits per l'activació de funció"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Mètode per trobar una ranura de trucada en espera"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Reprodueix to de cortesia a"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Activa les trucades en espera"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Extensió per marcar per deixar en espera una trucada"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Temps de trucada en espera (secs)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Rang d'extensions per trucada en espera"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Connector de recol·lecció"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Segons a esperar entre dígits quan es transfereix"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "so quan es completa la transferència assistida"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "so quan falla la transferència assitida"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Recarrega la configuració de maquinari"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Mètode de Reinici"
-
-#~ msgid "Parameter"
-#~ msgstr "Paràmetre"
-
-#~ msgid "Option type"
-#~ msgstr "Tipus d'opció"
-
-#~ msgid "User name"
-#~ msgstr "Nom d'usuari"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Opcions generals IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Permet Codecs"
-
-#~ msgid "Static"
-#~ msgstr "Estàtic"
-
-#~ msgid "Write Protect"
-#~ msgstr "Protecció d'escriptura"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Conferència Meetme"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN d'administrador"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN de reunió"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Opcions generals de conferència Meetme"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Número de memòries intermitges d'àudio de 20 ms a utilitzar"
-
-#~ msgid "Modules"
-#~ msgstr "Mòduls"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Aplicació de recepció d'alarma"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Aplicació d'autenticació"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Assegura't que asterisk no desa CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Comprova que el canal estigui disponible"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Escolta a qualsevol canal"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Aplicació de control de reproducció"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Talla les variables"
-
-#~ msgid "Database access functions"
-#~ msgstr "Funcions d'accés a base de dades"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Aplicació de marcatge"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Aplicació de màquina de dictat virtual"
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Suport de recollida de trucades adreçades"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Directori de connectors"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "Aplicació DISA (Direct Inward System Access)"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Bolca les variables de canal de l'aplicació"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Aplicació d'eco simple"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "Consulta ENUM"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Reavalua cadenes"
-
-#~ msgid "Executes applications"
-#~ msgstr "Executa aplicacions"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Interfície d'aplicació IVR externa"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Bifurca el CDR en 2 entitats separades"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Obtingues la ADSI CPE ID"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Rutines de gestió de grup"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Codifica i emet via icecast i ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Aplicació de transmissió d'imatge"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Cerca la ID/nom/número de qui truca de negre"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Cerca la ID/nom/número de qui truca de la base de dades local"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Macros de connectors"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Una aplicació de matemàtiques simple"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Aplicació de suma de verificació MD5"
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Aplicació de prova de milliwat digital (mu-law)"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Registra una trucada i mescla l'àudio durant la gravació"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Aplicació d'anunci de trucades i trucada en espera"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Aplicació de reproducció trivial"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Requereix que s'entri un número de telèfon"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Encuament de trucades real"
-
-#~ msgid "Random goto"
-#~ msgstr "Goto aleatori"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Aplicació de lectura de variables"
-
-#~ msgid "Read in a file"
-#~ msgstr "Llegeix en un fitxer"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Cerca/reescriptura de dades en temps real"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Aplicació d'enregistrament trivial"
-
-#~ msgid "Say time"
-#~ msgstr "Digues l'hora"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Envia aplicació de dígits DTMF"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Envia aplicacions de text"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Estableix l'aplicació CallerID"
-
-#~ msgid "CDR user field apps"
-#~ msgstr "Aplicacions de camp d'usuari CDR"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr "load =&gt; .so ; Estableix el nom CallerID"
-
-#~ msgid "load => .so ; Set CallerID Number"
-#~ msgstr "load =&gt; .so ; Estableix el número CallerID"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Estableix el número RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Estableix la capacitat de transferència XDSI"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "Gestor SMS/PSTN"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Penja el canal sol·licitat"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Rutines de pila"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Aplicació genèrica de System()"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Playback amb Detecció de Parla"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Aplicació de proves d'interfície"
-
-#~ msgid "Transfer"
-#~ msgstr "Transfereix"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "TXTCIDName"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Envia aplicacions d'URL"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Aplicació d'esdeveniments personalitzats d'usuari"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Envia sortida detallada"
-
-#~ msgid "Voicemail"
-#~ msgstr "Bústia de veu"
-
-#~ msgid "Waits until first ring after time"
-#~ msgstr "Espera fins el primer to després del temps"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Espera l'aplicació de silenci"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "Execució de bucles while i condicionals"
-
-#~ msgid "Comma Separated Values CDR Backend"
-#~ msgstr "Valors de Backend CDR separats per comes"
-
-#~ msgid "Customizable Comma Separated Values CDR Backend"
-#~ msgstr "Valors de Backend CDR personalitzats separats per comes"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Backend CDR del gestor de trucades Asterisk"
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "Backend CDR MySQL"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "Backend CDR PostgreSQL"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "Backend CDR SQLite"
-
-#~ msgid "Agent Proxy Channel"
-#~ msgstr "Canal de l'Agent Proxy"
-
-#~ msgid "Option chan_iax2"
-#~ msgstr "Opció chan_iax2"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Canal de proxy local"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Protocol d'inicialització de sessió (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Codificador/Decodificador PCM adaptatiu diferencial"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "Codificador/Decodificador de llei A"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "Codificador/Decodificador directe de llei A i Mu"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "Transcodificador ITU G.726-32kbps G726"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "Còdec de traducció GSM/PCM16 (lineal amb signe)"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Còdec de traducció Speex/PCM16 (lineal amb signe)"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Codificador/Decodificador llei Mu"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Format AU de Sun Microsystems (lineal amb signe)"
-
-#~ msgid "G.723.1 Simple Timestamp File Format"
-#~ msgstr "Format de fitxer de marca de temps simple G.723.1"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Dades Raw G.726 (16/24/32/40kbps)"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Dades Raw G729"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Dades Raw GSM"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Dades Raw h263"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "Imatge JPEG (Joint Picture Experts Group)"
-
-#~ msgid "Raw uLaw 8khz Audio support (PCM)"
-#~ msgstr "Suport d'àudio Raw llei-u 8khz (PCM)"
-
-#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
-#~ msgstr "load =&gt; .so ; suport d'àudio Raw llei-a 8khz PCM"
-
-#~ msgid "Raw Signed Linear Audio support (SLN)"
-#~ msgstr "Suport d'àudio Raw amb signe lineal (SLN)"
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Format de fitxer Dialogic VOX (ADPCM)"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Format Microsoft WAV (8000hz amb signe lineal)"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Format Microsoft WAV (GSM propietari)"
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr "Functions de dialplan relacionades amb la ID de qui truca"
-
-#~ msgid "ENUM Functions"
-#~ msgstr "Funcions ENUM"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "Funcions de codificació / decodificació d'URI"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Compilador del llenguatge de connectors d'Asterisk"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Configuració del connector de text"
-
-#~ msgid "load => .so ; Builtin dialplan functions"
-#~ msgstr "load =&gt; .s ; Funcions integrades dialplan"
-
-#~ msgid "Loopback Switch"
-#~ msgstr "Switch loopback"
-
-#~ msgid "Realtime Switch"
-#~ msgstr "Switch en temps real"
-
-#~ msgid "Outgoing Spool Support"
-#~ msgstr "Suport de gestió de cues sortint"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Wil Cal U (Auto Marcatge)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "Configuració del recurs MySQL"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "Configuració del recurs ODBC"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "Mòdul PGSQL"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Signatures digitals criptogràfiques"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Recurs de trucada en espera"
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Configuració d'indicacions"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Recurs de monitoreig de trucades"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Recurs de música en espera"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "Recurs ODBC"
-
-#~ msgid "SMDI Module"
-#~ msgstr "Mòdul SMDI"
-
-#~ msgid "SNMP Module"
-#~ msgstr "Mòdul SNMP"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Música en espera"
-
-#~ msgid "Application"
-#~ msgstr "Aplicació"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Directori de música"
-
-#~ msgid "Option mode"
-#~ msgstr "Mode d'opció"
-
-#~ msgid "Random Play"
-#~ msgstr "Reproducció aleatòria"
-
-#~ msgid "DTMF mode"
-#~ msgstr "Mode DTMF"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Domini d'identitat primari per les capçaleres From:"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "Usuari d'inici (requerit per diversos proveïdors SIP)"
-
-#~ msgid "Ring on incoming dialplan contexts"
-#~ msgstr "Truca en contextos d'entrades dialplan"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Permet insegur per"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Bústia de veu per MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT entre el telèfon i l'Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Comprova etiquetes a les capçaleres"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Temps d'esperi per contestar (ms) per caigudes de connexió"
-
-#~ msgid "Register connection"
-#~ msgstr "Registra connexió"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "Truca el propi connector per la bústia de veu"
-
-#~ msgid "Client Type"
-#~ msgstr "Tipus de client"
-
-#~ msgid "Username"
-#~ msgstr "Nom d'usuari"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Secció sipgeneral"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Permet còdecs"
-
-#~ msgid "SIP realm"
-#~ msgstr "Reialme SIP"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Opcions generals de bústia de veu"
-
-#~ msgid "From Email address of server"
-#~ msgstr "Adreça de correu electrònic d'origen del servidor"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Bústies de la bústia de veu"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "El correu electrònic conté fitxers adjunts"
-
-#~ msgid "Email"
-#~ msgstr "Correu electrònic"
-
-#~ msgid "Display Name"
-#~ msgstr "Nom a mostrar"
-
-#~ msgid "Password"
-#~ msgstr "Contrasenya"
-
-#~ msgid "zone"
-#~ msgstr "zona"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Configuració de zona de veu"
-
-#~ msgid "Message Format"
-#~ msgstr "Format de missatge"
diff --git a/applications/luci-app-asterisk/po/cs/asterisk.po b/applications/luci-app-asterisk/po/cs/asterisk.po
deleted file mode 100644
index 7341d57cbd..0000000000
--- a/applications/luci-app-asterisk/po/cs/asterisk.po
+++ /dev/null
@@ -1,11 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
diff --git a/applications/luci-app-asterisk/po/de/asterisk.po b/applications/luci-app-asterisk/po/de/asterisk.po
deleted file mode 100644
index f289849bd1..0000000000
--- a/applications/luci-app-asterisk/po/de/asterisk.po
+++ /dev/null
@@ -1,131 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-26 17:57+0200\n"
-"PO-Revision-Date: 2012-02-23 16:29+0200\n"
-"Last-Translator: Martin <roecker@empty-v.de>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk Grundeinstellungen"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI - Verzeichnis"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Audiodateien während der Aufnahme zwischenspeichern"
-
-#~ msgid "Debug Level"
-#~ msgstr "Debug Stufe"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Schalte einige Warnungen aus"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Speicherabbild bei Absturz erstellen"
-
-#~ msgid "High Priority"
-#~ msgstr "Hohe Priorität"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Verschlüsselung initialisieren"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Interne Zeitreferenz benutzen"
-
-#~ msgid "Log directory"
-#~ msgstr "Log - Verzeichnis"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Maximale Anruferanzahl"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Maximale CPU Auslastung um eingehende Anrufe anzunehmen"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Farbige Ausgabe auf der Konsole deaktivieren"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Verzeichnis zum Zwischenspeichern von Audiodateien"
-
-#~ msgid "The Group to run as"
-#~ msgstr "zu benutzende Gruppenkennung"
-
-#~ msgid "The User to run as"
-#~ msgstr "zu benutzende Benutzerkennung"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Sprachnachrichten Puffer"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Systemnamen als Präfix von UniquID benutzen"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Transcode Pfade durch SLINEAR bauen, indirekt"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Übertrage Stille (SLINEAR) während der Aufnahme eines Kanals"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Detailgrad"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Übertragung erlauben"
-
-#~ msgid "Clear global vars"
-#~ msgstr "globale Variablen Zurücksetzen"
-
-#~ msgid "localzone"
-#~ msgstr "Zeitzone"
-
-#~ msgid "Connection to use"
-#~ msgstr "zu verwendende Verbindung"
-
-#~ msgid "One touch record key"
-#~ msgstr "Sofortaufnahmetaste"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Hardwarekonfiguration neuladen"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Neustartmethode"
-
-#~ msgid "Parameter"
-#~ msgstr "Parameter"
-
-#~ msgid "User name"
-#~ msgstr "Benutzername"
-
-#~ msgid "IAX General Options"
-#~ msgstr "IAX Allgemeine Einstellungen"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Codecs erlauben"
-
-#~ msgid "Admin PIN"
-#~ msgstr "Admin PIN"
-
-#~ msgid "Modules"
-#~ msgstr "Module"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Prüfen, ob der Kanal verfügbar ist"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Anwendung zur Wiedergabesteuerung"
-
-#~ msgid "Executes applications"
-#~ msgstr "startet Anwendungen"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Einfache Mathe-Anwendung"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "MD5-Prüfsummen Anwendung"
diff --git a/applications/luci-app-asterisk/po/el/asterisk.po b/applications/luci-app-asterisk/po/el/asterisk.po
deleted file mode 100644
index 7a0fee7750..0000000000
--- a/applications/luci-app-asterisk/po/el/asterisk.po
+++ /dev/null
@@ -1,71 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2012-03-19 14:55+0200\n"
-"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Γενικές επιλογές του Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Φάκελος AGI"
-
-#~ msgid "Debug Level"
-#~ msgstr "Επίπεδο αποσφαλμάτωσης"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Απενεργοποίηση ορισμένων μηνυμάτων"
-
-#~ msgid "High Priority"
-#~ msgstr "Υψηλή Προτεραιότητα"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Αρχικοποίηση Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Χρήση εσωτερικού χρονόμετρου"
-
-#~ msgid "Log directory"
-#~ msgstr "Φάκελος καταγραφής"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Μέγιστος επιτρεπόμενος αριθμός κλήσεων"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Μέγιστος φόρτος για παύση εισερχόμενων κλήσεων"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Απενεργοποίηση χρωμάτων κονσόλας"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Κρυφός φάκελος αρχείων ήχου"
-
-#~ msgid "include"
-#~ msgstr "περιλαμβάνω"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Καθαρισμός γενικών μεταβλητών"
-
-#~ msgid "Connection to use"
-#~ msgstr "Χρήση σύνδεσης"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Μέθοδος Επανεκκίνησης"
-
-#~ msgid "Parameter"
-#~ msgstr "Παράμετρος"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "Εικόνα JPEG (Joint Picture Experts Group)"
-
-#~ msgid "Application"
-#~ msgstr "Εφαρμογή"
diff --git a/applications/luci-app-asterisk/po/en/asterisk.po b/applications/luci-app-asterisk/po/en/asterisk.po
deleted file mode 100644
index c1ac54403c..0000000000
--- a/applications/luci-app-asterisk/po/en/asterisk.po
+++ /dev/null
@@ -1,680 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:35+0200\n"
-"PO-Revision-Date: 2011-06-03 10:45+0200\n"
-"Last-Translator: Ladislav <suspend@tiscali.cz>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk General Options"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI directory"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Cache recorded sound files during recording"
-
-#~ msgid "Debug Level"
-#~ msgstr "Debug Level"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Disable some warnings"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Dump core on crash"
-
-#~ msgid "High Priority"
-#~ msgstr "High Priority"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Initialise Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Use Internal Timing"
-
-#~ msgid "Log directory"
-#~ msgstr "Log directory"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Maximum number of calls allowed"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Maximum load to stop accepting new calls"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Disable console colors"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Sound files Cache directory"
-
-#~ msgid "The Group to run as"
-#~ msgstr "The Group to run as"
-
-#~ msgid "The User to run as"
-#~ msgstr "The User to run as"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Voicemail Spool directory"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefix UniquID with system name"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Build transcode paths via SLINEAR, not directly"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmit SLINEAR silence while recording a channel"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Verbose Level"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Section dialplan"
-
-#~ msgid "include"
-#~ msgstr "include"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Dialplan Extension"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Dialplan General Options"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Allow transfer"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Clear global vars"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Dialplan Goto"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Dialplan Conference"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Dialplan Time"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Dialplan Voicemail"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Dial Zones for Dialplan"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Prefix to add matching dialplans"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Match International prefix"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Prefix (0) to add/remove to/from international numbers"
-
-#~ msgid "localzone"
-#~ msgstr "localzone"
-
-#~ msgid "Match plan"
-#~ msgstr "Match plan"
-
-#~ msgid "Connection to use"
-#~ msgstr "Connection to use"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Feature Key maps"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Attended transfer key"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "Blind transfer key"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Key to Disconnect call"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Key to Park call"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Parking Feature"
-
-#~ msgid "ADSI Park"
-#~ msgstr "ADSI Park"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Attended transfer timeout (sec)"
-
-#~ msgid "One touch record key"
-#~ msgstr "One touch record key"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Name of call context for parking"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Sound file to play to parked caller"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Max time (ms) between digits for feature activation"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Method to Find Parking slot"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Play courtesy tone to"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Enable Parking"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Extension to dial to park"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Parking time (secs)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Range of extensions for call parking"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Pickup extension"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Seconds to wait between digits when transferring"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "sound when attended transfer is complete"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "Sound when attended transfer fails"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Reload Hardware Config"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Reboot Method"
-
-#~ msgid "Parameter"
-#~ msgstr "Parameter"
-
-#~ msgid "Option type"
-#~ msgstr "Option type"
-
-#~ msgid "User name"
-#~ msgstr "User name"
-
-#~ msgid "IAX General Options"
-#~ msgstr "IAX General Options"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Allow Codecs"
-
-#~ msgid "Static"
-#~ msgstr "Static"
-
-#~ msgid "Write Protect"
-#~ msgstr "Write Protect"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Meetme Conference"
-
-#~ msgid "Admin PIN"
-#~ msgstr "Admin PIN"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "Meeting PIN"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Meetme Conference General Options"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Number of 20ms audio buffers to be used"
-
-#~ msgid "Modules"
-#~ msgstr "Modules"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Alarm Receiver Application"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Authentication Application"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Make sure asterisk doesn't save CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Check if channel is available"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Listen in on any channel"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Control Playback Application"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Cuts up variables"
-
-#~ msgid "Database access functions"
-#~ msgstr "Database access functions"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Dialing Application"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Virtual Dictation Machine Application"
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Directed Call Pickup Support"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Extension Directory"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "DISA (Direct Inward System Access) Application"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Dump channel variables Application"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Simple Echo Application"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "ENUM Lookup"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Reevaluates strings"
-
-#~ msgid "Executes applications"
-#~ msgstr "Executes applications"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "External IVR application interface"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Fork The CDR into 2 separate entities"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Get ADSI CPE ID"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Group Management Routines"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Encode and Stream via icecast and ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Image Transmission Application"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Look up Caller*ID name/number from black"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Look up CallerID Name from local database"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Extension Macros"
-
-#~ msgid "A simple math Application"
-#~ msgstr "A simple math Application"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "MD5 checksum Application"
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Digital Milliwatt (mu-law) Test Application"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Record a call and mix the audio during the recording"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Call Parking and Announce Application"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Trivial Playback Application"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Require phone number to be entered"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "True Call Queueing"
-
-#~ msgid "Random goto"
-#~ msgstr "Random goto"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Read Variable Application"
-
-#~ msgid "Read in a file"
-#~ msgstr "Read in a file"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Realtime Data Lookup/Rewrite"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Trivial Record Application"
-
-#~ msgid "Say time"
-#~ msgstr "Say time"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Send DTMF digits Application"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Send Text Applications"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Set CallerID Application"
-
-#~ msgid "CDR user field apps"
-#~ msgstr "CDR user field apps"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr "load =&gt; .so ; Set CallerID Name"
-
-#~ msgid "load => .so ; Set CallerID Number"
-#~ msgstr "load =&gt; .so ; Set CallerID Number"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Set RDNIS Number"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Set ISDN Transfer Capability"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "SMS/PSTN handler"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Hangs up the requested channel"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Stack Routines"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Generic System() application"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Playback with Talk Detection"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Interface Test Application"
-
-#~ msgid "Transfer"
-#~ msgstr "Transfer"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "TXTCIDName"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Send URL Applications"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Custom User Event Application"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Send verbose output"
-
-#~ msgid "Voicemail"
-#~ msgstr "Voicemail"
-
-#~ msgid "Waits until first ring after time"
-#~ msgstr "Waits until first ring after time"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Wait For Silence Application"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "While Loops and Conditional Execution"
-
-#~ msgid "Comma Separated Values CDR Backend"
-#~ msgstr "Comma Separated Values CDR Backend"
-
-#~ msgid "Customizable Comma Separated Values CDR Backend"
-#~ msgstr "Customizable Comma Separated Values CDR Backend"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Asterisk Call Manager CDR Backend"
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "MySQL CDR Backend"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "PostgreSQL CDR Backend"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "SQLite CDR Backend"
-
-#~ msgid "Agent Proxy Channel"
-#~ msgstr "Agent Proxy Channel"
-
-#~ msgid "Option chan_iax2"
-#~ msgstr "Option chan_iax2"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Local Proxy Channel"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Session Initiation Protocol (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Adaptive Differential PCM Coder/Decoder"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "A-law Coder/Decoder"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "A-law and Mulaw direct Coder/Decoder"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "ITU G.726-32kbps G726 Transcoder"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "GSM/PCM16 (signed linear) Codec Translation"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Speex/PCM16 (signed linear) Codec Translator"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Mu-law Coder/Decoder"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Sun Microsystems AU format (signed linear)"
-
-#~ msgid "G.723.1 Simple Timestamp File Format"
-#~ msgstr "G.723.1 Simple Timestamp File Format"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Raw G.726 (16/24/32/40kbps) data"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Raw G729 data"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Raw GSM data"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Raw h263 data"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "JPEG (Joint Picture Experts Group) Image"
-
-#~ msgid "Raw uLaw 8khz Audio support (PCM)"
-#~ msgstr "Raw uLaw 8khz Audio support (PCM)"
-
-#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
-#~ msgstr "load =&gt; .so ; Raw aLaw 8khz PCM Audio support"
-
-#~ msgid "Raw Signed Linear Audio support (SLN)"
-#~ msgstr "Raw Signed Linear Audio support (SLN)"
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Dialogic VOX (ADPCM) File Format"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Microsoft WAV format (8000hz Signed Line"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Microsoft WAV format (Proprietary GSM)"
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr "Caller ID related dialplan functions"
-
-#~ msgid "ENUM Functions"
-#~ msgstr "ENUM Functions"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "URI encoding / decoding functions"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Asterisk Extension Language Compiler"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Text Extension Configuration"
-
-#~ msgid "load => .so ; Builtin dialplan functions"
-#~ msgstr "load =&gt; .so ; Builtin dialplan functions"
-
-#~ msgid "Loopback Switch"
-#~ msgstr "Loopback Switch"
-
-#~ msgid "Realtime Switch"
-#~ msgstr "Realtime Switch"
-
-#~ msgid "Outgoing Spool Support"
-#~ msgstr "Outgoing Spool Support"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Wil Cal U (Auto Dialer)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "MySQL Config Resource"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "ODBC Config Resource"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "PGSQL Module"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Cryptographic Digital Signatures"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Call Parking Resource"
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Indications Configuration"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Call Monitoring Resource"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Music On Hold Resource"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "ODBC Resource"
-
-#~ msgid "SMDI Module"
-#~ msgstr "SMDI Module"
-
-#~ msgid "SNMP Module"
-#~ msgstr "SNMP Module"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Music On Hold"
-
-#~ msgid "Application"
-#~ msgstr "Application"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Directory of Music"
-
-#~ msgid "Option mode"
-#~ msgstr "Option mode"
-
-#~ msgid "Random Play"
-#~ msgstr "Random Play"
-
-#~ msgid "DTMF mode"
-#~ msgstr "DTMF mode"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Primary domain identity for From: headers"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "From user (required by many SIP providers)"
-
-#~ msgid "Ring on incoming dialplan contexts"
-#~ msgstr "Ring on incoming dialplan contexts"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Allow Insecure for"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Mailbox for MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT between phone and Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Check tags in headers"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Reply Timeout (ms) for down connection"
-
-#~ msgid "Register connection"
-#~ msgstr "Register connection"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "Dial own extension for mailbox"
-
-#~ msgid "Client Type"
-#~ msgstr "Client Type"
-
-#~ msgid "Username"
-#~ msgstr "Username"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Section sipgeneral"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Allow codecs"
-
-#~ msgid "SIP realm"
-#~ msgstr "SIP realm"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Voicemail general options"
-
-#~ msgid "From Email address of server"
-#~ msgstr "From Email address of server"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Voice Mail boxes"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "Email contains attachment"
-
-#~ msgid "Email"
-#~ msgstr "Email"
-
-#~ msgid "Display Name"
-#~ msgstr "Display Name"
-
-#~ msgid "Password"
-#~ msgstr "Password"
-
-#~ msgid "zone"
-#~ msgstr "zone"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Voice Zone settings"
-
-#~ msgid "Message Format"
-#~ msgstr "Message Format"
diff --git a/applications/luci-app-asterisk/po/es/asterisk.po b/applications/luci-app-asterisk/po/es/asterisk.po
deleted file mode 100644
index 2b2b8d2a69..0000000000
--- a/applications/luci-app-asterisk/po/es/asterisk.po
+++ /dev/null
@@ -1,355 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2012-04-16 00:52+0200\n"
-"Last-Translator: Jose <jarre2_es_jose@hotmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Opciones Generales de Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Directorio AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Almacena los ficheros de sonido mientras se graba"
-
-#~ msgid "Debug Level"
-#~ msgstr "Nivel de Depuración"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Desactivar algunos avisos"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Volcar núcleo en caso de fallo"
-
-#~ msgid "High Priority"
-#~ msgstr "Prioridad Alta"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Inicializar Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Usar temporización interna"
-
-#~ msgid "Log directory"
-#~ msgstr "Directorio de registro"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Número máximo de llamadas permitidas"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Carga máxima para dejar de admitir nuevas llamadas"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Desactivar colores en la consola"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Directorio de caché de archivos de sonido"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Grupo en el que ejecutarse"
-
-#~ msgid "The User to run as"
-#~ msgstr "Usuario como el que se ejecutará"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Directorio de la cola de mensajes de voz"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefijo UniquID con el nombre del sistema"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr ""
-#~ "Construir las rutas de transcodificación usando SLINEAR, no directamente"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmitir silencio SLINEAR mientras graba un canal"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Nivel de detalle"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Sección Dialplan"
-
-#~ msgid "include"
-#~ msgstr "incluir"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Extensión Dialplan"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Opciones generales de Dialplan"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permitir transferencia"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Limpiar las variables globales"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Dialplan Goto"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Conferencia Dialplan"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Dialplan Time"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Buzón de voz de Dialplan"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Zonas de marcado para Dialplan"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Prefijo para añadir coincidencias de plan de marcado"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Coincidir con el prefijo internacional"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Prefijo (0) para añadir/eliminar a/de números internacionales"
-
-#~ msgid "localzone"
-#~ msgstr "zona local"
-
-#~ msgid "Match plan"
-#~ msgstr "Coincidir con el plan"
-
-#~ msgid "Connection to use"
-#~ msgstr "Conexión que se utilizará"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Mapa de Funciones Clave"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Tecla de transferencia asistida"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "Tecla de transferencia ciega"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Tecla para desconectar la llamada"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Tecla para retener la llamada"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Función de llamada en espera"
-
-#~ msgid "ADSI Park"
-#~ msgstr "Llamada en espera ADSI"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Tiempo de espera de transferencia asistida (seg)"
-
-#~ msgid "One touch record key"
-#~ msgstr "Tecla de grabacion con una sola tecla"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Nombre del contexto de la llamada en espera"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Archivo de sonido para reproducir en la llamada en espera"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Tiempo máximo (en ms) entre digitos para la activación de funciones"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Método para encontrar una ranura de llamada en espera"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Reproducir tono de cortesía en"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Activar llamadas en espera"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Extensión a marcar para dejar en espera una llamada"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Tiempo de llamada en espera (segs)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Rango de extensiones para llamadas en espera"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Extensión de Pickup"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Segundos de espera entre digitos mientras se transfiere"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "sonido cuando se completa la transferencia asistida"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "sonido para cuando falla la transferencia asistida"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Recargar la configuración del Hardware"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Método de reinicio"
-
-#~ msgid "Parameter"
-#~ msgstr "Parámetro"
-
-#~ msgid "Option type"
-#~ msgstr "Tipo de opción"
-
-#~ msgid "User name"
-#~ msgstr "Nombre de Usuario"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Opciones Generales de IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Permitir Codecs"
-
-#~ msgid "Static"
-#~ msgstr "Estático"
-
-#~ msgid "Write Protect"
-#~ msgstr "Protección contra escritura"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Conferencia Meetme (entre dos)"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN de Administrador"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN de Reunión (Meeting)"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Opciones generales de conferencia Meetme (entre dos)"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Número de memorias intermedias de audio de 20 ms a utilizar"
-
-#~ msgid "Modules"
-#~ msgstr "Módulos"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Aplicación de Recepción de Alarma"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Aplicación de autenticación"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Asegúrate que asterisk no graba CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Comprueba que el canal esté disponible"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Escuchar en cualquier canal"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Aplicación para el control de reproducción"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Variables de corte"
-
-#~ msgid "Database access functions"
-#~ msgstr "Funciones de acceso a la Base de Datos"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Aplicación de marcado telefónico"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Aplicación de máquina de Dictado Virtual"
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Apoyo a la captura de llamadas dirigidas"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Directorio de Extensiones"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "Aplicación DISA (Acceso directo entrante al sistema)"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Aplicación de Eco Simple"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "Consulta ENUM"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Reevaluar secuencia de caracteres"
-
-#~ msgid "Executes applications"
-#~ msgstr "Ejecuta aplicaciones"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Interfaz de aplicación IVR externa"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Bifurcar el CDR en 2 entidades separadas"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Obtener el ADSI CPE ID"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Rutinas de Administración de grupo"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Codifica y emite a través de icecast e ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Aplicación de transmisión de imagen"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Buscar la identidad del llamante nombre/número en la lista negra"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr ""
-#~ "Buscar el nombre de identidad del llamante en las bases de datos locales"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Macros de Extensión"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Una simple aplicación matemática"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Aplicación de suma de verificación MD5"
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Aplicación de testeo de Milivatios Digitales (mu-law)"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Grabar una llamada y mezclar el sonido durante la grabación"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Aplicación de Anuncio y Llamada en Espera"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Aplicación de reproducción trivial"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Requiere que se introduzca un número de teléfono"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Lista de espera real de llamadas"
-
-#~ msgid "Random goto"
-#~ msgstr "Goto (ir a) Aleatorio"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Aplicación de lectura de variables"
-
-#~ msgid "Read in a file"
-#~ msgstr "Leer en un archivo"
diff --git a/applications/luci-app-asterisk/po/fr/asterisk.po b/applications/luci-app-asterisk/po/fr/asterisk.po
deleted file mode 100644
index 275253cd10..0000000000
--- a/applications/luci-app-asterisk/po/fr/asterisk.po
+++ /dev/null
@@ -1,569 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2011-11-23 22:34+0200\n"
-"Last-Translator: fredb <fblistes+luci@free.fr>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Paramètres généraux d'Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Répertoire AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Mes les sons enregistrés en cache pendant l'enregistrement"
-
-#~ msgid "Debug Level"
-#~ msgstr "Niveau de déboguage"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Désactiver certaines alertes"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Créer une image-core en cas de crash"
-
-#~ msgid "High Priority"
-#~ msgstr "Priorité haute"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Initialise le chiffrage"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Utiliser un délai interne"
-
-#~ msgid "Log directory"
-#~ msgstr "Répertoire des journaux"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Nombre maximum d'appels autorisés"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Charge maximum jusqu'à laquelle on accepte de nouveaux appels"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Désactiver les couleurs de la console"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Répertoire de cache des ficihers-sons"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Exécuté avec ce groupe"
-
-#~ msgid "The User to run as"
-#~ msgstr "Exécuté avec cet utilisateur"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Répertoire de stockage du répondeur"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Préfixer le « UniquID » avec le nom du système"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Construire des chemins de traduction via SLINEAR, pas directement"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmettre le silence SLINEAR lors de l'enregistrement d'un canal"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Niveau de verbosité"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Section du plan de numérotation"
-
-#~ msgid "include"
-#~ msgstr "Inclure"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Extension du plan de numérotation"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Paramètres généraux du plan de numérotation"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permettre le transfert"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Effacer les variables globales"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Règles d'aiguillage pour la conférence"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Règles d'aiguillage liées au temps"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Règles d'aiguillage de la messagerie vocale"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Préfixe correspondant à l'international"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Préfixe (0) à ajouter à/retirer d'un numéro international"
-
-#~ msgid "localzone"
-#~ msgstr "zone locale"
-
-#~ msgid "Match plan"
-#~ msgstr "Règle de correspondance"
-
-#~ msgid "Connection to use"
-#~ msgstr "Connexion à utiliser"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "Touche de transfert en aveugle"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Touche pour déconnecter un appel"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Touche pour parquer un appel"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Capacité de mise en parking"
-
-#~ msgid "ADSI Park"
-#~ msgstr "Parking ADSI"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Délai max d'un transfert programmé (secondes)"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Nom du contexte d'appel pour une mise en parking"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Fichier-son à jouer aux appelants mis en parking"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr ""
-#~ "Durée max (en ms) entre les chiffres pour l'activation d'une commande"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Méthode pour trouver une place de parking"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Jouer une tonalité de courtoisie à"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Activer la mise en parking"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Durée de mise en parking (secondes)"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Attente en secondes entre les chiffres Lors d'un transfert"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "Son joué quand un transfert programmé est effectué"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "Son joué quand nu transfert programmé rate"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Relit la configuration matérielle"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Méthode de redémarrage"
-
-#~ msgid "Parameter"
-#~ msgstr "Paramètre"
-
-#~ msgid "Option type"
-#~ msgstr "Type d'option"
-
-#~ msgid "User name"
-#~ msgstr "Nom d'utilisateur"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Paramètres généraux du protocole IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Codecs autorisés"
-
-#~ msgid "Static"
-#~ msgstr "Statique"
-
-#~ msgid "Write Protect"
-#~ msgstr "Protection contre l'écriture"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Conférence « Meetme »"
-
-#~ msgid "Admin PIN"
-#~ msgstr "ID d'administrateur"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "Code de conférence"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Options générales de conférence « Meetme »"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Nombre de buffers audio de 20 ms à utiliser"
-
-#~ msgid "Modules"
-#~ msgstr "Modules"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Application de réception d'alarme"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Application d'authentification"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "S'assure qu'Asterisk ne sauve pas le CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Vérifie que le canal est libre"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Écoute sur n'importe quel canal"
-
-#~ msgid "Database access functions"
-#~ msgstr "Fonctions d'accès aux bases de données"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Application de numérotation"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Application de dictaphone virtuel"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Application de copie des variables d'un canal"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Application de simple écho"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "Résolution d'un ENUM"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Ré-évaluer les chaînes"
-
-#~ msgid "Executes applications"
-#~ msgstr "Lance les applications"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Interface d'application SVI externe"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Dupliquer le CDR en deux entités séparées"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Obtenir le « ADSI CPE ID »"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Fonctions de gestion des groupes"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Coder et diffuser via icecast et ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Application d'envoi d'image"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Rechercher le nom de l'appelant dans la base locale"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Macros d'extension"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Une simple application mathématique"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Application de signature MD5"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Enregistre un appelle et mixe le son pendant l'enregistrement"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Application de mise en parking d'appel et annonce"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Application de simple écoute"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Nécessite d'entrer un numéro de téléphone"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Véritable sérialisation des appels"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Application de lecture d'une variable"
-
-#~ msgid "Read in a file"
-#~ msgstr "Lire dans un fichier"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Recherche/ré-écriture de données en temps-réel"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Application de simple enregistrement"
-
-#~ msgid "Say time"
-#~ msgstr "Dis l'heure"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Application d'envoi de chiffres en DTMF"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Applications d'envoi de texte"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Application de positionnement de l'identifiant de l'appelant"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr ""
-#~ "charger => .so ; Positionner le nom dans l'identifiant de l'appelant"
-
-#~ msgid "load => .so ; Set CallerID Number"
-#~ msgstr ""
-#~ "charger => .so ; Positionner le numéro dans l'identifiant de l'appelant"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Positionner le numéro RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Activer la possibilité de transfert RNIS"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "Gestionnaire SMS/RTC"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Raccroche le canal demandé"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Empile les routines"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Application générique System()"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Jouer un son avec la détection de parole"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Application de test d'interface"
-
-#~ msgid "Transfer"
-#~ msgstr "Transfert"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Applications d'envois d'URL"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Envoyer une sortie détaillée"
-
-#~ msgid "Voicemail"
-#~ msgstr "Répondeur"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Application d'attente de silence"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Session Initiation Protocol (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Codec PCM différentiel adaptatif (ADPCM)"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "Codec loi-A"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "Codec loi-A et loi-Mu directs"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "Transcodeur G726 (ITU G.726 32 kbit/s)"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "Codec de traduction GSM/PCM16 (linéaire signé)"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Codec de traduction Speex/PCM16 (linéaire signé)"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Codec loi-Mu"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Format Sun Microsystems AU (linéaire signé)"
-
-#~ msgid "G.723.1 Simple Timestamp File Format"
-#~ msgstr "Format de fichier G.723.1 à horodatage simple"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Données brutes G.726 (16/24/32/40 kbit/s)"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Données brutes G729"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Données brutes GSM"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Données brutes h263"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "Image JPEG (Joint Picture Experts Group)"
-
-#~ msgid "Raw uLaw 8khz Audio support (PCM)"
-#~ msgstr "Gestion de l'audio en loi-µ 8 kHz brute (PCM)"
-
-#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
-#~ msgstr "Charger => .so ; Gestion de l'audio en loi-A brute PCM 8 kHz"
-
-#~ msgid "Raw Signed Linear Audio support (SLN)"
-#~ msgstr "Gestion de l'audio en linéaire signé brut (SLN)"
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Format de fichier Dialogic VOX (ADPCM)"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Format Microsoft WAV (8 kHz linéaire signé)"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Format Microsoft WAV (GSM propriétaire)"
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr "Fonctions d'aiguillage des appels liées à l'identifiant d'appel"
-
-#~ msgid "ENUM Functions"
-#~ msgstr "Fonctions ENUM"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "Fonctions de codage/décodage des URI"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Compilateur du langage d'extension d'Asterisk"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Configuration de l'extension Texte"
-
-#~ msgid "load => .so ; Builtin dialplan functions"
-#~ msgstr "charger => .so ; fonctions natives d'aiguillages des appels"
-
-#~ msgid "Outgoing Spool Support"
-#~ msgstr "Gestion d'un spool sortant"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Wil Cal U (composeur automatique)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "Ressource de configuration de MySQL"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "Ressource de configuration d'ODBC"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "Module PGSQL"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Signatures de chiffrage numérique"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Ressource de mise en parking des appels"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Ressource de supervision des appels"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Ressource de mise en attente musicale"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "Ressource ODBC"
-
-#~ msgid "SMDI Module"
-#~ msgstr "Module SMDI"
-
-#~ msgid "SNMP Module"
-#~ msgstr "Module SNMP"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Mise en attente musicale"
-
-#~ msgid "Application"
-#~ msgstr "Application"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Répertoire sonore"
-
-#~ msgid "Random Play"
-#~ msgstr "morceau choisi aléatoirement"
-
-#~ msgid "DTMF mode"
-#~ msgstr "Mode DTMF"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Identité du domaine primaire pour les entêtes « From: »"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "Utilisateur « From » (requis par de nombreux fournisseurs SIP)"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Autoriser le mode non sécurisé pour"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Boîte aux lettres pour MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT entre le téléphone et Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Vérifier les « tags » dans les entêtes"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Délai de réponse (en ms) indiquant une connexion tombée"
-
-#~ msgid "Register connection"
-#~ msgstr "Connexion au registre"
-
-#~ msgid "Client Type"
-#~ msgstr "Type de client"
-
-#~ msgid "Username"
-#~ msgstr "Nom d'utilisateur"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Section générale SIP"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Codecs autorisés"
-
-#~ msgid "SIP realm"
-#~ msgstr "Domaine SIP"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Options générales de la messagerie vocale"
-
-#~ msgid "From Email address of server"
-#~ msgstr "Adresse de courrier électronique source du serveur"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Boîtes de messagerie vocale"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "Courriel contenant une pièce-jointe"
-
-#~ msgid "Email"
-#~ msgstr "Courriel"
-
-#~ msgid "Display Name"
-#~ msgstr "Nom affiché"
-
-#~ msgid "Password"
-#~ msgstr "Mot de passe"
-
-#~ msgid "zone"
-#~ msgstr "zone"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Paramètres de la zone Voix"
-
-#~ msgid "Message Format"
-#~ msgstr "Format de message"
diff --git a/applications/luci-app-asterisk/po/he/asterisk.po b/applications/luci-app-asterisk/po/he/asterisk.po
deleted file mode 100644
index 25ed5bb142..0000000000
--- a/applications/luci-app-asterisk/po/he/asterisk.po
+++ /dev/null
@@ -1,194 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2011-07-14 12:48+0200\n"
-"Last-Translator: zstorch <zstorch@gmail.com>\n"
-"Language-Team: none\n"
-"Language: he\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "הגדרות כלליות של Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "תיקית AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "שמור את קבצי הקול במהלך ההקלטה"
-
-#~ msgid "Debug Level"
-#~ msgstr "רמת מצב ניפוי שגיאות"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "בטל חלק מהאזהרות"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "תעד את מצב הליבה בעת נפילת המערכת"
-
-#~ msgid "High Priority"
-#~ msgstr "עדיפות גבוהה"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "מפעיל את Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "השתמש בשעון הפנימי"
-
-#~ msgid "Log directory"
-#~ msgstr "תיקית התיעוד"
-
-# צריך לבדוק אם מדובר על שיחות "בו זמנית" אם כן חשוב לציין אם לא הנל טעות חמורה
-#, fuzzy
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "מקסימום שיחות בו זמנית"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "מקסימות שיחות שבו המערכת תדחה שיחות נוספות"
-
-#~ msgid "Disable console colors"
-#~ msgstr "בטל צבעים במסוף"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "תיקית קבצי הקול"
-
-#~ msgid "The Group to run as"
-#~ msgstr "הפעל עם הרשאות קבוצת"
-
-#~ msgid "The User to run as"
-#~ msgstr "הפעל עם הרשאות משתמש"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "תיקית התא קולי"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "הוסף לUniquID את שם המערכת"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "המר תבניות קול ישירות עם SLINEAR"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "שדר שקט של SLINEAR במהלך הקלטה"
-
-#~ msgid "Verbose Level"
-#~ msgstr "רמת דו\"ח המערכת"
-
-#~ msgid "Time Zone"
-#~ msgstr "אזור זמן"
-
-#~ msgid "Section dialplan"
-#~ msgstr "מחלקה בתוכנית השיחות"
-
-#~ msgid "include"
-#~ msgstr "כולל"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "שלוחה בתוכנית השיחות"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "הגדרות כללית של תוכנית השיחות"
-
-#~ msgid "Allow transfer"
-#~ msgstr "אפשר העברה"
-
-#~ msgid "Clear global vars"
-#~ msgstr "נקה משתנים כללים"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "\"לך אל\" בתוכנית השיחות"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "שיחת ועידה בתוכנית השיחות"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "זמן בתוכנית השיחות"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "תא קולי בתוכנית השיחות"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "אזורי חיוג עבור תוכנית השיחות"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "קידומת להוספה עבור תוכניות שיחה דומות"
-
-#~ msgid "Match International prefix"
-#~ msgstr "השווה קידומת בין לאומית"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "קידומת (0) להוספה או הסרה במספר בין לאומי"
-
-#~ msgid "localzone"
-#~ msgstr "מיקום"
-
-#~ msgid "Match plan"
-#~ msgstr "תוכנית מתאימה"
-
-#~ msgid "Connection to use"
-#~ msgstr "השתמש בחיבור מסוג"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "מיפוי מקשים יעודיים"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "נתב (NAT) בין מכשיר הטלפון לAsterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "בדוק את התגיות בהקדמה"
-
-#, fuzzy
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "החזר את פרק זמן (timeout) במילישניות עבור חבורים סגורים"
-
-#~ msgid "Register connection"
-#~ msgstr "חיבור רשום (מנוי)"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "חיוג סיפרה בודדת עבור תא דואר"
-
-#~ msgid "Client Type"
-#~ msgstr "סוג הלקוח"
-
-#~ msgid "Username"
-#~ msgstr "שם משתמש"
-
-#~ msgid "Allow codecs"
-#~ msgstr "מקודדים מאושרים"
-
-#~ msgid "SIP realm"
-#~ msgstr "מתחם SIP"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "הגדרות כלליות עבור התא קולי"
-
-#~ msgid "From Email address of server"
-#~ msgstr "שדה דואר אלקטרוני מאת (של השרת)"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "תאים קוליים"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "מצורף תוכן ההודעה"
-
-#~ msgid "Email"
-#~ msgstr "דואר אלקטרוני"
-
-#~ msgid "Display Name"
-#~ msgstr "שם תצוגה"
-
-#~ msgid "Password"
-#~ msgstr "סיסמה"
-
-#~ msgid "zone"
-#~ msgstr "אזור"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "הגדרות אזוריות עבור הקול"
-
-#~ msgid "Message Format"
-#~ msgstr "תבנית ההודעה"
diff --git a/applications/luci-app-asterisk/po/hu/asterisk.po b/applications/luci-app-asterisk/po/hu/asterisk.po
deleted file mode 100644
index c6a5d81b3e..0000000000
--- a/applications/luci-app-asterisk/po/hu/asterisk.po
+++ /dev/null
@@ -1,134 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-04-18 23:18+0200\n"
-"Last-Translator: Anonymous Pootle User\n"
-"Language-Team: none\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Általános Asterisk beállítások"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI könyvtár"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "A felvett hang fájlok gyorsítótárazása a felvétel alatt"
-
-#~ msgid "Debug Level"
-#~ msgstr "Nyomkövetési szint"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Néhány figyelmeztetés letilása"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Memóriatartalom kiírása összeomláskor"
-
-#~ msgid "High Priority"
-#~ msgstr "Magas prioritás"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Titkosítás inicializálása"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Belső időzítés használata"
-
-#~ msgid "Log directory"
-#~ msgstr "Napló könyvtár"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "A hivások megengedett maximális száma"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "A CPU maximális terhelése új hívások fogadásához"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Konzol színek letiltása"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "A gyorsítótárazott hang fájlok könyvtára"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Csoport futtatása mint"
-
-#~ msgid "The User to run as"
-#~ msgstr "Felhasználó futtatása mint"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Hangposta puffer könyvtár"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Rendszer név használata UniquID előtagként"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Részletes szint"
-
-#~ msgid "Time Zone"
-#~ msgstr "Időzóna"
-
-#~ msgid "include"
-#~ msgstr "tartalmaz"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Átvitel engedélyezése"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Globális változók törlése"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Várakoztatás engedélyezése"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Várakoztatási idő (másodperc)"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Újraindítás módja"
-
-#~ msgid "Parameter"
-#~ msgstr "Paraméter"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Általános IAX beállítások"
-
-#~ msgid "Static"
-#~ msgstr "Statikus"
-
-#~ msgid "Write Protect"
-#~ msgstr "Írásvédelem"
-
-#~ msgid "Modules"
-#~ msgstr "Modulok"
-
-#~ msgid "DTMF mode"
-#~ msgstr "DTMF mód"
-
-#~ msgid "Client Type"
-#~ msgstr "Ügyfél típusa"
-
-#~ msgid "Username"
-#~ msgstr "Felhasználónév"
-
-#~ msgid "Email"
-#~ msgstr "E-mail"
-
-#~ msgid "Display Name"
-#~ msgstr "Megjelenítendő név"
-
-#~ msgid "Password"
-#~ msgstr "Jelszó"
-
-#~ msgid "zone"
-#~ msgstr "zóna"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Hang zóna beállítások"
-
-#~ msgid "Message Format"
-#~ msgstr "Üzenet formátuma"
diff --git a/applications/luci-app-asterisk/po/it/asterisk.po b/applications/luci-app-asterisk/po/it/asterisk.po
deleted file mode 100644
index f2aa51e96f..0000000000
--- a/applications/luci-app-asterisk/po/it/asterisk.po
+++ /dev/null
@@ -1,162 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2012-04-19 23:40+0200\n"
-"Last-Translator: claudyus <claudyus84@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk Opzioni Generali"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI directory"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Cache dei file audio registrati durante la registrazione"
-
-#~ msgid "Debug Level"
-#~ msgstr "Livello di debug"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Disattivare alcuni avvis"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Effettua il core dump al crash"
-
-#~ msgid "High Priority"
-#~ msgstr "Alta Priorità"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Usa temporizzazione interna"
-
-#~ msgid "Log directory"
-#~ msgstr "Accedi alla directory"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Numero massimo di chiamate consentite"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Smettere di accettare carico massimo di nuove chiamate"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Disabilitare la console dei colori"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Cache directori files suoni"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefisso UniquID con il nome di sistema"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Costruire percorsi di transcodifica via SLINEAR, non direttamente"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Livello verbose"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Sezione dialplan"
-
-#~ msgid "include"
-#~ msgstr "include"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Estensione Dialplan"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Opzioni generali Dialplan"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permettere il trasferimento"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Cancella le variabili globali"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Conferenza Dialplan"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Aggiungere il prefisso corrispondente per Dialplans"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr ""
-#~ "Prefisso (0) per aggiungere / rimuovere a / da numeri internazionali"
-
-#~ msgid "localzone"
-#~ msgstr "localzone"
-
-#~ msgid "Connection to use"
-#~ msgstr "Connessione da utilizzare"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Caratteristica chiave delle mappe"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Chiave per disconnettere una chiamata"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Chiave di riserva per chiamata"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Riserva futura"
-
-#~ msgid "ADSI Park"
-#~ msgstr "Riserva ADSI"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Ascolta il tono di cortesia per"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Abilita la sosta"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Ora di sosta (in secondi)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Gamma di estensioni per la sosta di chiamata"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Estensione Pickup"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Secondi di attesa tra le cifre per il trasferimento"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "Suono quando il trasferimento non ha partecipato"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Ricarica Hardware Config"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Metodo per riavviare"
-
-#~ msgid "Parameter"
-#~ msgstr "Parametro"
-
-#~ msgid "Option type"
-#~ msgstr "Tipo di opzione"
-
-#~ msgid "User name"
-#~ msgstr "Usare il nome"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Opzione generale per IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Lasciare il codec"
-
-#~ msgid "Static"
-#~ msgstr "Statico"
-
-#~ msgid "Write Protect"
-#~ msgstr "Protezione da scrittura"
-
-#~ msgid "Message Format"
-#~ msgstr "Formato messaggio"
diff --git a/applications/luci-app-asterisk/po/ja/asterisk.po b/applications/luci-app-asterisk/po/ja/asterisk.po
deleted file mode 100644
index 98bd10b4a3..0000000000
--- a/applications/luci-app-asterisk/po/ja/asterisk.po
+++ /dev/null
@@ -1,44 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-01-08 13:20+0200\n"
-"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk の全般オプション"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI ディレクトリ"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "録音されたサウンドを録音中にキャッシュ"
-
-#~ msgid "Debug Level"
-#~ msgstr "デバッグレベル"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "いくつかの警告を無効にする"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "クラッシュ時にコアダンプを出力する"
-
-#~ msgid "High Priority"
-#~ msgstr "高優先度"
-
-#~ msgid "Log directory"
-#~ msgstr "ログ ディレクトリ"
-
-#~ msgid "Allow transfer"
-#~ msgstr "転送を許可"
-
-#~ msgid "Clear global vars"
-#~ msgstr "グローバル変数を消去"
diff --git a/applications/luci-app-asterisk/po/ms/asterisk.po b/applications/luci-app-asterisk/po/ms/asterisk.po
deleted file mode 100644
index 86639026fe..0000000000
--- a/applications/luci-app-asterisk/po/ms/asterisk.po
+++ /dev/null
@@ -1,611 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-03 12:40+1000\n"
-"PO-Revision-Date: 2010-05-05 23:32+1000\n"
-"Last-Translator: Wai Chet Teow <waichet@hotmail.com>\n"
-"Language-Team: LANGUAGE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Pootle 1.1.0\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Pilihan Umum Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI Direktori"
-
-#, fuzzy
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Cache dicatat semasa rakaman fail bunyi"
-
-#, fuzzy
-#~ msgid "Debug Level"
-#~ msgstr "Tingkatan debug"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Mematikan beberapa amaran"
-
-#, fuzzy
-#~ msgid "Dump core on crash"
-#~ msgstr "Dump teras dalam kemalangan"
-
-#~ msgid "High Priority"
-#~ msgstr "Keutamaan Tinggi"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Menginisialisasinya Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Gunakan Intern pemilihan waktu"
-
-#, fuzzy
-#~ msgid "Log directory"
-#~ msgstr "Direktori log"
-
-#, fuzzy
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Jumlah maksimum panggilan dibenarkan"
-
-#, fuzzy
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "beban maksimum untuk berhenti menerima panggilan baru"
-
-#, fuzzy
-#~ msgid "Disable console colors"
-#~ msgstr "Matikan warna konsol"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Sound fail Direktori Cache"
-
-#, fuzzy
-#~ msgid "The Group to run as"
-#~ msgstr "Kumpulan untuk menjalankan sebagai"
-
-#, fuzzy
-#~ msgid "The User to run as"
-#~ msgstr "Pengguna untuk menjalankan sebagai"
-
-#, fuzzy
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Surat suara spool Direktori"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Awalan UniquID dengan nama sistem"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Membangun transcode jalan melalui SLINEAR, tidak secara langsung"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmit SLINEAR keheningan ketika sedang merakam saluran"
-
-#, fuzzy
-#~ msgid "Verbose Level"
-#~ msgstr "Tingkat verbose"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Bahagian dial rencana"
-
-#~ msgid "include"
-#~ msgstr "memasukkan"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Ekstensi dial rencana"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Pilihan Umum Dialplan"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Membolehkan pemindahan"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Hapus variable global"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Buka dial rencana"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Persidangan dial rencana"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Masa dial rencana"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Surat suara dial rencana"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Dial Zon untuk dial rencana"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Prefix untuk menambah pencocokan dial rencana"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Awalan Antarabangsa Match"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Awalan (0) untuk menambah / memadam ke / dari nombor antarabangsa"
-
-#~ msgid "localzone"
-#~ msgstr "zon tempatan"
-
-#~ msgid "Match plan"
-#~ msgstr "Rencana sesuai"
-
-#~ msgid "Connection to use"
-#~ msgstr "Sambungan yang digunakan"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Ciri-ciri kunci peta"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Mengikuti memindahkan kunci"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "kunci pemindahkan buta"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Kunci untuk Putus panggilan"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Kunci untuk Park panggilan"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Parkir Ciri-ciri"
-
-#~ msgid "ADSI Park"
-#~ msgstr "ADSI Park"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Mengikuti pemindahan timeout (saat)"
-
-#~ msgid "One touch record key"
-#~ msgstr "Satu nota sentuh butang"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Nama konteks panggilan untuk parkir"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Fail bunyi untuk memainkan ke pemanggil parkir"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Maksimum masa (milidetik) antara nombor untuk pengaktifan ciri"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Kaedah untuk Menemukan slot Parkir"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkir muzik kelas"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Nada kebaikan yang dimainkan untuk"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Aktifkan Parkir"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Extension untuk dial ke taman"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Parkir waktu (saat)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Rentang sambungan untuk parkir panggilan"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Angkat sambungan"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Detik untuk menunggu antara nombor ketika memindahkan"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "suara saat menghadiri pemindahan selesai"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "Suara saat menghadiri gagal transfer"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Beban kembali menatarajah peranti keras"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Kaedah Reboot"
-
-#~ msgid "Parameter"
-#~ msgstr "Parameter"
-
-#~ msgid "Option type"
-#~ msgstr "Pilihan jenis"
-
-#~ msgid "User name"
-#~ msgstr "Nama pemakai"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Pilihan Umum IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Izinkan Codec"
-
-#~ msgid "Static"
-#~ msgstr "Statik"
-
-#~ msgid "Write Protect"
-#~ msgstr "Dilindungi Menulis"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Persidangan Meetme"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN Admin"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN Pertemuan"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Pilihan Umum Persidangan Meetme"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Jumlah buffer audio yang akan digunakan dalam 20 mili detik"
-
-#~ msgid "Modules"
-#~ msgstr "Modul"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Penggera Aplikasi Penerima"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Pengesahan Aplikasi"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Membuat asterisk yakin tidak menyimpan CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Periksa sama ada saluran sedia"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Mendengar pada setiap saluran"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Kawalan Main Aplikasi"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Memotong pembolehubah"
-
-#~ msgid "Database access functions"
-#~ msgstr "fungsi untuk mengakses dasar data"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Aplikasi Panggilan"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Aplikasi Dikte Virtual Machine"
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Sokongan Pengarah Angkatan Pangillan"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Extension Direktori"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "Aplikasi DISA (Direct Inward System Access)"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Aplikasi membuang variable saluran"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Echo Aplikasi Mudah"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "Pencarian ENUM"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Menilai semula string"
-
-#~ msgid "Executes applications"
-#~ msgstr "Menjalankan aplikasi"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "IVR aplikasi antara muka luaran"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "CDR garpu menjadi 2 entiti yang berasingan"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Dapatkan ADSI CPE ID"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Pengurusan Kumpulan Rutinitas"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Menyandi dan Stream melalui icecast dan es"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Aplikasi Transmisi Gambar"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Mencari nama / nombor Pemangil dari hitam"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Mencari Nama Pemangil dari database tempatan"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Makro Extension"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Sebuah Aplikasi matematik senang"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Aplikasi MD5 checksum"
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Milliwatt digital (mu-law) Aplikasi Uji"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Merakam panggilan dan campuran audio semasa rakaman"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Panggilan Parkir dan Aplikasi Pengumuman"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Aplikasi Pemain Trivial"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Nombor telefon diperlukan untuk dimasuk"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Panggilan antrian benar"
-
-#~ msgid "Random goto"
-#~ msgstr "Pergi ke random"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Aplikasi Baca Variabel"
-
-#~ msgid "Read in a file"
-#~ msgstr "Baca dalam fail"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Masa benar mencari / menulis kembali data "
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Aplikasi Trivial Rakam"
-
-#~ msgid "Say time"
-#~ msgstr "Katakan masa"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Aplikasi Hantar DTMF angka"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Aplikasi Kirim Mesej"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Aplikasi menetapkan CallerID"
-
-#~ msgid "CDR user field apps"
-#~ msgstr "Aplikasi CDR bidang pengguna"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr "beban => .so ; Menetapkan Nama CallerID"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Menetapkan Nombor RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Menetapkan Kemampuan Transfer ISDN"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "Penangan SMS/PSTN"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Menutup saluran yang diminta"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Rutinitas Stack"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Aplikasi Generic Sistem()"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Putar dengan Pengesanan Bicara"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Aplikasi Antarmuka Test"
-
-#~ msgid "Transfer"
-#~ msgstr "Transfer"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "Nama TXTCID"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Aplikasi Kirim URL"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Aplikasi Acara Pengguna Tersuai"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Kirim keluaran verbose"
-
-#~ msgid "Voicemail"
-#~ msgstr "Voicemail"
-
-#~ msgid "Waits until first ring after time"
-#~ msgstr "Menunggu waktu sampai setelah deringan pertama"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Aplikasi Tunggu Untuk Tenang"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "Sementara Loops dan Pelaksanaan bersyarat"
-
-#~ msgid "Comma Separated Values CDR Backend"
-#~ msgstr "Hujung belakang nilai-nilai dipisahkan koma CDR"
-
-#~ msgid "Customizable Comma Separated Values CDR Backend"
-#~ msgstr "Nilai-nilai dipisahkan koma CDR hujung belakang yang disesuaikan"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Hujung belakang asterisk panggilan pengurus CDR "
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "Hujung belakang MySQL CDR"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "Hujung belakang PostgreSQL CDR"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "Hujung belakang SQLite CDR"
-
-#~ msgid "Agent Proxy Channel"
-#~ msgstr "Agen Proksi Saluran"
-
-#~ msgid "Option chan_iax2"
-#~ msgstr "Pilihan chan_iax2"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Saluran Proksi Tempatan"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Session Initiation Protocol (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Adaptif Pengkamiran PCM Coder/Decoder"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "GSM/PCM16 (ditandatangani linier) Codec Terjemahan"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Speex/PCM16 (ditandatangani linier) Codec Terjemahan"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Sun Microsystems AU format (ditandatangani linier)"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Asterisk Sambungan Bahasa Compiler"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Teks Sambungan Tatarajah"
-
-#~ msgid "Loopback Switch"
-#~ msgstr "Loop Beralih Kembali"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "MySQL menatarajah sumber daya"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "ODBC tatarajah sumber daya"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "Modul PGSQL"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "tanda tangan digital kriptografi"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Panggilan Parkir Sumber Daya"
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Penunjuk Konfigurasi"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "panggilan pemantauan sumber daya"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Muzik Pada Sumber Daya Tahan"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "Sumber ODBC"
-
-#~ msgid "SMDI Module"
-#~ msgstr "Modul SMDI"
-
-#~ msgid "SNMP Module"
-#~ msgstr "Modul SNMP"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Muzik Di Tahan"
-
-#~ msgid "Application"
-#~ msgstr "Aplikasi"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Direktori Muzik"
-
-#~ msgid "Option mode"
-#~ msgstr "Pilihan mod"
-
-#~ msgid "Random Play"
-#~ msgstr "Bermain Rawak"
-
-#~ msgid "DTMF mode"
-#~ msgstr "Mode DTMF"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Domain utama identiti untuk Dari: header"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "Dari pengguna (diperlukan oleh banyak pembekal SIP)"
-
-#~ msgid "Ring on incoming dialplan contexts"
-#~ msgstr "Dering pada konteks rancangan panggilan masuk"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Biarkan tidak selamat untuk"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Peti mel untuk MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT antara telefon dan asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Menyemak tag di header"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Balas Masa tamat (ms) untuk sambungan ke bawah"
-
-#~ msgid "Register connection"
-#~ msgstr "Register sambungan"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "Dial perpanjangan sendiri untuk peti mel"
-
-#~ msgid "Client Type"
-#~ msgstr "Pelanggan Jenis"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Bahagian sipgeneral"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Membenarkan codec"
-
-#~ msgid "SIP realm"
-#~ msgstr "Dunia SIP"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Pilihan umum Voicemail"
-
-#~ msgid "From Email address of server"
-#~ msgstr "Dari alamat email server"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Kotak mail suara"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "Email mengandungi lampiran"
-
-#~ msgid "Display Name"
-#~ msgstr "Nama Paparan"
-
-#~ msgid "Password"
-#~ msgstr "Kata laluan"
-
-#~ msgid "zone"
-#~ msgstr "daerah"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Tetapan Zon Suara"
-
-#~ msgid "Message Format"
-#~ msgstr "Format Mesej"
diff --git a/applications/luci-app-asterisk/po/no/asterisk.po b/applications/luci-app-asterisk/po/no/asterisk.po
deleted file mode 100644
index 70c448d9fc..0000000000
--- a/applications/luci-app-asterisk/po/no/asterisk.po
+++ /dev/null
@@ -1,12 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
diff --git a/applications/luci-app-asterisk/po/pl/asterisk.po b/applications/luci-app-asterisk/po/pl/asterisk.po
deleted file mode 100644
index f092853297..0000000000
--- a/applications/luci-app-asterisk/po/pl/asterisk.po
+++ /dev/null
@@ -1,75 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-04-18 01:39+0200\n"
-"Last-Translator: Michał <msjablonsky@gmail.com>\n"
-"Language-Team: none\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Ustawienia Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Katalog AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Buforuj nagrane pliki podczas nagrywania"
-
-#~ msgid "Debug Level"
-#~ msgstr "Poziom debugowania"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Wyłącz niektóre ostrzeżenia"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Wykonaj zrzut pamięci podczas awarii"
-
-#~ msgid "High Priority"
-#~ msgstr "Wysoki Priorytet"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Uruchom Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Użyj wbudowanego próbkowania"
-
-#~ msgid "Log directory"
-#~ msgstr "Katalog logów"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Max. dozwolona ilość połączeń"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Max. obciążenie powodujące odrzucanie nowych połączeń"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Wyłącz kolory konsoli"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Katalog tymczasowy dla plików dźwiękowych"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Grupa dla uruchamiania"
-
-#~ msgid "The User to run as"
-#~ msgstr "Użytkownik dla uruchamiania"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Katalog bufora poczty głosowej"
-
-#~ msgid "Time Zone"
-#~ msgstr "Strefa Czasowa"
-
-#~ msgid "localzone"
-#~ msgstr "localzone"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
diff --git a/applications/luci-app-asterisk/po/pt-br/asterisk.po b/applications/luci-app-asterisk/po/pt-br/asterisk.po
deleted file mode 100644
index 21cb88ed33..0000000000
--- a/applications/luci-app-asterisk/po/pt-br/asterisk.po
+++ /dev/null
@@ -1,691 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2011-10-18 22:20+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Opções Gerais do Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Diretório do AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Guardar em cache os arquivos de som durante a gravação"
-
-#~ msgid "Debug Level"
-#~ msgstr "Nível de detalhamento"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Desativar alguns avisos"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Guardar o core quando o programa estourar"
-
-#~ msgid "High Priority"
-#~ msgstr "Alta Prioridade"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Inicializar Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Usar Temporização Interna"
-
-#~ msgid "Log directory"
-#~ msgstr "Diretório de registos"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Número máximo de chamadas permitidas"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Carga máxima para deixar de aceitar novas chamadas"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Desativar cores no console"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Diretório de cache para arquivos de som"
-
-#~ msgid "The Group to run as"
-#~ msgstr "O grupo sob o qual o asterisk será executado"
-
-#~ msgid "The User to run as"
-#~ msgstr "O usuário sob o qual o asterisk será executado"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Directorio da spool de voicemail"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefixar o nome de sistema à UniquID"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr ""
-#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Nível de Detalhamento"
-
-#~ msgid "Time Zone"
-#~ msgstr "Fuso Horário"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Seção do Plano de Marcação"
-
-#~ msgid "include"
-#~ msgstr "incluir"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Extensão do Plano de Discagem"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Opções Gerais do Plano de Discagem"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permitir transferência"
-
-#~ msgid "Reinvite/redirect media connections"
-#~ msgstr "Reconvidar/redirecionar conexões multimídia"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Limpar variáveis globais"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Encaminhamento do Plano de Discagem"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Conferência do Plano de Discagem"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Tempo do Plano de Discagem"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Correio de voz do Plano de Discagem"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Zonas do Plano de Discagem"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Prefixo para adicionar aos planos de discagem correspondentes"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Coincidir com o prefixo internacional"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Prefixo (0) para adicionar/remover para/de números internacionais"
-
-#~ msgid "localzone"
-#~ msgstr "zona local"
-
-#~ msgid "Match plan"
-#~ msgstr "Plano de combinação"
-
-#~ msgid "Connection to use"
-#~ msgstr "Conexão usada"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Mapeamentos de Tecla de Função"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Tecla de transferência assistida"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "Tecla de transferência cega"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Tecla para Desligar a chamada"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Tecla para Estacionar a chamada"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Recurso de Estacionamento"
-
-#~ msgid "ADSI Park"
-#~ msgstr "Estacionamento ADSI"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Tempo limite (seg) da transferência assistida"
-
-#~ msgid "One touch record key"
-#~ msgstr "Tecla de gravação em um toque"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Nome do contexto de chamada para o estacionamento"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Arquivo de som para tocar para o chamador estacionado"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Tempo máximo (ms) entre os dígitos para ativação de recursos"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Método para Encontrar uma Vaga de Estacionamento"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Toque o tom de cortesia para"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Habilitar Estacionamento"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Extensão para discar para estacionar"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Tempo de estacionamento (seg)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "faixa de extensões para o estacionamento de chamada"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Extensão de captura"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Segundos para esperar entre os dígitos quando transferindo"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "emitir som quando a transferência assistida estiver completa"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "Emitir som quando a transferência assistida falhar"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Recarregar a Configuração de Hardware"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Método de Reinicialização"
-
-#~ msgid "Parameter"
-#~ msgstr "Parâmetro"
-
-#~ msgid "Option type"
-#~ msgstr "Tipo de Opção"
-
-#~ msgid "User name"
-#~ msgstr "Nome do usuário"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Opções Gerais do Plano de Discagem"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Permitir Codificadores (codecs)"
-
-#~ msgid "Static"
-#~ msgstr "Estático"
-
-#~ msgid "Write Protect"
-#~ msgstr "Proteção à Escrita"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Conferência Encontre-me"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN do Administrador"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN da Conferência"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Opções Gerais da Conferência Encontre-me"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Número de buffers de 20ms que serão usados"
-
-#~ msgid "Modules"
-#~ msgstr "Módulos"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Aplicativo de Recepção de Alarmes"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Aplicativo de Autenticação"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Garanta que o asterisk não salva o CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Verifique se o canal está disponível"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Escute em qualquer canal"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Controlar o Aplicativo de Reprodução"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Variáveis de Cortes"
-
-#~ msgid "Database access functions"
-#~ msgstr "Funções de acesso ao banco de dados"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Aplicativo de Discagem"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Aplicativo de Máquina de Ditado Virtual"
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Suporte a Captura de Chamadas Direcionadas"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Diretório de Extensão"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "Aplicativo DISA (Acesso Direto ao Sistema Interior)"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Descarregar Aplicativo de variáveis do canal"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Aplicativo de Eco Simples"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "Pesquisa ENUM"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Reavaliar sequências de caracteres"
-
-#~ msgid "Executes applications"
-#~ msgstr "Executa aplicativos"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Interface de aplicativo IVR externo"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Bifurcar o CDR em duas entidades separadas"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Pegar o ID do CPE ADSI"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Rotinas de Gerenciamento e Grupo"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Codificar e Transmitir através do icecast e ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Aplicativo de Transmissão de Imagem"
-
-# what is this black? Seems to be truncated!
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Buscar o Identificador de chamadas/nome/número do preto"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Buscar o Identificador de chamadas/nome/número do banco de dados"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Macros de extensão"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Um Aplicativo simples de matemática"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Aplicativo de soma de verificação MD5"
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Aplicativo de Teste de Miliwatt (mu-law) Digital"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Gravar uma ligação e mixar o áudio durante a gravação"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Aplicativo de Anúncio e Estacionamento de Chamada"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Aplicativo de Reprodução Trivial"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Requer que seja informado um número de telefone"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Enfileiramento Real da Chamada"
-
-#~ msgid "Random goto"
-#~ msgstr "Vá para aleatório"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Aplicativo de Leitura de Variável"
-
-#~ msgid "Read in a file"
-#~ msgstr "Ler em um arquivo"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Escrita/Consulta de Dados em Tempo Real"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Aplicativo de Gravação Trivial"
-
-#~ msgid "Say time"
-#~ msgstr "Dizer a hora"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Aplicativo para Enviar dígitos DTMF"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Aplicativos para Enviar Texto"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Aplicativo de Definir a Identificação da Chamada"
-
-# I guess there is something wrong with English here
-#~ msgid "CDR user field apps"
-#~ msgstr "Aplicativos do campo do usuário no CDR"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr "Carregar => .so ; Definir o Nome na Identificação da Chamada"
-
-#~ msgid "load => .so ; Set CallerID Number"
-#~ msgstr "Carregar => .so ; Definir o Número na Identificação da Chamada"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Definir o Número do RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Definir Capacidade de Transferência ISDN"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "Tratador do SMS/PSTN"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Termina a ligação no canal requisitado"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Rotinas de Empilhamento"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Aplicativo de Sistema Genérico"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Reprodução com Detecção de Conversa"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Aplicativo de Teste de Interface"
-
-#~ msgid "Transfer"
-#~ msgstr "Transferir"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "TXTCIDName"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Aplicativo para Enviar URL"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Aplicativo para Eventos do Usuário Personalizados"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Enviar saída detalhada"
-
-#~ msgid "Voicemail"
-#~ msgstr "Correio de Voz"
-
-#~ msgid "Waits until first ring after time"
-#~ msgstr "Espere até o primeiro toque após tempo"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Aplicativo para Esperar Por Silêncio"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "Laços de Repetição e Execução Condicional"
-
-#~ msgid "Comma Separated Values CDR Backend"
-#~ msgstr "Serviço de CDR em Valores Separados por Vírgula"
-
-#~ msgid "Customizable Comma Separated Values CDR Backend"
-#~ msgstr "Serviço de CDR em Valores Separados por Vírgula Personalizável"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Serviço de CDR de Gerenciamento de Chamadas Asterisk"
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "Serviço de CDR em MySQL"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "Serviço de CDR em PostgreSQL"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "Serviço de CDR em SQLite"
-
-#~ msgid "Agent Proxy Channel"
-#~ msgstr "Canal de Proxy do Agente"
-
-#~ msgid "Option chan_iax2"
-#~ msgstr "Opção chan_iax2"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Canal de Proxy Local"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Protocolo de Iniciação de Sessão (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Codificador/Decodificador PCM Diferencial Adaptativo"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "Codificador/Decodificador A-law"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "Codificador/Decodificador direto A-law e Mulaw"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "Transcodificador G726 ITU G.726-32kbps"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "Tradutor de codificação GSM/PCM16 (linear com sinal)"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Tradutor de codificação Speex/PCM16 (linear com sinal)"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Codificador/Decodificador Mu-law"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Formato AU Sun Microsystems (linear com sinal)"
-
-#~ msgid "G.723.1 Simple Timestamp File Format"
-#~ msgstr "Formato de Arquivo de Selo Temporal Simples G.723.1"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Dado G.726 bruto (16/24/32/40kbps)"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Dado G729 bruto"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Dado GSM bruto"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Dado h263 bruto"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "Imagem JPEG ((Joint Picture Experts Group)"
-
-#~ msgid "Raw uLaw 8khz Audio support (PCM)"
-#~ msgstr "Suporte a uLaw 8khz Áudio bruto (PCM)"
-
-#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
-#~ msgstr "carregar => .so ; Suporte a uLaw 8khz Áudio PCM bruto"
-
-#~ msgid "Raw Signed Linear Audio support (SLN)"
-#~ msgstr "Suporte a Áudio Linear com Sinal (SLN)"
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Formato de Arquivo Dialogic VOX (ADPCM)"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Formato WAV da Microsoft (8000hz Linear com Sinal)"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Formato WAV da Microsoft (GSM Proprietário) "
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr ""
-#~ "Funções do plano de discagem relacionadas ao identificador da chamada"
-
-#~ msgid "ENUM Functions"
-#~ msgstr "Funções ENUM"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "Funções de codificação / decodificação de URI"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Compilador da Linguagem de Extensão do Asterisk"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Configuração da Extensão de Texto"
-
-#~ msgid "load => .so ; Builtin dialplan functions"
-#~ msgstr "carregar => .so ; Funções de plano de discagem embutidas"
-
-#~ msgid "Loopback Switch"
-#~ msgstr "Interruptor loopback"
-
-#~ msgid "Realtime Switch"
-#~ msgstr "Interruptor de Tempo Real"
-
-#~ msgid "Outgoing Spool Support"
-#~ msgstr "Suporte a bufferização da Saída"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Wil Cal U (Discador Automático)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "Recurso de Configuração do Mysql"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "Recurso de Configuração do ODBC"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "Módulo do PGSQL"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Assinaturas Digitais Criptográficas"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Recurso de Estacionamento de Chamadas"
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Configuração dos Indicadores"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Recurso de Monitoramento de Chamada"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Recurso da Música de Espera"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "Recurso do ODBC"
-
-#~ msgid "SMDI Module"
-#~ msgstr "Módulo SMDI"
-
-#~ msgid "SNMP Module"
-#~ msgstr "Módulo SNMP"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Música de Espera"
-
-#~ msgid "Application"
-#~ msgstr "Aplicativo"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Diretório de Música"
-
-#~ msgid "Option mode"
-#~ msgstr "Modo da opção"
-
-#~ msgid "Random Play"
-#~ msgstr "Toque Aleatoriamente"
-
-#~ msgid "DTMF mode"
-#~ msgstr "Modo DTMF"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Identidade do primeiro domínio para cabeçalhos De:"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "Do usuário (necessário para muitos provedores de SIP)"
-
-# I didn't undestand this one
-#~ msgid "Ring on incoming dialplan contexts"
-#~ msgstr "Tocar no contextos de plano de discagem recebidas"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Permitir Inseguro para"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Caixa de Correio para MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT entre o telefone e o Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Verifique as etiquetas nos cabeçalhos"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Tempo Limite da Resposta (ms) para conexões desconectadas"
-
-#~ msgid "Register connection"
-#~ msgstr "Registro da conexão"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "Discar extensão própria para a caixa de correio"
-
-#~ msgid "Client Type"
-#~ msgstr "Tipo de Cliente"
-
-#~ msgid "Username"
-#~ msgstr "Usuário"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Opções Gerais do SIP"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Permitir codificações"
-
-#~ msgid "SIP realm"
-#~ msgstr "Domínio do SIP (realm)"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Opções gerais do correio de voz"
-
-#~ msgid "From Email address of server"
-#~ msgstr "Endereço do email de origem do servidor"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Caixas de Correio de Voz"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "O email contém anexos"
-
-#~ msgid "Email"
-#~ msgstr "Email"
-
-#~ msgid "Display Name"
-#~ msgstr "Nome para exibição"
-
-#~ msgid "Password"
-#~ msgstr "Senha"
-
-#~ msgid "zone"
-#~ msgstr "zona"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Configuração de Zona da Voz"
-
-#~ msgid "Message Format"
-#~ msgstr "Formato da Mensagem"
diff --git a/applications/luci-app-asterisk/po/pt/asterisk.po b/applications/luci-app-asterisk/po/pt/asterisk.po
deleted file mode 100644
index d1b98363af..0000000000
--- a/applications/luci-app-asterisk/po/pt/asterisk.po
+++ /dev/null
@@ -1,150 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-26 19:03+0200\n"
-"PO-Revision-Date: 2009-05-20 11:54+0200\n"
-"Last-Translator: Jose Monteiro <jm@unimos.net>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Pootle 1.1.0\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Opções Gerais do Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Directorio AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Guardar em cache os ficheiros de som durante a gravação"
-
-#~ msgid "Debug Level"
-#~ msgstr "Nível de debug"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Desactivar alguns avisos"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Guardar o core quando houver crash"
-
-#~ msgid "High Priority"
-#~ msgstr "Alta Prioridade"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Inicializar Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Usar temporizações internas"
-
-#~ msgid "Log directory"
-#~ msgstr "Directorio de registos"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Maximo de chamadas permitidas"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Maximo de carga para deixar de aceitar novas chamadas"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Desactivar cores na consola"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Directorio de cache para ficheiros de som"
-
-#~ msgid "The Group to run as"
-#~ msgstr "O grupo sob o qual o asterisk será executado"
-
-#~ msgid "The User to run as"
-#~ msgstr "O utilizador sob o qual o asterisk será executado"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Directorio da spool de voicemail"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Prefixar o nome de sistema à UniquID"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr ""
-#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Nivel de verbosidade"
-
-#~ msgid "Time Zone"
-#~ msgstr "Fuso Horário"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Secção do Plano de Marcação"
-
-#~ msgid "include"
-#~ msgstr "incluir"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Extensão do Plano de Marcação"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permitir transferência"
-
-#~ msgid "Reinvite/redirect media connections"
-#~ msgstr "Redirigir/Repetir ligações multimedia"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Limpar variaveis globais"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Encaminhamento do Plano de Marcação"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Conferencia do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Dialplan Time"
-#~ msgstr "Conferencia do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Encaminhamento do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Secção do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Connection to use"
-#~ msgstr "Secção do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "IAX General Options"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Allow Codecs"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Section sipgeneral"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Allow codecs"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "SIP realm"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Voicemail general options"
-#~ msgstr "Opções Gerais do Plano de Marcação"
-
-#, fuzzy
-#~ msgid "Voice Zone settings"
-#~ msgstr "Secção do Plano de Marcação"
diff --git a/applications/luci-app-asterisk/po/ro/asterisk.po b/applications/luci-app-asterisk/po/ro/asterisk.po
deleted file mode 100644
index e271370070..0000000000
--- a/applications/luci-app-asterisk/po/ro/asterisk.po
+++ /dev/null
@@ -1,54 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2011-10-07 00:35+0200\n"
-"Last-Translator: Daniel <daniel.petre@pitesti.rcs-rds.ro>\n"
-"Language-Team: none\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2);;\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Optiunile generale Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Director AGI"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Dezactiveaza cateva avertizari"
-
-#~ msgid "High Priority"
-#~ msgstr "Prioritate inalta"
-
-#~ msgid "Log directory"
-#~ msgstr "Director de loguri"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Incarcarea maxima de cand se refuza apeluri noi"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Dezactiveaza culorile in consola"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Ruleaza sub grupul"
-
-#~ msgid "The User to run as"
-#~ msgstr "Ruleaza sub utilizatorul"
-
-#~ msgid "Time Zone"
-#~ msgstr "Fusul orar"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Permite transferul"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Goleste variabilele globale"
-
-#~ msgid "Connection to use"
-#~ msgstr "Conexiunea pentru folosire"
diff --git a/applications/luci-app-asterisk/po/ru/asterisk.po b/applications/luci-app-asterisk/po/ru/asterisk.po
deleted file mode 100644
index 171808710e..0000000000
--- a/applications/luci-app-asterisk/po/ru/asterisk.po
+++ /dev/null
@@ -1,515 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-04-02 15:02+0200\n"
-"Last-Translator: Kamal <kamal.aliev@epscom.ru>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Общие настройки Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "Каталог AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Кэшировать звуковые файлы во время записи"
-
-#~ msgid "Debug Level"
-#~ msgstr "Уровень отладки"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Отключить некоторые предупреждения"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Сохранять дамп ядра при фатальной ошибке"
-
-#~ msgid "High Priority"
-#~ msgstr "Высокий приоритет"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Включить шифрование"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Использовать внутренние тайминги"
-
-#~ msgid "Log directory"
-#~ msgstr "Каталог файлов журнала"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Максимальное разрешённое количество вызовов"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Максимальная нагрузка для запрета приёма новых вызовов"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Выключить цвета консоли"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Каталог кэша звуковых файлов"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Группа, от имени которой запускать"
-
-#~ msgid "The User to run as"
-#~ msgstr "Пользователь, от имени которого запускать"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Добавлять имя системы к уникальному идентификатору (UID)"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Передавать тишину в формате SLINEAR при записи канала"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Раздел правил набора"
-
-#~ msgid "include"
-#~ msgstr "включить"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Раcширение правила набора"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Общие настройки правил набора"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Разрешить перевод"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Очистить глобальные переменные"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Правила набора для конференции"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Время правил набора"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Правила набора для голосовой почты"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Зоны для правил набора"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Префикс (0) для добавления/удаления к/из международных номеров"
-
-#~ msgid "localzone"
-#~ msgstr "местная зона"
-
-#~ msgid "Connection to use"
-#~ msgstr "Использовать соединение"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Назначения функцилнальных клавиш"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "Клавиша для разрыва соединения"
-
-#~ msgid "Key to Park call"
-#~ msgstr "Клавиша для \"парковки\" вызова "
-
-#~ msgid "Parking Feature"
-#~ msgstr "Функция \"Парковка\""
-
-#~ msgid "One touch record key"
-#~ msgstr "Клавиша записи в одно касание"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Аудио файл, проигрываемый \"припаркованному\""
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Максимальное время (мс) между нажатиями для активации функции"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Метод поиска слота для парковки"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Играть тон вежливости для"
-
-#~ msgid "Enable Parking"
-#~ msgstr "Разрешить \"Парковку\""
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "Расширение набора для \"парковки\""
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Время \"Парковки\" (секунды)"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Диапазон расширений для \"парковки\" вызова"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Перезагрузить конфигурацию оборудования"
-
-#~ msgid "Reboot Method"
-#~ msgstr "Метод перезагрузки"
-
-#~ msgid "Parameter"
-#~ msgstr "Параметр"
-
-#~ msgid "Option type"
-#~ msgstr "Тип параметра"
-
-#~ msgid "User name"
-#~ msgstr "Имя пользователя"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Общие параметры IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Разрешить кодеки"
-
-#~ msgid "Static"
-#~ msgstr "Статический"
-
-#~ msgid "Write Protect"
-#~ msgstr "Защита от записи"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Конференция Meetme"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN администратора"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN совещания"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Общие параметры конференции Meetme"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Количество используемых 20 мс буферов"
-
-#~ msgid "Modules"
-#~ msgstr "Модули"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Приложение сбора сигналов тревоги"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Приложение аутентификации"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Убедитесь что Asterisk не сохраняет CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Проверить канал на доступность"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Слашать на любом канале"
-
-#~ msgid "Database access functions"
-#~ msgstr "Функции доступа базы данных"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Приложение набора"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr ""
-#~ "Приложение доступа к добавочной линии путем прямого установления "
-#~ "входящего соединения (DISA)"
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Приложение сбора переменных канала"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Приложение эха"
-
-#~ msgid "Executes applications"
-#~ msgstr "Выполняет приложение"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Интерфейс внешнего IVR приложения"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Операции управления группой"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Приложение передачи изображений"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Искать имя CallerID в \"черном\" списке"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Искать имя CallerID в локальной базе"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Макрос расширения"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Простое математическое приложение"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Приложение MD5"
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Записать вызов и микшировать аудио во время записи"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Приложение для воспроизведения"
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Требовать номер телефона, который необходимо ввести"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "Постановка вызовов на ожидание"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Приложение чтения переменных"
-
-#~ msgid "Read in a file"
-#~ msgstr "Читать в файл"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Приложения для записи"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Приложение отправки DTMF"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Приложения отправки текста"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Приложение установки CallerID"
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Установить номер RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Установить возможности передачи ISDN "
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "Обработчик SMS/PSTN"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Отсоединяет запрошенный канал"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Функции стека"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Приложение System()"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Воспроизведение с обнаружением разговора"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Приложение для тестирования интерфейса"
-
-#~ msgid "Transfer"
-#~ msgstr "Пересылка"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "Имя TXTCID"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Приложения отсылки URL"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Приложение пользовательских событий"
-
-#~ msgid "Send verbose output"
-#~ msgstr "Отправлять подробный вывод"
-
-#~ msgid "Voicemail"
-#~ msgstr "Голосовая почта"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "Циклы while и условное выполнение"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Бэкенд CDR менеджера вызовов Asterisk"
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "Бэкенд MySQL CDR"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "Бэкенд PostgreSQL CDR"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "Бэкенд SQLite CDR"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Локальный прокси-канал"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Session Initiation Protocol - протокол установления сеанса (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Адаптивный дифференциальный PCM кодер/декодер"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "A-law кодер/декодер"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "A-law и Mu-law прямой кодер/декодер"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "ITU G.726-32кбит/с G726 транскодер"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "Транслятор кодека GSM/PCM16 (знаковый линейный)"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Транслятор кодека Speex/PCM16 (знаковый линейный)"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Mu-law кодер/декодер"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Формат Sun Microsystems AU (знаковый линейный)"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Необработанные данные G.726 (16/24/32/40кбит/с)"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Необработанные данные G729"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Необработанные данные GSM"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Необработанные данные h263"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "Изображение JPEG (Joint Picture Experts Group) "
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Формат Dialogic VOX (ADPCM)"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Формат Microsoft WAV (800Гц, линейный знаковый)"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Формат Microsoft WAV (проприетарный GSM)"
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr "Функции правил набора Caller ID"
-
-#~ msgid "ENUM Functions"
-#~ msgstr "Функции ENUM"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "Функции кодирования/декодирования URI"
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Компилятор языка расширений Asterisk"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Настройка текстового расширения"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Позвоню тебе (Wil Cal U, автодозвонщик)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "Ресурс конфигурации MySQL"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "Ресурс конфигурации ODBC"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "PGSQL модуль"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Цифровые подписи"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Ресурс \"парковки\""
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Конфигурация индикаций"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Ресурс мониторинга вызова"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "Ресурс ODBC"
-
-#~ msgid "SMDI Module"
-#~ msgstr "Модуль SMDI"
-
-#~ msgid "SNMP Module"
-#~ msgstr "Модуль SNMP"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Музыка при ожидании"
-
-#~ msgid "Application"
-#~ msgstr "Приложение"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Директория музыки"
-
-#~ msgid "Random Play"
-#~ msgstr "Воспроизведение в случайном порядке"
-
-#~ msgid "DTMF mode"
-#~ msgstr "DTMF режим"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "From user (от пользователя, требуется многими SIP-провайдерами)"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Разрешить небезопасные для"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Почтовый ящик для MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT между телефоном и Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Проверять метки в заголовках"
-
-#~ msgid "Register connection"
-#~ msgstr "Зарегистрировать соединение"
-
-#~ msgid "Client Type"
-#~ msgstr "Тип клиента"
-
-#~ msgid "Username"
-#~ msgstr "Имя пользователя"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Общие SIP"
-
-#~ msgid "SIP realm"
-#~ msgstr "SIP realm"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Общие настройки голосовой почты"
-
-#~ msgid "From Email address of server"
-#~ msgstr "От адреса эл. почты сервера"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Ящики голосовой почты"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "Письмо содержит вложение"
-
-#~ msgid "Email"
-#~ msgstr "Эл. почта"
-
-#~ msgid "Display Name"
-#~ msgstr "Отображаемое имя"
-
-#~ msgid "Password"
-#~ msgstr "Пароль"
-
-#~ msgid "zone"
-#~ msgstr "зона"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Настройки голосовой зоны"
-
-#~ msgid "Message Format"
-#~ msgstr "Формат сообщения"
diff --git a/applications/luci-app-asterisk/po/sk/asterisk.po b/applications/luci-app-asterisk/po/sk/asterisk.po
deleted file mode 100644
index e69de29bb2..0000000000
--- a/applications/luci-app-asterisk/po/sk/asterisk.po
+++ /dev/null
diff --git a/applications/luci-app-asterisk/po/sv/asterisk.po b/applications/luci-app-asterisk/po/sv/asterisk.po
deleted file mode 100644
index e69de29bb2..0000000000
--- a/applications/luci-app-asterisk/po/sv/asterisk.po
+++ /dev/null
diff --git a/applications/luci-app-asterisk/po/templates/asterisk.pot b/applications/luci-app-asterisk/po/templates/asterisk.pot
deleted file mode 100644
index e69de29bb2..0000000000
--- a/applications/luci-app-asterisk/po/templates/asterisk.pot
+++ /dev/null
diff --git a/applications/luci-app-asterisk/po/tr/asterisk.po b/applications/luci-app-asterisk/po/tr/asterisk.po
deleted file mode 100644
index c8b4e58c1a..0000000000
--- a/applications/luci-app-asterisk/po/tr/asterisk.po
+++ /dev/null
@@ -1,12 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
diff --git a/applications/luci-app-asterisk/po/uk/asterisk.po b/applications/luci-app-asterisk/po/uk/asterisk.po
deleted file mode 100644
index d6dd63e91d..0000000000
--- a/applications/luci-app-asterisk/po/uk/asterisk.po
+++ /dev/null
@@ -1,79 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-03-21 14:22+0200\n"
-"Last-Translator: Anonymous Pootle User\n"
-"Language-Team: none\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Головні налаштування Asterisk"
-
-#~ msgid "AGI directory"
-#~ msgstr "AGI тека "
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Кешувати файли записів поки йде запис"
-
-#~ msgid "Debug Level"
-#~ msgstr "Рівень налагоджування"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Вимкнути деякі попередження"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Зберегти дамп ядра в разі фатальної помилки"
-
-#~ msgid "High Priority"
-#~ msgstr "Високий пріоритет"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Ініціалізувати шифрування"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Використовувати внутрішні таймінги"
-
-#~ msgid "Log directory"
-#~ msgstr "Тека з журналом"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Максимальна кількість дозволених дзвінків"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Максимальне навантаження, при якому зупиняти прийом дзвінків"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Вимкнути кольори в консолі"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Тека з кешованими звуковими файлами"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Запустити з правами Групи"
-
-#~ msgid "The User to run as"
-#~ msgstr "Запустити з правами Користувача"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Тека з голосовою поштою"
-
-#, fuzzy
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Префікс Uniquid з назвою системи "
-
-#~ msgid "Time Zone"
-#~ msgstr "Часовий пояс"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Дозволити переадресацію"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Видалити глобальні змінні"
diff --git a/applications/luci-app-asterisk/po/vi/asterisk.po b/applications/luci-app-asterisk/po/vi/asterisk.po
deleted file mode 100644
index bebf1abcf0..0000000000
--- a/applications/luci-app-asterisk/po/vi/asterisk.po
+++ /dev/null
@@ -1,680 +0,0 @@
-# asterisk.pot
-# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-16 06:58+0200\n"
-"PO-Revision-Date: 2009-08-16 08:36+0200\n"
-"Last-Translator: Hong Phuc Dang <dhppat@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Pootle 1.1.0\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk những tùy chọn căn bản"
-
-#~ msgid "AGI directory"
-#~ msgstr "Thư mục AGI"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "Cache ghi lại tập tin âm thanh trong suốt qua trình recording"
-
-#~ msgid "Debug Level"
-#~ msgstr "Debug Level"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "Vô hiệu hóa một số cảnh báo"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "Dump core on crash"
-
-#~ msgid "High Priority"
-#~ msgstr "High Priority"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "Initialise Crypto"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "Sử dụng thời gian nội bộ"
-
-#~ msgid "Log directory"
-#~ msgstr "Thư mục log"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "Số lượng cuộc gọi tối đa cho phép"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "Mức độ tải tối đa để ngừng thu nhận cuộc gọi mới"
-
-#~ msgid "Disable console colors"
-#~ msgstr "Vô hiệu hóa bản điều khiển màu sắc"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "Thư mục sound files cache"
-
-#~ msgid "The Group to run as"
-#~ msgstr "Nhóm vận hành như"
-
-#~ msgid "The User to run as"
-#~ msgstr "Người sử dụng vận hành như"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "Thư mục Voicemail Spool "
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "Tiền tố UniquID với tên hệ thống"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "Xây dựng đừng dẫn transcode via SLINEAR, không trực tiếp"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "Truyền SLINEAR silence trong khi recording một channel"
-
-#~ msgid "Verbose Level"
-#~ msgstr "Verbose Level"
-
-#~ msgid "Section dialplan"
-#~ msgstr "Section dialplan"
-
-#~ msgid "include"
-#~ msgstr "bao gồm"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "Dialplan Extension"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "Dialplan tùy chọn tổng quát"
-
-#~ msgid "Allow transfer"
-#~ msgstr "Cho phép chuyển đổi"
-
-#~ msgid "Clear global vars"
-#~ msgstr "Xóa global vars"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "Dialplan Goto"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "Dialplan Conference"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "Dialplan Time"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "Dialplan Voicemail"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "Dial Zones cho Dialplan"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "Tiền tố để thêm vào matching dialplans"
-
-#~ msgid "Match International prefix"
-#~ msgstr "Match tiền tố quốc tê"
-
-#~ msgid "Prefix (0) to add/remove to/from international numbers"
-#~ msgstr "Tiền tố để thêm vào/ bỏ ra/ từ số gọi quốc tế"
-
-#~ msgid "localzone"
-#~ msgstr "vùng địa phương"
-
-#~ msgid "Match plan"
-#~ msgstr "Match plan"
-
-#~ msgid "Connection to use"
-#~ msgstr "Kết nối sử dụng"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "Bản đồ phím tính năng"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "Attended transfer key"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "phím chuyển đổi ẩn"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "phím để vô hiệu hóa cuộc gọi"
-
-#~ msgid "Key to Park call"
-#~ msgstr "phím để định vị cuộc gọi"
-
-#~ msgid "Parking Feature"
-#~ msgstr "Tính năng định vị"
-
-#~ msgid "ADSI Park"
-#~ msgstr "định vị ADSI"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "Attended transfer timeout (sec)"
-
-#~ msgid "One touch record key"
-#~ msgstr "Phím thu chạm một lần"
-
-#~ msgid "Name of call context for parking"
-#~ msgstr "Tên của call context cho parking"
-
-#~ msgid "Sound file to play to parked caller"
-#~ msgstr "Tập tin âm thanh để play to parked caller"
-
-#~ msgid "Max time (ms) between digits for feature activation"
-#~ msgstr "Thời gian tối đa (ms) giữa các digits cho feature activation"
-
-#~ msgid "Method to Find Parking slot"
-#~ msgstr "Phương pháp tìm điểm định vị"
-
-#~ msgid "parkedmusicclass"
-#~ msgstr "parkedmusicclass"
-
-#~ msgid "Play courtesy tone to"
-#~ msgstr "Play courtesy tone để"
-
-#~ msgid "Enable Parking"
-#~ msgstr "cho phép định vị"
-
-#~ msgid "Extension to dial to park"
-#~ msgstr "nhanh số để gọi để định vị"
-
-#~ msgid "Parking time (secs)"
-#~ msgstr "Thời gian định vị"
-
-#~ msgid "Range of extensions for call parking"
-#~ msgstr "Vùng của đuôi mở rộng cho call parking"
-
-#~ msgid "Pickup extension"
-#~ msgstr "Pickup extension"
-
-#~ msgid "Seconds to wait between digits when transferring"
-#~ msgstr "Thời gian chờ giữa những chữ số khi chuyển đổi"
-
-#~ msgid "sound when attended transfer is complete"
-#~ msgstr "âm thanh khi chuyển đổi hoàn tất"
-
-#~ msgid "Sound when attended transfer fails"
-#~ msgstr "âm thanh khi chuyển đổi không thành công"
-
-#~ msgid "Reload Hardware Config"
-#~ msgstr "Tải lại cấu hình phần cứng"
-
-#~ msgid "Reboot Method"
-#~ msgstr "phương pháp khởi động lại"
-
-#~ msgid "Parameter"
-#~ msgstr "Tham số"
-
-#~ msgid "Option type"
-#~ msgstr "Lựa chọn"
-
-#~ msgid "User name"
-#~ msgstr "Tên người dùng"
-
-#~ msgid "IAX General Options"
-#~ msgstr "Những lựa chọn tổng quát IAX"
-
-#~ msgid "Allow Codecs"
-#~ msgstr "Cho phép Codecs"
-
-#~ msgid "Static"
-#~ msgstr "Tĩnh"
-
-#~ msgid "Write Protect"
-#~ msgstr "Viết bảo vệ"
-
-#~ msgid "Meetme Conference"
-#~ msgstr "Gặp mặt thảo luận"
-
-#~ msgid "Admin PIN"
-#~ msgstr "PIN quản trị"
-
-#~ msgid "Meeting PIN"
-#~ msgstr "PIN cuộc gặp"
-
-#~ msgid "Meetme Conference General Options"
-#~ msgstr "Lựu chọn chung về thảo luận trực tiếp"
-
-#~ msgid "Number of 20ms audio buffers to be used"
-#~ msgstr "Số của 20ms audio buffers để được dùng"
-
-#~ msgid "Modules"
-#~ msgstr "Modules"
-
-#~ msgid "Alarm Receiver Application"
-#~ msgstr "Ứng dụng nhận báo thức"
-
-#~ msgid "Authentication Application"
-#~ msgstr "Ứng dụng xác thực"
-
-#~ msgid "Make sure asterisk doesn't save CDR"
-#~ msgstr "Bảo đảm asterisk không lưu CDR"
-
-#~ msgid "Check if channel is available"
-#~ msgstr "Kiểm tra xem nếu kênh đã có sẵn"
-
-#~ msgid "Listen in on any channel"
-#~ msgstr "Nghe trên bất kỳ kênh nào"
-
-#~ msgid "Control Playback Application"
-#~ msgstr "Điều khiển ứng dụng phát lại"
-
-#~ msgid "Cuts up variables"
-#~ msgstr "Cuts up variables"
-
-#~ msgid "Database access functions"
-#~ msgstr "Chức năng truy cập cơ sở dữ liệu"
-
-#~ msgid "Dialing Application"
-#~ msgstr "Ứng dụng quay số"
-
-#~ msgid "Virtual Dictation Machine Application"
-#~ msgstr "Ứng dụng virtual Dictation Machine "
-
-#~ msgid "Directed Call Pickup Support"
-#~ msgstr "Directed hỗ trợ call pickup"
-
-#~ msgid "Extension Directory"
-#~ msgstr "Danh bạ nhánh số"
-
-#~ msgid "DISA (Direct Inward System Access) Application"
-#~ msgstr "Ứng dụng DISA (Direct Inward System Access) "
-
-#~ msgid "Dump channel variables Application"
-#~ msgstr "Dump channel variables Application"
-
-#~ msgid "Simple Echo Application"
-#~ msgstr "Ứng dụng Echo đơn giản"
-
-#~ msgid "ENUM Lookup"
-#~ msgstr "ENUM tra cứu"
-
-#~ msgid "Reevaluates strings"
-#~ msgstr "Đánh giá lại strings"
-
-#~ msgid "Executes applications"
-#~ msgstr "thực thi ứng dụng"
-
-#~ msgid "External IVR application interface"
-#~ msgstr "Ứng dụng giao diện bên ngoài IVR"
-
-#~ msgid "Fork The CDR into 2 separate entities"
-#~ msgstr "Fork The CDR into 2 nhân riêng biệt"
-
-#~ msgid "Get ADSI CPE ID"
-#~ msgstr "Lấy ADSI CPE ID"
-
-#~ msgid "Group Management Routines"
-#~ msgstr "Group Management Routines"
-
-#~ msgid "Encode and Stream via icecast and ices"
-#~ msgstr "Encode và Stream via icecast và ices"
-
-#~ msgid "Image Transmission Application"
-#~ msgstr "Ứng dụng truyền hình ảnh"
-
-#~ msgid "Look up Caller*ID name/number from black"
-#~ msgstr "Tra cứu tên/số của người gọi"
-
-#~ msgid "Look up CallerID Name from local database"
-#~ msgstr "Tra cứu tên người gọi từ cơ sở dữ liệu địa phương"
-
-#~ msgid "Extension Macros"
-#~ msgstr "Nhánh số Macro"
-
-#~ msgid "A simple math Application"
-#~ msgstr "Ứng dụng tính toán đơn giản"
-
-#~ msgid "MD5 checksum Application"
-#~ msgstr "Ứng dụng MD5 checksum "
-
-#~ msgid "Digital Milliwatt (mu-law) Test Application"
-#~ msgstr "Ứng dụng kiểm tra Digital Milliwatt (mu-law) "
-
-#~ msgid "Record a call and mix the audio during the recording"
-#~ msgstr "Thu âm cuộc gọi và phối âm trong khi thu"
-
-#~ msgid "Call Parking and Announce Application"
-#~ msgstr "Định vị cuộc gọi và ứng dụng thông báo"
-
-#~ msgid "Trivial Playback Application"
-#~ msgstr "Ứng dụng trivial Playback "
-
-#~ msgid "Require phone number to be entered"
-#~ msgstr "Yêu cầu nhập số điện thoại"
-
-#~ msgid "True Call Queueing"
-#~ msgstr "True Call Queueing"
-
-#~ msgid "Random goto"
-#~ msgstr "Random goto"
-
-#~ msgid "Read Variable Application"
-#~ msgstr "Ứng dụng đọc variable "
-
-#~ msgid "Read in a file"
-#~ msgstr "Đọc trong một tập tin"
-
-#~ msgid "Realtime Data Lookup/Rewrite"
-#~ msgstr "Tra cứu dữ liệu đúng lúc/ Viết lại"
-
-#~ msgid "Trivial Record Application"
-#~ msgstr "Ứng dụng trivial record"
-
-#~ msgid "Say time"
-#~ msgstr "Nói thời gian"
-
-#~ msgid "Send DTMF digits Application"
-#~ msgstr "Ứng dụng gửi những chữ số DTMF"
-
-#~ msgid "Send Text Applications"
-#~ msgstr "Gửi ứng dụng tin nhắn"
-
-#~ msgid "Set CallerID Application"
-#~ msgstr "Ứng dụng cài đặt định dạng cuộc gọi"
-
-#~ msgid "CDR user field apps"
-#~ msgstr "CDR user field apps"
-
-#~ msgid "load => .so ; Set CallerID Name"
-#~ msgstr "load =&amp;gt; .so ; Đặt tên CallerID "
-
-#~ msgid "load => .so ; Set CallerID Number"
-#~ msgstr "load =&amp;gt; .so ; Đặt số CallerID "
-
-#~ msgid "Set RDNIS Number"
-#~ msgstr "Cài đặt số RDNIS"
-
-#~ msgid "Set ISDN Transfer Capability"
-#~ msgstr "Cài đặt công suất truyền tải ISDN"
-
-#~ msgid "SMS/PSTN handler"
-#~ msgstr "SMS/PSTN handler"
-
-#~ msgid "Hangs up the requested channel"
-#~ msgstr "Bãi bỏ kênh yêu cầu"
-
-#~ msgid "Stack Routines"
-#~ msgstr "Ngăn xếp Routines"
-
-#~ msgid "Generic System() application"
-#~ msgstr "Ứng dụng Genetic System"
-
-#~ msgid "Playback with Talk Detection"
-#~ msgstr "Playback với bộ phát hiện tiếng nói"
-
-#~ msgid "Interface Test Application"
-#~ msgstr "Ứng dụng kiểm tra giao diện"
-
-#~ msgid "Transfer"
-#~ msgstr "truyền tải"
-
-#~ msgid "TXTCIDName"
-#~ msgstr "TXTCIDName"
-
-#~ msgid "Send URL Applications"
-#~ msgstr "Gửi những ứng dụng URL"
-
-#~ msgid "Custom User Event Application"
-#~ msgstr "Ứng dụng Custom User Event "
-
-#~ msgid "Send verbose output"
-#~ msgstr "Gửi verbose output"
-
-#~ msgid "Voicemail"
-#~ msgstr "Thư thoại"
-
-#~ msgid "Waits until first ring after time"
-#~ msgstr "Đợi tới tiếng ring đầu tiên sau khi"
-
-#~ msgid "Wait For Silence Application"
-#~ msgstr "Đợi ứng dụng im lặng"
-
-#~ msgid "While Loops and Conditional Execution"
-#~ msgstr "Trong khi Loops và Conditional Execution"
-
-#~ msgid "Comma Separated Values CDR Backend"
-#~ msgstr "Comma Separated Values CDR Backend"
-
-#~ msgid "Customizable Comma Separated Values CDR Backend"
-#~ msgstr "Tùy chỉnh Comma Separated Values CDR Backend"
-
-#~ msgid "Asterisk Call Manager CDR Backend"
-#~ msgstr "Asterisk Call Manager CDR Backend"
-
-#~ msgid "MySQL CDR Backend"
-#~ msgstr "MySQL CDR Backend"
-
-#~ msgid "PostgreSQL CDR Backend"
-#~ msgstr "PostgreSQL CDR Backend"
-
-#~ msgid "SQLite CDR Backend"
-#~ msgstr "SQLite CDR Backend"
-
-#~ msgid "Agent Proxy Channel"
-#~ msgstr "Agent Proxy Channel"
-
-#~ msgid "Option chan_iax2"
-#~ msgstr "Tùy chọn chan_iax2"
-
-#~ msgid "Local Proxy Channel"
-#~ msgstr "Local Proxy Channel"
-
-#~ msgid "Session Initiation Protocol (SIP)"
-#~ msgstr "Session Initiation Protocol (SIP)"
-
-#~ msgid "Adaptive Differential PCM Coder/Decoder"
-#~ msgstr "Adaptive Differential PCM Coder/Decoder"
-
-#~ msgid "A-law Coder/Decoder"
-#~ msgstr "A-law Coder/Decoder"
-
-#~ msgid "A-law and Mulaw direct Coder/Decoder"
-#~ msgstr "A-law and Mulaw direct Coder/Decoder"
-
-#~ msgid "ITU G.726-32kbps G726 Transcoder"
-#~ msgstr "ITU G.726-32kbps G726 Transcoder"
-
-#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
-#~ msgstr "GSM/PCM16 (signed linear) Codec Translation"
-
-#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
-#~ msgstr "Speex/PCM16 (signed linear) Codec Translator"
-
-#~ msgid "Mu-law Coder/Decoder"
-#~ msgstr "Mu-law Coder/Decoder"
-
-#~ msgid "Sun Microsystems AU format (signed linear)"
-#~ msgstr "Sun Microsystems AU format (signed linear)"
-
-#~ msgid "G.723.1 Simple Timestamp File Format"
-#~ msgstr "G.723.1 Simple Timestamp File Format"
-
-#~ msgid "Raw G.726 (16/24/32/40kbps) data"
-#~ msgstr "Raw G.726 (16/24/32/40kbps) data"
-
-#~ msgid "Raw G729 data"
-#~ msgstr "Raw G729 data"
-
-#~ msgid "Raw GSM data"
-#~ msgstr "Raw GSM data"
-
-#~ msgid "Raw h263 data"
-#~ msgstr "Raw h263 data"
-
-#~ msgid "JPEG (Joint Picture Experts Group) Image"
-#~ msgstr "JPEG (Joint Picture Experts Group) Image"
-
-#~ msgid "Raw uLaw 8khz Audio support (PCM)"
-#~ msgstr "Raw uLaw 8khz Audio support (PCM)"
-
-#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
-#~ msgstr "load =&amp;gt; .so ; Raw aLaw 8khz PCM Audio support"
-
-#~ msgid "Raw Signed Linear Audio support (SLN)"
-#~ msgstr "Raw Signed Linear Audio support (SLN)"
-
-#~ msgid "Dialogic VOX (ADPCM) File Format"
-#~ msgstr "Dialogic VOX (ADPCM) File Format"
-
-#~ msgid "Microsoft WAV format (8000hz Signed Line"
-#~ msgstr "Microsoft WAV format (8000hz Signed Line"
-
-#~ msgid "Microsoft WAV format (Proprietary GSM)"
-#~ msgstr "Microsoft WAV format (Proprietary GSM)"
-
-#~ msgid "Caller ID related dialplan functions"
-#~ msgstr "Caller ID liên quan đến chức năng dialplan "
-
-#~ msgid "ENUM Functions"
-#~ msgstr "chức năng ENUM"
-
-#~ msgid "URI encoding / decoding functions"
-#~ msgstr "Chức năng URI encoding / decoding "
-
-#~ msgid "Asterisk Extension Language Compiler"
-#~ msgstr "Asterisk Extension Language Compiler"
-
-#~ msgid "Text Extension Configuration"
-#~ msgstr "Cấu hình Text Extension "
-
-#~ msgid "load => .so ; Builtin dialplan functions"
-#~ msgstr "load =&amp;gt; .so ; chức năng Builtin dialplan "
-
-#~ msgid "Loopback Switch"
-#~ msgstr "Loopback Switch"
-
-#~ msgid "Realtime Switch"
-#~ msgstr "Realtime Switch"
-
-#~ msgid "Outgoing Spool Support"
-#~ msgstr "Hỗ trợ outgoing spool"
-
-#~ msgid "Wil Cal U (Auto Dialer)"
-#~ msgstr "Wil Cal U (Auto Dialer)"
-
-#~ msgid "MySQL Config Resource"
-#~ msgstr "MySQL Config Resource"
-
-#~ msgid "ODBC Config Resource"
-#~ msgstr "ODBC Config Resource"
-
-#~ msgid "PGSQL Module"
-#~ msgstr "PGSQL Module"
-
-#~ msgid "Cryptographic Digital Signatures"
-#~ msgstr "Cryptographic Digital Signatures"
-
-#~ msgid "Call Parking Resource"
-#~ msgstr "Call Parking Resource"
-
-#~ msgid "Indications Configuration"
-#~ msgstr "Cấu hình indications"
-
-#~ msgid "Call Monitoring Resource"
-#~ msgstr "Call Monitoring Resource"
-
-#~ msgid "Music On Hold Resource"
-#~ msgstr "Music On Hold Resource"
-
-#~ msgid "ODBC Resource"
-#~ msgstr "ODBC Resource"
-
-#~ msgid "SMDI Module"
-#~ msgstr "SMDI Module"
-
-#~ msgid "SNMP Module"
-#~ msgstr "SNMP Module"
-
-#~ msgid "Music On Hold"
-#~ msgstr "Music On Hold"
-
-#~ msgid "Application"
-#~ msgstr "Ứng dụng"
-
-#~ msgid "Directory of Music"
-#~ msgstr "Thư mục music"
-
-#~ msgid "Option mode"
-#~ msgstr "Chế độ tùy chọn"
-
-#~ msgid "Random Play"
-#~ msgstr "Random Play"
-
-#~ msgid "DTMF mode"
-#~ msgstr "chế độ DTMF"
-
-#~ msgid "Primary domain identity for From: headers"
-#~ msgstr "Nhận dạng primary domain cho From: headers"
-
-#~ msgid "From user (required by many SIP providers)"
-#~ msgstr "Từ user (yêu cầu bởi nhiều nhà cung cấp SIP)"
-
-#~ msgid "Ring on incoming dialplan contexts"
-#~ msgstr "Ring on incoming dialplan contexts"
-
-#~ msgid "Allow Insecure for"
-#~ msgstr "Cho phép không an toàn cho"
-
-#~ msgid "Mailbox for MWI"
-#~ msgstr "Hộp thư cho MWI"
-
-#~ msgid "NAT between phone and Asterisk"
-#~ msgstr "NAT giữa điện thoại và Asterisk"
-
-#~ msgid "Check tags in headers"
-#~ msgstr "Kiểm tra tags trong headers"
-
-#~ msgid "Reply Timeout (ms) for down connection"
-#~ msgstr "Trả lời Timeout (ms) cho down kết nối"
-
-#~ msgid "Register connection"
-#~ msgstr "Đăng ký kết nối"
-
-#~ msgid "Dial own extension for mailbox"
-#~ msgstr "Gọi nhánh số cho hộp thư"
-
-#~ msgid "Client Type"
-#~ msgstr "Loại Client"
-
-#~ msgid "Username"
-#~ msgstr "Username"
-
-#~ msgid "Section sipgeneral"
-#~ msgstr "Section sipgeneral"
-
-#~ msgid "Allow codecs"
-#~ msgstr "Cho phép Codecs"
-
-#~ msgid "SIP realm"
-#~ msgstr "SIP realm"
-
-#~ msgid "Voicemail general options"
-#~ msgstr "Thư thoại tùy chọn tổng quát"
-
-#~ msgid "From Email address of server"
-#~ msgstr "Từ địa chỉ email của server"
-
-#~ msgid "Voice Mail boxes"
-#~ msgstr "Hộp thư thoại"
-
-#~ msgid "Email contains attachment"
-#~ msgstr "Email bao gồm attachment"
-
-#~ msgid "Email"
-#~ msgstr "Email"
-
-#~ msgid "Display Name"
-#~ msgstr "Tên display"
-
-#~ msgid "Password"
-#~ msgstr "Mật khẩu"
-
-#~ msgid "zone"
-#~ msgstr "zone"
-
-#~ msgid "Voice Zone settings"
-#~ msgstr "Cài đặt voice zone"
-
-#~ msgid "Message Format"
-#~ msgstr "Message Format"
diff --git a/applications/luci-app-asterisk/po/zh-cn/asterisk.po b/applications/luci-app-asterisk/po/zh-cn/asterisk.po
deleted file mode 100644
index 9ef2f1f584..0000000000
--- a/applications/luci-app-asterisk/po/zh-cn/asterisk.po
+++ /dev/null
@@ -1,171 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2012-04-02 19:34+0200\n"
-"Last-Translator: Anonymous Pootle User\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.4\n"
-
-#~ msgid "Asterisk General Options"
-#~ msgstr "Asterisk 基本选项"
-
-# test
-#~ msgid "AGI directory"
-#~ msgstr "AGI 目录"
-
-#~ msgid "Cache recorded sound files during recording"
-#~ msgstr "录音时缓存录音文件"
-
-#~ msgid "Debug Level"
-#~ msgstr "调试级别"
-
-#~ msgid "Disable some warnings"
-#~ msgstr "屏蔽部分警告"
-
-#~ msgid "Dump core on crash"
-#~ msgstr "系统崩溃时记录错误信息"
-
-#~ msgid "High Priority"
-#~ msgstr "高优先级"
-
-#~ msgid "Initialise Crypto"
-#~ msgstr "初始化加密"
-
-#~ msgid "Use Internal Timing"
-#~ msgstr "使用内部计时器"
-
-#~ msgid "Log directory"
-#~ msgstr "日志目录"
-
-#~ msgid "Maximum number of calls allowed"
-#~ msgstr "最大允许呼叫数"
-
-#~ msgid "Maximum load to stop accepting new calls"
-#~ msgstr "允许接受新呼叫的最大负载"
-
-#~ msgid "Disable console colors"
-#~ msgstr "禁用控制台色彩"
-
-#~ msgid "Sound files Cache directory"
-#~ msgstr "音效文件缓存目录"
-
-#~ msgid "The Group to run as"
-#~ msgstr "以此“组”权限运行"
-
-#~ msgid "The User to run as"
-#~ msgstr "以此“用户”身份运行"
-
-#~ msgid "Voicemail Spool directory"
-#~ msgstr "语音邮件缓存目录"
-
-#~ msgid "Prefix UniquID with system name"
-#~ msgstr "UniquID前加系统名做前缀"
-
-#~ msgid "Build transcode paths via SLINEAR, not directly"
-#~ msgstr "由SLINEAR间接建立转码路径"
-
-#~ msgid "Transmit SLINEAR silence while recording a channel"
-#~ msgstr "对频道录音时传送SLINEAR静默"
-
-#~ msgid "Verbose Level"
-#~ msgstr "详细级别"
-
-#~ msgid "Time Zone"
-#~ msgstr "时区"
-
-#~ msgid "Section dialplan"
-#~ msgstr "段内拨号计划"
-
-#~ msgid "include"
-#~ msgstr "包含"
-
-#~ msgid "Dialplan Extension"
-#~ msgstr "拨号计划 扩展"
-
-#~ msgid "Dialplan General Options"
-#~ msgstr "拨号计划 基本参数"
-
-#~ msgid "Allow transfer"
-#~ msgstr "允许 呼叫转移"
-
-#~ msgid "Clear global vars"
-#~ msgstr "清除全局变量"
-
-#~ msgid "Dialplan Goto"
-#~ msgstr "拨号计划至"
-
-#~ msgid "Dialplan Conference"
-#~ msgstr "会议拨号计划"
-
-#~ msgid "Dialplan Time"
-#~ msgstr "时间拨号计划"
-
-#~ msgid "Dialplan Voicemail"
-#~ msgstr "语音信箱拨号计划"
-
-#~ msgid "Dial Zones for Dialplan"
-#~ msgstr "适用拨号计划的拨号区域"
-
-#~ msgid "Prefix to add matching dialplans"
-#~ msgstr "用于匹配拨号计划的前缀"
-
-#~ msgid "Match International prefix"
-#~ msgstr "匹配的国际前缀"
-
-#~ msgid "localzone"
-#~ msgstr "本地区域"
-
-#~ msgid "Match plan"
-#~ msgstr "匹配计划"
-
-#~ msgid "Connection to use"
-#~ msgstr "使用连接"
-
-#~ msgid "Feature Key maps"
-#~ msgstr "特殊键映射"
-
-#~ msgid "Attended transfer key"
-#~ msgstr "加入传输键"
-
-#~ msgid "Blind transfer key"
-#~ msgstr "屏蔽传输键"
-
-#~ msgid "Key to Disconnect call"
-#~ msgstr "结束呼叫键"
-
-#~ msgid "Key to Park call"
-#~ msgstr "呼叫驻留键"
-
-#~ msgid "Parking Feature"
-#~ msgstr "驻留特性"
-
-#~ msgid "ADSI Park"
-#~ msgstr "ADSI驻留"
-
-#~ msgid "Attended transfer timeout (sec)"
-#~ msgstr "加入传输超时(秒)"
-
-#~ msgid "One touch record key"
-#~ msgstr "一键录制"
-
-#~ msgid "Email"
-#~ msgstr "Email"
-
-#~ msgid "Display Name"
-#~ msgstr "显示名字"
-
-#~ msgid "Password"
-#~ msgstr "密码"
-
-#~ msgid "zone"
-#~ msgstr "区"
-
-#~ msgid "Message Format"
-#~ msgstr "消息格式"
diff --git a/applications/luci-app-asterisk/po/zh-tw/asterisk.po b/applications/luci-app-asterisk/po/zh-tw/asterisk.po
deleted file mode 100644
index c7eef9d1bd..0000000000
--- a/applications/luci-app-asterisk/po/zh-tw/asterisk.po
+++ /dev/null
@@ -1,13 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-06 23:52+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Translate Toolkit 1.9.0\n"
diff --git a/applications/luci-app-asterisk/root/etc/config/asterisk b/applications/luci-app-asterisk/root/etc/config/asterisk
deleted file mode 100644
index 248409793c..0000000000
--- a/applications/luci-app-asterisk/root/etc/config/asterisk
+++ /dev/null
@@ -1,231 +0,0 @@
-config 'asterisk'
- option 'verbose' 3
- option 'debug' 3
- option 'zone' 'Australia/Perth'
-
-config 'hardware' 'reboot'
- option 'method' 'web'
- option 'param' 'http://ata.lan/admin/reboot'
-
-config 'feature' 'park'
- option 'parkenabled' 'yes'
- option 'parkext' '700'
- option 'parkpos' '701-720'
- option 'context' 'parkedcalls'
- option 'parkingtime' '45'
- option 'courtesytone' 'beep'
- option 'parkedplay' 'caller'
- option 'adsipark' 'yes'
- option 'findslot' 'first'
- option 'parkedmusicclass' 'default'
- option 'transferdigittimeout' '3'
- option 'xfersound' 'beep'
- option 'xferfailsound' 'beeperr'
- option 'pickupexten' '"*8"'
- option 'featuredigittimeout' '500'
- option 'atxfernoanswertimeout' '15'
-
-config 'feature' 'map'
- option 'blindxfer' '#1'
- option 'disconnect' '*0'
- option 'automon' '*1'
- option 'atxfer' '#2'
- option 'parkcall' '#30'
-
-config 'sipgeneral'
- option 'realm' 'sip.mydomain.net'
- option 'allow' 'alaw'
- option 'extension' '102'
-
-config 'module'
- option 'res_config_mysql' 'no'
- option 'res_crypto' 'auto'
- option 'chan_iax2' 'yes'
-
-config 'sip' 'PAP2T'
- option 'type' 'friend'
- option 'extension' '101'
- option 'username' 'PAP2T'
- option 'secret' 'mypass'
- option 'port' '5061'
- option 'host' ''
- option 'dtmfmode' 'rfc2833'
- option 'insecure' 'very'
- option 'context' 'internal'
- option 'mailbox' '1001@default'
- option 'nat' 'no'
- option 'canreinvite' 'nonat'
- option 'selfmailbox' 'yes'
- option 'incoming' 'provider_inbound'
-
-config 'sip' 'PAP2T2'
- option 'type' 'friend'
- option 'extension' '101'
- option 'username' 'PAP2T2'
- option 'secret' 'mysecret'
- option 'port' '5060'
- option 'host' ''
- option 'dtmfmode' 'rfc2833'
- option 'insecure' 'very'
- option 'context' 'internal'
- option 'mailbox' '1001@default'
- option 'nat' 'no'
- option 'canreinvite' 'nonat'
- option 'selfmailbox' 'yes'
- option 'incoming' 'provider_inbound'
-
-config 'sip' 'providerphone'
- option 'provider' 'yes'
- option 'type' 'friend'
- option 'timeout' '55'
- option 'internationalprefix' '0011'
- option 'alwaysinternational' 'no'
- option 'countrycode' '63'
- option 'register' 'yes'
- option 'host' '200.200.200.200'
- option 'username' '0899999999'
- option 'fromuser' '0899999999'
- option 'secret' 'mysecret'
- option 'fromdomain' 'providerphone.provider.net.au'
- option 'context' 'provider_inbound'
- option 'canreinvite' 'no'
- option 'nat' 'yes'
- option 'qualify' 'yes'
- option 'insecure' 'very'
- option 'pedantic' 'no'
- option 'qualify' '1000'
-
-config 'iaxgeneral'
- option 'static' 'yes'
- option 'writeprotect' 'no'
- option 'canreinvite' 'no'
- option 'allow' 'ulaw,gsm'
-
-config 'iax' 'nell'
- option 'type' 'friend'
- option 'extension' '108'
- option 'host' ''
- option 'username' 'nell'
- option 'secret' 'mypass'
- option 'context' 'internal'
-
-config 'iax' 'iax_vista'
- option 'extension' '106'
- option 'type' 'friend'
- option 'host' ''
- option 'username' 'vista'
- option 'secret' 'mysecret'
- option 'context' 'internal'
-
-config 'iax' 'sam'
- option 'type' 'friend'
- option 'extension' '103'
- option 'host' ''
- option 'username' 'sam'
- option 'secret' 'mysecret'
- option 'context' 'internal'
-
-config 'voicegeneral'
- option 'serveremail' 'voice@sip.mydomain.net'
-
-config 'voicemail'
- option 'number' '1001'
- option 'context' 'default'
- option 'password' '0000'
- option 'name' 'Family'
- option 'email' 'us@mydomain.net'
- option 'zone' 'wa'
- option 'attach' 'no'
-
-config 'voicezone' 'wa'
- option 'zone' 'Australia/Perth'
- option 'message' 'Q IMp'
-
-config 'voicezone' 'military'
- option 'zone' 'Zulu'
- option 'message' '"vm-received" q "digits/at" H N "hours" "phonetic/z_p"'
-
-config 'incominggeneral'
- option 'allowtransfer' 'no'
- option 'timeout' '20'
- option 'answerfirst' 'no'
- option 'mailbox' '1001@default'
-
-config 'dialplangeneral'
- option 'static' 'yes'
- option 'writeprotect' 'no'
- option 'canreinvite' 'no'
- option 'clearglobalvars' 'no'
- option 'allowtransfer' 'no'
-
-config 'dialplan' 'internal'
- option 'include' 'localcall interstate smartnumber emergency extensions'
-
-config 'dialplanvoice'
- option 'dialplan' 'internal'
- option 'extension' '1001'
- option 'voicecontext' 'default'
- option 'voicebox' '1001'
-
-config 'dialplansaytime'
- option 'dialplan' 'internal'
- option 'extension' '108'
-
-config 'dialplanmeetme'
- option 'dialplan' 'internal'
- option 'extension' '109'
- option 'room' '101'
-
-config 'dialplanmeetme'
- option 'dialplan' 'internal'
- option 'extension' '1009'
- option 'room' ''
-
-config 'dialplan' 'localinternational'
- option 'include' 'mobile interstate'
-
-config 'dialzone' 'interstate'
- option 'uses' 'SIP/providerphone'
- option 'match' '0[235-8]NXXXXXXX'
- option 'localprefix' '0'
-
-config 'dialzone' 'mobile'
- option 'uses' 'SIP/providerphone'
- option 'match' '04XXXXXXXX'
- option 'localprefix' '0'
-
-config 'dialzone' 'smartnumber'
- option 'uses' 'SIP/providerphone'
- option 'match' '1[835]00.'
- option 'match' '13ZXXX'
-
-config 'dialzone' 'emergency'
- option 'uses' 'SIP/providerphone'
- option 'match' '000'
- option 'match' '112'
-
-config 'dialzone' 'localcall'
- option 'uses' 'SIP/providerphone'
- option 'match' 'NXXXXXXX'
- option 'addprefix' '08'
- option 'localprefix' '0'
-
-config 'dialzone' 'international'
- option 'uses' 'SIP/providerphone'
- option 'international' '0011,+'
- option 'localzone' 'localinternational'
- option 'localprefix' '0'
- option 'addprefix' ''
-
-config 'meetmegeneral'
- option 'audiobuffers' '32'
-
-config 'meetme'
- option 'room' '101'
- option 'pin' ''
- option 'adminpin' ''
-
-config 'moh' 'default'
- option 'mode' 'files'
- option 'directory' '/opt/moh'
- option 'random' 'no'
diff --git a/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk b/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk
deleted file mode 100755
index e45819f602..0000000000
--- a/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-uci -q batch <<-EOF >/dev/null
- delete ucitrack.@asterisk[-1]
- add ucitrack asterisk
- set ucitrack.@asterisk[-1].init=asterisk
- commit ucitrack
-EOF
-
-rm -f /tmp/luci-indexcache
-exit 0
diff --git a/applications/luci-app-banip/luasrc/view/banip/banip_css.htm b/applications/luci-app-banip/luasrc/view/banip/banip_css.htm
index 807102452c..86efcc5f20 100644
--- a/applications/luci-app-banip/luasrc/view/banip/banip_css.htm
+++ b/applications/luci-app-banip/luasrc/view/banip/banip_css.htm
@@ -1,6 +1,8 @@
<style type="text/css">
textarea
{
+ width: 100%;
+ height: 450px;
border: 1px solid #cccccc;
padding: 5px;
font-size: 12px;
@@ -51,16 +53,32 @@
.cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
.table.cbi-section-table input[type="text"],
.cbi-dynlist > .item,
- .table.cbi-section-table input
+ .table.cbi-section-table input,
+ .cbi-dynlist
{
+ display: inline-block;
width: 6em;
+ margin: 1px;
+ }
+
+ .td.cbi-value-field .cbi-button
+ {
+ width: auto;
+ margin: 1px 0 1px -2px;
+ }
+
+ .btn,
+ .cbi-button,
+ .item::after
+ {
+ -webkit-appearance: menulist;
}
.cbi-input-checkbox
{
height: 1em;
}
-
+
.cbi-input-text
{
text-align: left;
@@ -68,9 +86,9 @@
outline: none;
box-shadow: none;
background: transparent;
- width: 4em;
+ width: 6em;
}
-
+
.runtime
{
color: #37c;
@@ -79,7 +97,7 @@
width: 100%;
padding-top: 0.5rem;
}
-
+
.ripe_desc
{
font-style: italic;
@@ -88,4 +106,12 @@
height: 20px;
margin: 2px 2px;
}
+
+ .button_running
+ {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin: 0 5px;
+ }
</style>
diff --git a/applications/luci-app-banip/luasrc/view/banip/runtime.htm b/applications/luci-app-banip/luasrc/view/banip/runtime.htm
index 041fcb143c..65a58bd374 100644
--- a/applications/luci-app-banip/luasrc/view/banip/runtime.htm
+++ b/applications/luci-app-banip/luasrc/view/banip/runtime.htm
@@ -124,7 +124,7 @@ function btn_action(action)
<label class="cbi-value-title" for="button_1"><%:Refresh IPSets%></label>
<div class="cbi-value-field">
<input class="cbi-button cbi-button-apply" id="btn1" type="button" name="do_refresh" value="<%:Refresh%>" onclick="btn_action(this)" />
- <span id="btn1_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
+ <span id="btn1_running" class="btn_running"></span>
</div>
</div>
diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile
index 9262afcf84..eb3a77aee7 100644
--- a/applications/luci-app-ddns/Makefile
+++ b/applications/luci-app-ddns/Makefile
@@ -23,7 +23,7 @@ PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
-LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts
+LUCI_DEPENDS:=+luci-lib-ipkg +luci-mod-admin-full +ddns-scripts
# LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
diff --git a/applications/luci-app-dynapoint/Makefile b/applications/luci-app-dynapoint/Makefile
index 83512dba5e..e405cc41f1 100644
--- a/applications/luci-app-dynapoint/Makefile
+++ b/applications/luci-app-dynapoint/Makefile
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for DynaPoint
-LUCI_DEPENDS:=+dynapoint
+LUCI_DEPENDS:=+luci-lib-ipkg +dynapoint
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Tobias Ilte <tobias.ilte@campus.tu-berlin.de>
diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm
index f48599b505..1bb86821ec 100644
--- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm
+++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm
@@ -71,7 +71,7 @@
</div>
<script type="text/javascript">//<![CDATA[
- cbi_bind(document.getElementById('_newfwd.extport'), 'blur',
+ document.getElementById('_newfwd.extport').addEventListener('blur',
function() {
var n = document.getElementById('_newfwd.name');
var p = document.getElementById('_newfwd.proto');
diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
index 82168712ae..c02fc20f9e 100644
--- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
+++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
@@ -72,7 +72,7 @@
<% if #zones > 0 then %>
<script type="text/javascript">//<![CDATA[
cbi_validate_field('_newopen.extport', true, 'list(neg(portrange))');
- cbi_bind(document.getElementById('_newopen.extport'), 'blur',
+ document.getElementById('_newopen.extport').addEventListener('blur',
function() {
var n = document.getElementById('_newopen.name');
var p = document.getElementById('_newopen.proto');
@@ -100,8 +100,5 @@
}
}
});
-
-
- cbi_validate_field('cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>', true, 'uciname');
//]]></script>
<% end %>
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
index d8f90e1e25..f54b6e76c3 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
@@ -3,22 +3,11 @@
local net = require "luci.model.network".init()
+local s, m, mask, rtmon, rtlookup
m = Map("mwan3", translate("MWAN - Globals"))
s = m:section(NamedSection, "globals", "globals", nil)
-n = s:option(ListValue, "local_source",
- translate("Local source interface"),
- translate("Use the IP address of this interface as source IP " ..
- "address for traffic initiated by the router itself"))
-n:value("none")
-n.default = "none"
-for _, net in ipairs(net:get_networks()) do
- if net:name() ~= "loopback" then
- n:value(net:name())
- end
-end
-n.rmempty = false
mask = s:option(
Value,
@@ -28,4 +17,26 @@ mask = s:option(
mask.datatype = "hex(4)"
mask.default = "0xff00"
+rtmon = s:option(
+ Value,
+ "rtmon_interval",
+ translate("Update interval"),
+ translate("How often should rtmon update the interface routing table"))
+rtmon.datatype = "integer"
+rtmon.default = "5"
+rtmon:value("1", translatef("%d second", 1))
+rtmon:value("3", translatef("%d seconds", 3))
+rtmon:value("5", translatef("%d seconds", 5))
+rtmon:value("7", translatef("%d seconds", 7))
+rtmon:value("10", translatef("%d seconds", 10))
+
+rtlookup = s:option(DynamicList,
+ "rt_table_lookup",
+ translate("Routing table lookup"),
+ translate("Also scan this Routing table for connected networks"))
+rtlookup.datatype = "integer"
+rtlookup:value("1", translatef("Routing table %d", 1))
+rtlookup:value("2", translatef("Routing table %d", 2))
+rtlookup:value("220", translatef("Routing table %d", 220))
+
return m
diff --git a/applications/luci-app-opkg/Makefile b/applications/luci-app-opkg/Makefile
new file mode 100644
index 0000000000..5763e9115e
--- /dev/null
+++ b/applications/luci-app-opkg/Makefile
@@ -0,0 +1,14 @@
+#
+# Copyright (C) 2018 Jo-Philipp Wich <jo@mein.io>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=OPKG package management application
+LUCI_DEPENDS:=+opkg
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-opkg/luasrc/controller/opkg.lua b/applications/luci-app-opkg/luasrc/controller/opkg.lua
new file mode 100644
index 0000000000..74aa166184
--- /dev/null
+++ b/applications/luci-app-opkg/luasrc/controller/opkg.lua
@@ -0,0 +1,100 @@
+-- Copyright 2018 Jo-Philipp Wich <jo@mein.io>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.opkg", package.seeall)
+
+function index()
+ entry({"admin", "system", "opkg"}, template("opkg"), _("Software"), 30)
+ entry({"admin", "system", "opkg", "list"}, call("action_list")).leaf = true
+ entry({"admin", "system", "opkg", "exec"}, post("action_exec")).leaf = true
+ entry({"admin", "system", "opkg", "statvfs"}, call("action_statvfs")).leaf = true
+ entry({"admin", "system", "opkg", "config"}, post_on({ data = true }, "action_config")).leaf = true
+end
+
+function action_list(mode)
+ local cmd
+
+ if mode == "installed" then
+ cmd = { "/bin/cat", "/usr/lib/opkg/status" }
+ else
+ cmd = { "/bin/sh", "-c", [[find /tmp/opkg-lists/ -type f '!' -name '*.sig' | xargs -r gzip -cd]] }
+ end
+
+ luci.http.prepare_content("text/plain; charset=utf-8")
+ luci.sys.process.exec(cmd, luci.http.write)
+end
+
+function action_exec(command, package)
+ local sys = require "luci.sys"
+ local cmd = { "/bin/opkg", "--force-removal-of-dependent-packages", "--force-overwrite" }
+ local pkg = luci.http.formvalue("package")
+
+ if luci.http.formvalue("autoremove") == "true" then
+ cmd[#cmd + 1] = "--autoremove"
+ end
+
+ cmd[#cmd + 1] = command
+
+ if pkg then
+ cmd[#cmd + 1] = pkg
+ end
+
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(sys.process.exec(cmd, true, true))
+end
+
+function action_statvfs()
+ local fs = require "nixio.fs"
+
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(fs.statvfs("/") or {})
+end
+
+function action_config()
+ local fs = require "nixio.fs"
+ local js = require "luci.jsonc"
+ local data = luci.http.formvalue("data")
+
+ if data then
+ data = js.parse(data)
+
+ if not data then
+ luci.http.status(400, "Bad Request")
+ return
+ end
+
+ local file, content
+ for file, content in pairs(data) do
+ if type(content) ~= "string" or
+ (file ~= "opkg.conf" and not file:match("^opkg/[^/]+%.conf$"))
+ then
+ luci.http.status(400, "Bad Request")
+ return
+ end
+
+ local path = "/etc/%s" % file
+ if not fs.access(path, "w") then
+ luci.http.status(403, "Permission denied")
+ return
+ end
+
+ fs.writefile(path, content:gsub("\r\n", "\n"))
+ end
+
+ luci.http.status(204, "Saved")
+ else
+ local rv = { ["opkg.conf"] = fs.readfile("/etc/opkg.conf") }
+ local entries = fs.dir("/etc/opkg")
+ if entries then
+ local entry
+ for entry in entries do
+ if entry:match("%.conf$") then
+ rv["opkg/%s" % entry] = fs.readfile("/etc/opkg/%s" % entry)
+ end
+ end
+ end
+
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(rv)
+ end
+end
diff --git a/applications/luci-app-opkg/luasrc/view/opkg.htm b/applications/luci-app-opkg/luasrc/view/opkg.htm
new file mode 100644
index 0000000000..29fe3961ae
--- /dev/null
+++ b/applications/luci-app-opkg/luasrc/view/opkg.htm
@@ -0,0 +1,958 @@
+<%#
+ Copyright 2018 Jo-Philipp Wich <jo@mein.io>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<style type="text/css">
+ .controls {
+ display: flex;
+ margin: .5em 0 1em 0;
+ flex-wrap: wrap;
+ justify-content: space-around;
+ }
+
+ .controls > * {
+ padding: .25em;
+ white-space: nowrap;
+ flex: 1 1 33%;
+ box-sizing: border-box;
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .controls > *:first-child,
+ .controls > * > label {
+ flex-basis: 100%;
+ min-width: 250px;
+ }
+
+ .controls > * > .btn {
+ flex-basis: 20px;
+ text-align: center;
+ }
+
+ .controls > * > * {
+ flex-grow: 1;
+ align-self: center;
+ }
+
+ .controls > div > input {
+ width: auto;
+ }
+
+ .td.version,
+ .td.size {
+ white-space: nowrap;
+ }
+
+ ul.deps, ul.deps ul, ul.errors {
+ margin-left: 1em;
+ }
+
+ ul.deps li, ul.errors li {
+ list-style: none;
+ }
+
+ ul.deps li:before {
+ content: "↳";
+ display: inline-block;
+ width: 1em;
+ margin-left: -1em;
+ }
+
+ ul.deps li > span {
+ white-space: nowrap;
+ }
+
+ ul.errors li {
+ color: #c44;
+ font-size: 90%;
+ font-weight: bold;
+ padding-left: 1.5em;
+ }
+
+ ul.errors li:before {
+ content: "⚠";
+ display: inline-block;
+ width: 1.5em;
+ margin-left: -1.5em;
+ }
+</style>
+
+<script type="text/javascript">//<![CDATA[
+ var packages = {
+ available: { providers: {}, pkgs: {} },
+ installed: { providers: {}, pkgs: {} }
+ };
+
+ var currentDisplayMode = 'available', currentDisplayRows = [];
+
+ function parseList(s, dest)
+ {
+ var re = /([^\n]*)\n/g,
+ pkg = null, key = null, val = null, m;
+
+ while ((m = re.exec(s)) !== null) {
+ if (m[1].match(/^\s(.*)$/)) {
+ if (pkg !== null && key !== null && val !== null)
+ val += '\n' + RegExp.$1.trim();
+
+ continue;
+ }
+
+ if (key !== null && val !== null) {
+ switch (key) {
+ case 'package':
+ pkg = { name: val };
+ break;
+
+ case 'depends':
+ case 'provides':
+ var list = val.split(/\s*,\s*/);
+ if (list.length !== 1 || list[0].length > 0)
+ pkg[key] = list;
+ break;
+
+ case 'installed-time':
+ pkg.installtime = new Date(+val * 1000);
+ break;
+
+ case 'installed-size':
+ pkg.installsize = +val;
+ break;
+
+ case 'status':
+ var stat = val.split(/\s+/),
+ mode = stat[1],
+ installed = stat[2];
+
+ switch (mode) {
+ case 'user':
+ case 'hold':
+ pkg[mode] = true;
+ break;
+ }
+
+ switch (installed) {
+ case 'installed':
+ pkg.installed = true;
+ break;
+ }
+ break;
+
+ case 'essential':
+ if (val === 'yes')
+ pkg.essential = true;
+ break;
+
+ case 'size':
+ pkg.size = +val;
+ break;
+
+ case 'architecture':
+ case 'auto-installed':
+ case 'filename':
+ case 'sha256sum':
+ case 'section':
+ break;
+
+ default:
+ pkg[key] = val;
+ break;
+ }
+
+ key = val = null;
+ }
+
+ if (m[1].trim().match(/^([\w-]+)\s*:(.+)$/)) {
+ key = RegExp.$1.toLowerCase();
+ val = RegExp.$2.trim();
+ }
+ else {
+ dest.pkgs[pkg.name] = pkg;
+
+ var provides = dest.providers[pkg.name] ? [] : [ pkg.name ];
+
+ if (pkg.provides)
+ provides.push.apply(provides, pkg.provides);
+
+ provides.forEach(function(p) {
+ dest.providers[p] = dest.providers[p] || [];
+ dest.providers[p].push(pkg);
+ });
+ }
+ }
+ }
+
+ function display(pattern)
+ {
+ var src = packages[currentDisplayMode === 'updates' ? 'installed' : currentDisplayMode],
+ table = document.querySelector('#packages'),
+ pager = document.querySelector('#pager');
+
+ currentDisplayRows.length = 0;
+
+ if (typeof(pattern) === 'string' && pattern.length > 0)
+ pattern = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'ig');
+
+ for (var name in src.pkgs) {
+ var pkg = src.pkgs[name],
+ desc = pkg.description || '',
+ altsize = null;
+
+ if (!pkg.size && packages.available.pkgs[name])
+ altsize = packages.available.pkgs[name].size;
+
+ if (!desc && packages.available.pkgs[name])
+ desc = packages.available.pkgs[name].description || '';
+
+ desc = desc.split(/\n/);
+ desc = desc[0].trim() + (desc.length > 1 ? '…' : '');
+
+ if ((pattern instanceof RegExp) &&
+ !name.match(pattern) && !desc.match(pattern))
+ continue;
+
+ var btn, ver;
+
+ if (currentDisplayMode === 'updates') {
+ var avail = packages.available.pkgs[name];
+ if (!avail || avail.version === pkg.version)
+ continue;
+
+ ver = '%s » %s'.format(
+ truncateVersion(pkg.version || '-'),
+ truncateVersion(avail.version || '-'));
+
+ btn = E('div', {
+ 'class': 'btn cbi-button-positive',
+ 'data-package': name,
+ 'click': handleInstall
+ }, _('Upgrade…'));
+ }
+ else if (currentDisplayMode === 'installed') {
+ ver = truncateVersion(pkg.version || '-');
+ btn = E('div', {
+ 'class': 'btn cbi-button-negative',
+ 'data-package': name,
+ 'click': handleRemove
+ }, _('Remove'));
+ }
+ else {
+ ver = truncateVersion(pkg.version || '-');
+
+ if (!packages.installed.pkgs[name])
+ btn = E('div', {
+ 'class': 'btn cbi-button-action',
+ 'data-package': name,
+ 'click': handleInstall
+ }, _('Install…'));
+ else if (packages.installed.pkgs[name].version != pkg.version)
+ btn = E('div', {
+ 'class': 'btn cbi-button-positive',
+ 'data-package': name,
+ 'click': handleInstall
+ }, _('Upgrade…'));
+ else
+ btn = E('div', {
+ 'class': 'btn cbi-button-neutral',
+ 'disabled': 'disabled'
+ }, _('Installed'));
+ }
+
+ name = '%h'.format(name);
+ desc = '%h'.format(desc || '-');
+
+ if (pattern) {
+ name = name.replace(pattern, '<ins>$&</ins>');
+ desc = desc.replace(pattern, '<ins>$&</ins>');
+ }
+
+ currentDisplayRows.push([
+ name,
+ ver,
+ pkg.size ? '%.1024mB'.format(pkg.size)
+ : (altsize ? '~%.1024mB'.format(altsize) : '-'),
+ desc,
+ btn
+ ]);
+ }
+
+ currentDisplayRows.sort(function(a, b) {
+ if (a[0] < b[0])
+ return -1;
+ else if (a[0] > b[0])
+ return 1;
+ else
+ return 0;
+ });
+
+ pager.parentNode.style.display = '';
+ pager.setAttribute('data-offset', 100);
+ handlePage({ target: pager.querySelector('.prev') });
+ }
+
+ function handlePage(ev)
+ {
+ var filter = document.querySelector('input[name="filter"]'),
+ pager = ev.target.parentNode,
+ offset = +pager.getAttribute('data-offset'),
+ next = ev.target.classList.contains('next');
+
+ if ((next && (offset + 100) >= currentDisplayRows.length) ||
+ (!next && (offset < 100)))
+ return;
+
+ offset += next ? 100 : -100;
+ pager.setAttribute('data-offset', offset);
+ pager.querySelector('.text').firstChild.data = currentDisplayRows.length
+ ? _('Displaying %d-%d of %d').format(1 + offset, Math.min(offset + 100, currentDisplayRows.length), currentDisplayRows.length)
+ : _('No packages');
+
+ if (offset < 100)
+ pager.querySelector('.prev').setAttribute('disabled', 'disabled');
+ else
+ pager.querySelector('.prev').removeAttribute('disabled');
+
+ if ((offset + 100) >= currentDisplayRows.length)
+ pager.querySelector('.next').setAttribute('disabled', 'disabled');
+ else
+ pager.querySelector('.next').removeAttribute('disabled');
+
+ var placeholder = _('No information available');
+
+ if (filter.value)
+ placeholder = [
+ E('span', {}, _('No packages matching "<strong>%h</strong>".').format(filter.value)), ' (',
+ E('a', { href: '#', onclick: 'handleReset(event)' }, _('Reset')), ')'
+ ];
+
+ cbi_update_table('#packages', currentDisplayRows.slice(offset, offset + 100),
+ placeholder);
+ }
+
+ function handleMode(ev)
+ {
+ var tab = findParent(ev.target, 'li');
+ if (tab.getAttribute('data-mode') === currentDisplayMode)
+ return;
+
+ tab.parentNode.querySelectorAll('li').forEach(function(li) {
+ li.classList.remove('cbi-tab');
+ li.classList.add('cbi-tab-disabled');
+ });
+
+ tab.classList.remove('cbi-tab-disabled');
+ tab.classList.add('cbi-tab');
+
+ currentDisplayMode = tab.getAttribute('data-mode');
+
+ display(document.querySelector('input[name="filter"]').value);
+
+ ev.target.blur();
+ ev.preventDefault();
+ }
+
+ function orderOf(c)
+ {
+ if (c === '~')
+ return -1;
+ else if (c === '' || c >= '0' && c <= '9')
+ return 0;
+ else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
+ return c.charCodeAt(0);
+ else
+ return c.charCodeAt(0) + 256;
+ }
+
+ function compareVersion(val, ref)
+ {
+ var vi = 0, ri = 0,
+ isdigit = { 0:1, 1:1, 2:1, 3:1, 4:1, 5:1, 6:1, 7:1, 8:1, 9:1 };
+
+ val = val || '';
+ ref = ref || '';
+
+ while (vi < val.length || ri < ref.length) {
+ var first_diff = 0;
+
+ while ((vi < val.length && !isdigit[val.charAt(vi)]) ||
+ (ri < ref.length && !isdigit[ref.charAt(ri)])) {
+ var vc = orderOf(val.charAt(vi)), rc = orderOf(ref.charAt(ri));
+ if (vc !== rc)
+ return vc - rc;
+
+ vi++; ri++;
+ }
+
+ while (val.charAt(vi) === '0')
+ vi++;
+
+ while (ref.charAt(ri) === '0')
+ ri++;
+
+ while (isdigit[val.charAt(vi)] && isdigit[ref.charAt(ri)]) {
+ first_diff = first_diff || (val.charCodeAt(vi) - ref.charCodeAt(ri));
+ vi++; ri++;
+ }
+
+ if (isdigit[val.charAt(vi)])
+ return 1;
+ else if (isdigit[ref.charAt(ri)])
+ return -1;
+ else if (first_diff)
+ return first_diff;
+ }
+
+ return 0;
+ }
+
+ function versionSatisfied(ver, ref, vop)
+ {
+ var r = compareVersion(ver, ref);
+
+ switch (vop) {
+ case '<':
+ case '<=':
+ return r <= 0;
+
+ case '>':
+ case '>=':
+ return r >= 0;
+
+ case '<<':
+ return r < 0;
+
+ case '>>':
+ return r > 0;
+
+ case '=':
+ return r == 0;
+ }
+
+ return false;
+ }
+
+ function pkgStatus(pkg, vop, ver, info)
+ {
+ info.errors = info.errors || [];
+ info.install = info.install || [];
+
+ if (pkg.installed) {
+ if (vop && !versionSatisfied(pkg.version, ver, vop)) {
+ var repl = null;
+
+ (packages.available.providers[pkg.name] || []).forEach(function(p) {
+ if (!repl && versionSatisfied(p.version, ver, vop))
+ repl = p;
+ });
+
+ if (repl) {
+ info.install.push(repl);
+ return E('span', {
+ 'class': 'label',
+ 'data-tooltip': _('Requires update to %h %h')
+ .format(repl.name, repl.version)
+ }, _('Needs upgrade'));
+ }
+
+ info.errors.push(_('The installed version of package <em>%h</em> is not compatible, require %s while %s is installed.').format(pkg.name, truncateVersion(ver, vop), truncateVersion(pkg.version)));
+
+ return E('span', {
+ 'class': 'label warning',
+ 'data-tooltip': _('Require version %h %h,\ninstalled %h')
+ .format(vop, ver, pkg.version)
+ }, _('Version incompatible'));
+ }
+
+ return E('span', { 'class': 'label notice' }, _('Installed'));
+ }
+ else if (!pkg.missing) {
+ if (!vop || versionSatisfied(pkg.version, ver, vop)) {
+ info.install.push(pkg);
+ return E('span', { 'class': 'label' }, _('Not installed'));
+ }
+
+ info.errors.push(_('The repository version of package <em>%h</em> is not compatible, require %s but only %s is available.')
+ .format(pkg.name, truncateVersion(ver, vop), truncateVersion(pkg.version)));
+
+ return E('span', {
+ 'class': 'label warning',
+ 'data-tooltip': _('Require version %h %h,\ninstalled %h')
+ .format(vop, ver, pkg.version)
+ }, _('Version incompatible'));
+ }
+ else {
+ info.errors.push(_('Required dependency package <em>%h</em> is not available in any repository.').format(pkg.name));
+
+ return E('span', { 'class': 'label warning' }, _('Not available'));
+ }
+ }
+
+ function renderDependencyItem(dep, info)
+ {
+ var li = E('li'),
+ vop = dep.version ? dep.version[0] : null,
+ ver = dep.version ? dep.version[1] : null,
+ depends = [];
+
+ for (var i = 0; dep.pkgs && i < dep.pkgs.length; i++) {
+ var pkg = packages.installed.pkgs[dep.pkgs[i]] ||
+ packages.available.pkgs[dep.pkgs[i]] ||
+ { name: dep.name };
+
+ if (i > 0)
+ li.appendChild(document.createTextNode(' | '));
+
+ var text = pkg.name;
+
+ if (pkg.installsize)
+ text += ' (%.1024mB)'.format(pkg.installsize);
+ else if (pkg.size)
+ text += ' (~%.1024mB)'.format(pkg.size);
+
+ li.appendChild(E('span', { 'data-tooltip': pkg.description },
+ [ text, ' ', pkgStatus(pkg, vop, ver, info) ]));
+
+ (pkg.depends || []).forEach(function(d) {
+ if (depends.indexOf(d) === -1)
+ depends.push(d);
+ });
+ }
+
+ if (!li.firstChild)
+ li.appendChild(E('span', {},
+ [ dep.name, ' ',
+ pkgStatus({ name: dep.name, missing: true }, vop, ver, info) ]));
+
+ var subdeps = renderDependencies(depends, info);
+ if (subdeps)
+ li.appendChild(subdeps);
+
+ return li;
+ }
+
+ function renderDependencies(depends, info)
+ {
+ var deps = depends || [],
+ items = [];
+
+ info.seen = info.seen || [];
+
+ for (var i = 0; i < deps.length; i++) {
+ if (deps[i] === 'libc')
+ continue;
+
+ if (deps[i].match(/^(.+)\s+\((<=|<|>|>=|=|<<|>>)(.+)\)$/)) {
+ dep = RegExp.$1.trim();
+ vop = RegExp.$2.trim();
+ ver = RegExp.$3.trim();
+ }
+ else {
+ dep = deps[i].trim();
+ vop = ver = null;
+ }
+
+ if (info.seen[dep])
+ continue;
+
+ var pkgs = [];
+
+ (packages.installed.providers[dep] || []).forEach(function(p) {
+ if (pkgs.indexOf(p.name) === -1) pkgs.push(p.name);
+ });
+
+ (packages.available.providers[dep] || []).forEach(function(p) {
+ if (pkgs.indexOf(p.name) === -1) pkgs.push(p.name);
+ });
+
+ info.seen[dep] = {
+ name: dep,
+ pkgs: pkgs,
+ version: [vop, ver]
+ };
+
+ items.push(renderDependencyItem(info.seen[dep], info));
+ }
+
+ if (items.length)
+ return E('ul', { 'class': 'deps' }, items);
+
+ return null;
+ }
+
+ function truncateVersion(v, op)
+ {
+ v = v.replace(/\b(([a-f0-9]{8})[a-f0-9]{24,32})\b/,
+ '<span data-tooltip="$1">$2…</span>');
+
+ if (!op || op === '=')
+ return v;
+
+ return '%h %h'.format(op, v);
+ }
+
+ function handleReset(ev)
+ {
+ var filter = document.querySelector('input[name="filter"]');
+
+ filter.value = '';
+ display();
+ }
+
+ function handleInstall(ev)
+ {
+ var name = ev.target.getAttribute('data-package'),
+ pkg = packages.available.pkgs[name],
+ depcache = {},
+ size;
+
+ if (pkg.installsize)
+ size = _('~%.1024mB installed').format(pkg.installsize);
+ else if (pkg.size)
+ size = _('~%.1024mB compressed').format(pkg.size);
+ else
+ size = _('unknown');
+
+ var deps = renderDependencies(pkg.depends, depcache),
+ tree = null, errs = null, inst = null, desc = null;
+
+ if (depcache.errors && depcache.errors.length) {
+ errs = E('ul', { 'class': 'errors' });
+ depcache.errors.forEach(function(err) {
+ errs.appendChild(E('li', {}, err));
+ });
+ }
+
+ var totalsize = pkg.installsize || pkg.size || 0,
+ totalpkgs = 1;
+
+ if (depcache.install && depcache.install.length)
+ depcache.install.forEach(function(ipkg) {
+ totalsize += ipkg.installsize || ipkg.size || 0;
+ totalpkgs++;
+ });
+
+ inst = E('p', {},
+ _('Require approx. %.1024mB size for %d package(s) to install.')
+ .format(totalsize, totalpkgs));
+
+ if (deps) {
+ tree = E('li', '<strong>%s:</strong>'.format(_('Dependencies')));
+ tree.appendChild(deps);
+ }
+
+ if (pkg.description) {
+ desc = E('div', {}, [
+ E('h5', {}, _('Description')),
+ E('p', {}, pkg.description)
+ ]);
+ }
+
+ showModal(_('Details for package <em>%h</em>').format(pkg.name), [
+ E('ul', {}, [
+ E('li', '<strong>%s:</strong> %h'.format(_('Version'), pkg.version)),
+ E('li', '<strong>%s:</strong> %h'.format(_('Size'), size)),
+ tree || '',
+ ]),
+ desc || '',
+ errs || inst || '',
+ E('div', { 'class': 'right' }, [
+ E('div', {
+ 'class': 'btn',
+ 'click': hideModal
+ }, _('Cancel')),
+ ' ',
+ E('div', {
+ 'data-command': 'install',
+ 'data-package': name,
+ 'class': 'btn cbi-button-action',
+ 'click': handleOpkg
+ }, _('Install'))
+ ])
+ ]);
+ }
+
+ function handleManualInstall(ev)
+ {
+ var name_or_url = document.querySelector('input[name="install"]').value,
+ install = E('div', {
+ 'class': 'btn cbi-button-action',
+ 'data-command': 'install',
+ 'data-package': name_or_url,
+ 'click': function(ev) {
+ document.querySelector('input[name="install"]').value = '';
+ handleOpkg(ev);
+ }
+ }, _('Install')), warning;
+
+ if (!name_or_url.length) {
+ return;
+ }
+ else if (name_or_url.indexOf('/') !== -1) {
+ warning = E('p', {}, _('Installing packages from untrusted sources is a potential security risk! Really attempt to install <em>%h</em>?').format(name_or_url));
+ }
+ else if (!packages.available.providers[name_or_url]) {
+ warning = E('p', {}, _('The package <em>%h</em> is not available in any configured repository.').format(name_or_url));
+ install = '';
+ }
+ else {
+ warning = E('p', {}, _('Really attempt to install <em>%h</em>?').format(name_or_url));
+ }
+
+ showModal(_('Manually install package'), [
+ warning,
+ E('div', { 'class': 'right' }, [
+ E('div', {
+ 'click': hideModal,
+ 'class': 'btn cbi-button-neutral'
+ }, _('Cancel')),
+ ' ', install
+ ])
+ ]);
+ }
+
+ function handleConfig(ev)
+ {
+ showModal(_('OPKG Configuration'), [
+ E('p', { 'class': 'spinning' }, _('Loading configuration data…'))
+ ]);
+
+ XHR.get('<%=url("admin/system/opkg/config")%>', null, function(xhr, conf) {
+ var body = [
+ E('p', {}, _('Below is a listing of the various configuration files used by <em>opkg</em>. Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for custom repository entries. The configuration in the other files may be changed but is usually not preserved by <em>sysupgrade</em>.'))
+ ];
+
+ Object.keys(conf).sort().forEach(function(file) {
+ body.push(E('h5', {}, '%h'.format(file)));
+ body.push(E('textarea', {
+ 'name': file,
+ 'rows': Math.max(Math.min(conf[file].match(/\n/g).length, 10), 3)
+ }, '%h'.format(conf[file])));
+ });
+
+ body.push(E('div', { 'class': 'right' }, [
+ E('div', {
+ 'class': 'btn cbi-button-neutral',
+ 'click': hideModal
+ }, _('Cancel')),
+ ' ',
+ E('div', {
+ 'class': 'btn cbi-button-positive',
+ 'click': function(ev) {
+ var data = {};
+ findParent(ev.target, '.modal').querySelectorAll('textarea[name]')
+ .forEach(function(textarea) {
+ data[textarea.getAttribute('name')] = textarea.value
+ });
+
+ showModal(_('OPKG Configuration'), [
+ E('p', { 'class': 'spinning' }, _('Saving configuration data…'))
+ ]);
+
+ (new XHR()).post('<%=url("admin/system/opkg/config")%>',
+ { token: '<%=token%>', data: JSON.stringify(data) }, hideModal);
+ }
+ }, _('Save')),
+ ]));
+
+ showModal(_('OPKG Configuration'), body);
+ });
+ }
+
+ function handleRemove(ev)
+ {
+ var name = ev.target.getAttribute('data-package'),
+ pkg = packages.installed.pkgs[name],
+ avail = packages.available.pkgs[name] || {},
+ size, desc;
+
+ if (avail.installsize)
+ size = _('~%.1024mB installed').format(avail.installsize);
+ else if (avail.size)
+ size = _('~%.1024mB compressed').format(avail.size);
+ else
+ size = _('unknown');
+
+ if (avail.description) {
+ desc = E('div', {}, [
+ E('h5', {}, _('Description')),
+ E('p', {}, avail.description)
+ ]);
+ }
+
+ showModal(_('Remove package <em>%h</em>').format(pkg.name), [
+ E('ul', {}, [
+ E('li', '<strong>%s:</strong> %h'.format(_('Version'), pkg.version)),
+ E('li', '<strong>%s:</strong> %h'.format(_('Size'), size))
+ ]),
+ desc || '',
+ E('div', { 'style': 'display:flex; justify-content:space-between; flex-wrap:wrap' }, [
+ E('label', {}, [
+ E('input', { type: 'checkbox', checked: 'checked', name: 'autoremove' }),
+ _('Automatically remove unused dependencies')
+ ]),
+ E('div', { 'style': 'flex-grow:1', 'class': 'right' }, [
+ E('div', {
+ 'class': 'btn',
+ 'click': hideModal
+ }, _('Cancel')),
+ ' ',
+ E('div', {
+ 'data-command': 'remove',
+ 'data-package': name,
+ 'class': 'btn cbi-button-negative',
+ 'click': handleOpkg
+ }, _('Remove'))
+ ])
+ ])
+ ]);
+ }
+
+ function handleOpkg(ev)
+ {
+ var cmd = ev.target.getAttribute('data-command'),
+ pkg = ev.target.getAttribute('data-package'),
+ rem = document.querySelector('input[name="autoremove"]'),
+ url = '<%=url("admin/system/opkg/exec")%>/' + encodeURIComponent(cmd);
+
+ var dlg = showModal(_('Executing package manager'), [
+ E('p', { 'class': 'spinning' },
+ _('Waiting for the <em>opkg %h</em> command to complete…').format(cmd))
+ ]);
+
+ (new XHR()).post(url, {
+ token: '<%=token%>',
+ package: pkg,
+ autoremove: rem ? rem.checked : false
+ }, function(xhr, res) {
+ dlg.removeChild(dlg.lastChild);
+
+ if (res.stdout)
+ dlg.appendChild(E('pre', [ res.stdout ]));
+
+ if (res.stderr) {
+ dlg.appendChild(E('h5', _('Errors')));
+ dlg.appendChild(E('pre', { 'class': 'errors' }, [ res.stderr ]));
+ }
+
+ if (res.code !== 0)
+ dlg.appendChild(E('p', _('The <em>opkg %h</em> command failed with code <code>%d</code>.').format(cmd, (res.code & 0xff) || -1)));
+
+ dlg.appendChild(E('div', { 'class': 'right' },
+ E('div', {
+ 'class': 'btn',
+ 'click': function() {
+ hideModal();
+ updateLists();
+ }
+ }, _('Dismiss'))));
+ });
+ }
+
+ function updateLists()
+ {
+ cbi_update_table('#packages', [],
+ E('div', { 'class': 'spinning' }, _('Loading package information…')));
+
+ packages.available = { providers: {}, pkgs: {} };
+ packages.installed = { providers: {}, pkgs: {} };
+
+ XHR.get('<%=url("admin/system/opkg/statvfs")%>', null, function(xhr, stat) {
+ var pg = document.querySelector('.cbi-progressbar'),
+ total = stat.blocks || 0,
+ free = stat.bfree || 0;
+
+ pg.firstElementChild.style.width = Math.floor(total ? ((100 / total) * free) : 100) + '%';
+ pg.setAttribute('title', '%s (%.1024mB)'.format(pg.firstElementChild.style.width, free * (stat.frsize || 0)));
+
+ XHR.get('<%=url("admin/system/opkg/list/available")%>', null, function(xhr) {
+ parseList(xhr.responseText, packages.available);
+ XHR.get('<%=url("admin/system/opkg/list/installed")%>', null, function(xhr) {
+ parseList(xhr.responseText, packages.installed);
+ display(document.querySelector('input[name="filter"]').value);
+ });
+ });
+ });
+ }
+
+ window.requestAnimationFrame(function() {
+ var filter = document.querySelector('input[name="filter"]'),
+ keyTimeout = null;
+
+ filter.value = '';
+ filter.addEventListener('keyup',
+ function(ev) {
+ if (keyTimeout !== null)
+ window.clearTimeout(keyTimeout);
+
+ keyTimeout = window.setTimeout(function() {
+ display(ev.target.value);
+ }, 250);
+ });
+
+ document.querySelector('#pager > .prev').addEventListener('click', handlePage);
+ document.querySelector('#pager > .next').addEventListener('click', handlePage);
+ document.querySelector('.cbi-tabmenu.mode').addEventListener('click', handleMode);
+
+ updateLists();
+ });
+//]]></script>
+
+<h2><%:Software%></h2>
+
+<div class="controls">
+ <div>
+ <label><%:Free space%>:</label>
+ <div class="cbi-progressbar" title="<%:unknown%>">
+ <div>&#160;</div>
+ </div>
+ </div>
+
+ <div>
+ <label><%:Filter%>:</label>
+ <input type="text" name="filter" placeholder="<%:Type to filter…%>" /><!--
+ --><div class="btn cbi-button" onclick="handleReset(event)"><%:Clear%></div>
+ </div>
+
+ <div>
+ <label><%:Download and install package%>:</label>
+ <input type="text" name="install" placeholder="<%:Package name or URL…%>" onkeydown="if (event.keyCode === 13) handleManualInstall(event)" /><!--
+ --><div class="btn cbi-button cbi-button-action" onclick="handleManualInstall(event)"><%:OK%></div>
+ </div>
+
+ <div>
+ <label><%:Actions%>:</label>
+ <div class="btn cbi-button-positive" data-command="update" onclick="handleOpkg(event)"><%:Update lists…%></div>
+ &#160;
+ <div class="btn cbi-button-neutral" onclick="handleConfig(event)"><%:Configure opkg…%></div>
+ </div>
+</div>
+
+<ul class="cbi-tabmenu mode">
+ <li data-mode="available" class="available cbi-tab"><a href="#"><%:Available%></a></li>
+ <li data-mode="installed" class="installed cbi-tab-disabled"><a href="#"><%:Installed%></a></li>
+ <li data-mode="updates" class="installed cbi-tab-disabled"><a href="#"><%:Updates%></a></li>
+</ul>
+
+<div class="controls" style="display:none">
+ <div id="pager" class="center">
+ <div class="btn cbi-button-neutral prev">«</div>
+ <div class="text">dummy</div>
+ <div class="btn cbi-button-neutral next">»</div>
+ </div>
+</div>
+
+<div class="table" id="packages">
+ <div class="tr cbi-section-table-titles">
+ <div class="th col-2 left"><%:Package name%></div>
+ <div class="th col-2 left version"><%:Version%></div>
+ <div class="th col-1 center size"><%:Size (.ipk)%></div>
+ <div class="th col-10 left"><%:Description%></div>
+ <div class="th right">&#160;</div>
+ </div>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-opkg/po/ca/opkg.po b/applications/luci-app-opkg/po/ca/opkg.po
new file mode 100644
index 0000000000..63bb5b5435
--- /dev/null
+++ b/applications/luci-app-opkg/po/ca/opkg.po
@@ -0,0 +1,308 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2014-06-06 11:17+0200\n"
+"Last-Translator: Alex <alexhenrie24@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Accions"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuració"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descripció"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Descarrega i instal·la el paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Error"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Espai lliure"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instal·la"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instal·la"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instal·la"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Vés a la pàgina de configuració"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Descarrega i instal·la el paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "No hi ha informació disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Cerca paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "No connectat"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "D'acord"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuració d&#39;OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nom del paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nom del paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Treu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Restableix"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Desa"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configuració de dispositiu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Mida"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Mida (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Programari"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Actualitza les llistes"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Actualitza les llistes"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versió"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Esperant que s'acabi l'ordre..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "desconegut"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/cs/opkg.po b/applications/luci-app-opkg/po/cs/opkg.po
new file mode 100644
index 0000000000..296f0f9bce
--- /dev/null
+++ b/applications/luci-app-opkg/po/cs/opkg.po
@@ -0,0 +1,306 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-05-31 13:59+0200\n"
+"Last-Translator: koli <lukas.koluch@gmail.com>\n"
+"Language-Team: none\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Akce"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Dostupné"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Storno"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Nastavení"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Popis"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Stáhnout a nainstalovat balíček"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Chyba"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtr"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Volné místo"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instalovat"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instalovat"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instalovat"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Přejít na související konfigurační stránku"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Stáhnout a nainstalovat balíček"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Údaje nejsou k dispozici"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Vyhledat balíček"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Dostupná celkem"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Nepřipojeno"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Konfigurace balíčků OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Název balíčku"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Název balíčku"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Odstranit"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Uložit"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Nastavení zařízení"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Velikost"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Aktualizovat seznamy"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Aktualizovat seznamy"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Verze"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Čekání na dokončení příkazu..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "neznámý"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/de/opkg.po b/applications/luci-app-opkg/po/de/opkg.po
new file mode 100644
index 0000000000..debab0dea3
--- /dev/null
+++ b/applications/luci-app-opkg/po/de/opkg.po
@@ -0,0 +1,312 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-26 17:57+0200\n"
+"PO-Revision-Date: 2018-11-14 09:45+0100\n"
+"Last-Translator: Jo-Philipp Wich <jo@mein.io>\n"
+"Language-Team: \n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.8.11\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Aktionen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr "Unbenutzte Abhängigkeiten automatisch entfernen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Verfügbar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+"Dies ist eine Auflistung der verschiedenen von <em>opkg</em> genutzten "
+"Konfigurationsdateien. Die <em>opkg.conf</em>-Datei sollte für globale "
+"Einstellungen und die <em>customfeeds.conf</em>-Datei für benutzerdefinierte "
+"Repository-Einträge verwendet werden. Der Inhalt der anderen "
+"Konfigurationsdateien kann zwar geändert werden, wird aber überlicherweise "
+"bei Systemupdates zurückgesetzt."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr "Löschen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+msgid "Configure opkg…"
+msgstr "Konfiguriere opkg…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr "Abhängigkeiten"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Beschreibung"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr "Details für Paket <em>%h</em>"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "Schließen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr "Einträge %d-%d von %d"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Paket herunterladen und installieren"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+msgid "Errors"
+msgstr "Fehler"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr "Paketmanager ausführen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filter"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Freier Platz"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Installieren"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+msgid "Installed"
+msgstr "Installiert"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+"Die Installation von Paketen aus unbekannten Quellen ist ein mögliches "
+"Sicherheitsrisiko! Soll wirklich versucht werden, <em>%h</em> zu "
+"installieren?"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+msgid "Install…"
+msgstr "Installieren…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+msgid "Loading configuration data…"
+msgstr "Lade Konfigurationsdaten…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr "Lade Paketinformationen…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+msgid "Manually install package"
+msgstr "Paket manuell installieren"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr "Aktualisierung benötigt"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Keine Informationen verfügbar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+msgid "No packages"
+msgstr "Keine Pakete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr "Keine auf \"<strong>%h</strong>\" zutreffenden Pakete."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+msgid "Not available"
+msgstr "Nicht verfügbar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+msgid "Not installed"
+msgstr "Nicht installiert"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+msgid "OPKG Configuration"
+msgstr "OPKG-Konfiguration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Paketname"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+msgid "Package name or URL…"
+msgstr "Paketname oder URL…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr "Soll wirklich versucht werden, <em>%h</em> zu installieren?"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Entfernen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr "Paket <em>%h</em> entfernen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+"Benötige etwa %.1024mB Speicherplatz für die Installation von %d Pakete(n)."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+"Benötige Version %h %h,\n"
+"aber %h installiert"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+"Benötigtes abhängiges Paket <em>%h</em> ist in keinem Repository verfügbar."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr "Benötigt Update auf Version %h %h"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Speichern"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+msgid "Saving configuration data…"
+msgstr "Speichere Konfigurationsdaten…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Größe"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Größe (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Paketverwaltung"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+"Das <em>opkg %h</em> Kommando wurde mit Fehlercode <code>%d</code> beendet."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+"Die installierte Version von Paket <em>%h</em> ist nicht kompatibel, "
+"benötige Version %s während %s installiert ist."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+"Das Paket <em>%h</em> ist in keinem konfiguriertem Repository verfügbar."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+"Die Repository-Version von Paket <em>%h</em> ist nicht kompatibel, benötige "
+"Version %s aber nur %s ist verfügbar."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr "Tippen zum Filtern…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr "Listen aktualisieren…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr "Aktualisierungen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr "Aktualisieren…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Version"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr "Version inkompatibel"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Warte auf das <em>opkg %h</em> Kommando…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "unbekannt"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr "ca. %.1024mB komprimiert"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr "ca. %.1024mB installiert"
diff --git a/applications/luci-app-opkg/po/el/opkg.po b/applications/luci-app-opkg/po/el/opkg.po
new file mode 100644
index 0000000000..0a98848f4e
--- /dev/null
+++ b/applications/luci-app-opkg/po/el/opkg.po
@@ -0,0 +1,305 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2012-03-31 15:35+0200\n"
+"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Ενέργειες"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Διαθέσιμο"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Παραμετροποίηση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Περιγραφή"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Κατέβασμα και εγκατάσταση πακέτου"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Σφάλμα"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Φίλτρο"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Ελεύθερος χώρος"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Εγκατάσταση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Εγκατάσταση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Εγκατάσταση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Μετάβαση στη σχετική σελίδα ρυθμίσεων"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Κατέβασμα και εγκατάσταση πακέτου"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Δεν υπάρχουν πληροφορίες διαθέσιμες"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Εύρεση πακέτου"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Διαθέσιμο Συνολικά"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Εγκατάσταση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "Εντάξει"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Παραμετροποίηση OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Όνομα πακέτου"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Όνομα πακέτου"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Αφαίρεση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Αρχικοποίηση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Αποθήκευση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Παραμετροποίηση Συσκευής"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Μέγεθος"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Λογισμικό"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Έκδοση"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/en/opkg.po b/applications/luci-app-opkg/po/en/opkg.po
new file mode 100644
index 0000000000..7234bb6ac0
--- /dev/null
+++ b/applications/luci-app-opkg/po/en/opkg.po
@@ -0,0 +1,305 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2012-04-03 08:44+0200\n"
+"Last-Translator: juhosg <juhosg@openwrt.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Actions"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Available"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Cancel"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Description"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Download and install package"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Error"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filter"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Install"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Install"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Install"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Go to relevant configuration page"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Download and install package"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Find package"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "(%s available)"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Install"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-Configuration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Package name"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Package name"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Remove"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Save"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Device Configuration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Size"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Version"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/es/opkg.po b/applications/luci-app-opkg/po/es/opkg.po
new file mode 100644
index 0000000000..d48d030f05
--- /dev/null
+++ b/applications/luci-app-opkg/po/es/opkg.po
@@ -0,0 +1,308 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:41+0200\n"
+"PO-Revision-Date: 2014-05-04 11:38+0200\n"
+"Last-Translator: José Vicente <josevteg@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Acciones"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuración"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descripción"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Descargar e instalar paquete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Error"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Espacio libre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Ir a la página principal de configuración"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Descargar e instalar paquete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "No hay información disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Buscar paquete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "No conectado"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "Aceptar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuración de OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nombre del paquete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nombre del paquete"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Desinstalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Guardar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configuración del dispositivo"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Tamaño"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Instalación de programas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Actualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Actualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versión"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Esperando a que termine el comando..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "desconocido"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/fr/opkg.po b/applications/luci-app-opkg/po/fr/opkg.po
new file mode 100644
index 0000000000..7a902593e4
--- /dev/null
+++ b/applications/luci-app-opkg/po/fr/opkg.po
@@ -0,0 +1,308 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2013-12-22 17:11+0200\n"
+"Last-Translator: goofy <pierre.gaufillet@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Actions"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Annuler"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Description"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Télécharge et installe le paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Erreur"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtrer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Espace libre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Aller à la page de configuration correspondante"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Télécharge et installe le paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Information indisponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Trouver un paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total disponible"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Non connecté"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuration OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nom du paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nom du paquet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Désinstaller"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Remise à zéro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Sauvegarder"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configuration de l'équipement"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Taille"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Logiciels"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Mettre les listes à jour"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Mettre les listes à jour"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Version"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "En attente de la fin de la commande..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "inconnu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/he/opkg.po b/applications/luci-app-opkg/po/he/opkg.po
new file mode 100644
index 0000000000..4f2d1fc41c
--- /dev/null
+++ b/applications/luci-app-opkg/po/he/opkg.po
@@ -0,0 +1,301 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2013-02-02 14:32+0200\n"
+"Last-Translator: oranav <oranav@gmail.com>\n"
+"Language-Team: none\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "פעולות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "זמין"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "בטל"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "הגדרות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "תיאור"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "הורד והתקן חבילות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "שגיאה"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+msgid "Installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+msgid "Install…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "הגדרות נפוצות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "הורד והתקן חבילות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "חבילות זמינות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "סה\"כ פנוי"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "לא מחובר"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "הגדרות"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "שם החבילה"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "שם החבילה"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "הגדרות מכשיר"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "תוכנה"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "גרסה"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/hu/opkg.po b/applications/luci-app-opkg/po/hu/opkg.po
new file mode 100644
index 0000000000..f49547e66a
--- /dev/null
+++ b/applications/luci-app-opkg/po/hu/opkg.po
@@ -0,0 +1,306 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-01-31 09:59+0200\n"
+"Last-Translator: Gabor <juhosg@openwrt.org>\n"
+"Language-Team: none\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Műveletek"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Elérhető"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Mégsem"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Beállítás"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Leírás"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Csomag letöltése és telepítése"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Hiba"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Szűrő"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Szabad hely"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Telepítés"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Telepítés"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Telepítés"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Ugrás a tárgyhoz tartozó beállításokhoz"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Csomag letöltése és telepítése"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Nincs elérhető információ"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Csomag keresése"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Összes elérhető"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Nincs kapcsolódva"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-Beállítások"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Csomagnév"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Csomagnév"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Eltávolítás"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Visszaállítás"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Mentés"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Eszköz beállítások"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Méret"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Szoftver"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Listák frissítése"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Listák frissítése"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Verzió"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Várakozás a parancs befejezésére..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/it/opkg.po b/applications/luci-app-opkg/po/it/opkg.po
new file mode 100644
index 0000000000..14595e4193
--- /dev/null
+++ b/applications/luci-app-opkg/po/it/opkg.po
@@ -0,0 +1,308 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2017-09-05 00:33+0100\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.6.10\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Azioni"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponibile"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Annulla"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configurazione"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descrizione"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Scarica e installa pacchetto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Errore"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Spazio libero"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Installa"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Installa"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Installa"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Vai alla pagina di configurazione relativa"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Scarica e installa pacchetto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Nessuna informazione disponibile"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Cerca pacchetto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Totale"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Non connesso"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configurazione di OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nome pacchetto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nome pacchetto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Rimuovi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Salva"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configurazione del dispositivo"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Dimensione"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Aggiorna liste"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Aggiorna liste"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versione"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "In attesa del comando da completare..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/ja/opkg.po b/applications/luci-app-opkg/po/ja/opkg.po
new file mode 100644
index 0000000000..5b29357097
--- /dev/null
+++ b/applications/luci-app-opkg/po/ja/opkg.po
@@ -0,0 +1,309 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2018-11-11 15:46+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Language-Team: \n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.2\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "動作"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "使用可"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "設定"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "詳細"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "警告の除去"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "パッケージのダウンロードとインストール"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "エラー"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "フィルタ"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "ディスクの空き容量"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "インストール"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "インストール"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "インストール"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "設定の適用を開始しています..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "パッケージのダウンロードとインストール"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+#, fuzzy
+msgid "Needs upgrade"
+msgstr "強制アップグレード"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "情報がありません"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "パッケージを検索"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "合計"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "未接続"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-設定"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "パッケージ名"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "パッケージ名"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "削除"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "リセット"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "保存"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "設定の適用を開始しています..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "サイズ"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "サイズ (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "ソフトウェア"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "リストを更新"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "リストを更新"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "バージョン"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "コマンド実行中です..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "不明"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/ko/opkg.po b/applications/luci-app-opkg/po/ko/opkg.po
new file mode 100644
index 0000000000..7725d095bb
--- /dev/null
+++ b/applications/luci-app-opkg/po/ko/opkg.po
@@ -0,0 +1,305 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2012-04-03 08:44+0200\n"
+"Last-Translator: Weongyo Jeong <weongyo@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "관리 도구"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "설정"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "설명"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "패키지 다운로드 후 설치"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+msgid "Errors"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "필터"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "여유 공간"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "설치"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "설치"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "설치"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "공통 설정"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "패키지 다운로드 후 설치"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "이용 가능한 정보가 없습니다"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "패키지 찾기"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "총 이용 가능한 양"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "연결되지 않음"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-설정"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "패키지 이름"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "패키지 이름"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "제거"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "초기화"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "저장"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "장치 설정"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Size"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "크기 (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "소프트웨어"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "버전"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "실행한 명령이 끝나기를 기다리는 중입니다..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/ms/opkg.po b/applications/luci-app-opkg/po/ms/opkg.po
new file mode 100644
index 0000000000..11a943d0e5
--- /dev/null
+++ b/applications/luci-app-opkg/po/ms/opkg.po
@@ -0,0 +1,304 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-07 17:57+1000\n"
+"PO-Revision-Date: 2010-05-07 17:57+1000\n"
+"Last-Translator: Wai Chet Teow <waichet@hotmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.1.1\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Aksi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Boleh didapati"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Batal"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Konfigurasi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Keterangan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Turun dan memasang pakej"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Kesalahan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Penapis"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Memasang"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Memasang"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Memasang"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Menuju ke halaman konfigurasi yang relevan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Turun dan memasang pakej"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Cari pakej"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "(%s sedia)"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Memasang"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "Baik"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-Konfigurasi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nama pakej"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nama pakej"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Menghapuskan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Simpan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+msgid "Saving configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Saiz"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Perisian"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/no/opkg.po b/applications/luci-app-opkg/po/no/opkg.po
new file mode 100644
index 0000000000..7858a62293
--- /dev/null
+++ b/applications/luci-app-opkg/po/no/opkg.po
@@ -0,0 +1,303 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2013-03-25 23:36+0200\n"
+"Last-Translator: protx <lars.hardy@gmail.com>\n"
+"Language: no\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Handlinger"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Tilgjengelig"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Konfigurasjon"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Last ned og installer pakken"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Feil"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filter"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Ledig plass"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Installer"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Gå til relevant konfigurasjonen side"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Last ned og installer pakken"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Ingen informasjon tilgjengelig"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Finn pakke"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Totalt Tilgjengelig"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Ikke tilkoblet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "<abbr title=\"Open PacKaGe Management\">OPKG</abbr>-Konfigurasjon"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Pakkenavn"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Pakkenavn"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Avinstaller"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Nullstill"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Lagre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Enhet Konfigurasjon"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Størrelse"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Programvare"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Oppdater lister"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Oppdater lister"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versjon"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Venter på at kommando fullføres..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "ukjent"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/pl/opkg.po b/applications/luci-app-opkg/po/pl/opkg.po
new file mode 100644
index 0000000000..4042ad5305
--- /dev/null
+++ b/applications/luci-app-opkg/po/pl/opkg.po
@@ -0,0 +1,310 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-20 09:40+0200\n"
+"PO-Revision-Date: 2018-09-02 15:25+0200\n"
+"Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n"
+"Language-Team: Polish\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Akcje"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Dostępne"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Konfiguracja"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Opis"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Pobierz i zainstaluj pakiet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Błąd"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtr"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Wolna przestrzeń"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instaluj"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instaluj"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instaluj"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Zatwierdzanie konfiguracji…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Pobierz i zainstaluj pakiet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+#, fuzzy
+msgid "Needs upgrade"
+msgstr "Wymuś uaktualnienie"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Brak dostępnych informacji"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Znajdź pakiet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Całkowicie dostępna"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Nie podłączony"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Konfiguracja OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nazwa pakietu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nazwa pakietu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Usuń"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Resetuj"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Zapisz"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Zatwierdzanie konfiguracji…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Rozmiar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Rozmiar (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Oprogramowanie"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Aktualizuj listy"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Aktualizuj listy"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Wersja"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Trwa wykonanie polecenia..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "nieznane"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/pt-br/opkg.po b/applications/luci-app-opkg/po/pt-br/opkg.po
new file mode 100644
index 0000000000..d76d216f74
--- /dev/null
+++ b/applications/luci-app-opkg/po/pt-br/opkg.po
@@ -0,0 +1,309 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:41+0200\n"
+"PO-Revision-Date: 2018-09-20 21:19-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
+"Language-Team: \n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 2.1.1\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Ações"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuração"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descrição"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "Dispensar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Baixe e instale o pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Erro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Espaço livre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Iniciando a aplicação da configuração..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Baixe e instale o pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+#, fuzzy
+msgid "Needs upgrade"
+msgstr "Forçar a atualização"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Nenhuma informação disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Procurar pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total Disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Não conectado"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuração-OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nome do Pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nome do Pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Remover"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Limpar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Salvar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Iniciando a aplicação da configuração..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Tamanho"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Tamanho (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Atualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Atualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versão"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Esperando o término do comando..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "desconhecido"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/pt/opkg.po b/applications/luci-app-opkg/po/pt/opkg.po
new file mode 100644
index 0000000000..ae09da8361
--- /dev/null
+++ b/applications/luci-app-opkg/po/pt/opkg.po
@@ -0,0 +1,308 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-26 19:03+0200\n"
+"PO-Revision-Date: 2013-09-22 18:50+0200\n"
+"Last-Translator: Low <pedroloureiro1@sapo.pt>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Acções"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configuração"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descrição"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Descarregar e instalar pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Erro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtro"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Espaço livre"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instalar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Ir para a página respectiva de configuração"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Descarregar e instalar pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Sem informação disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Procurar pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total Disponível"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Não ligado"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuração-OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Nome do pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Nome do pacote"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Remover"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Salvar"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configuração do Dispositivo"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Tamanho"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Actualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Actualizar listas"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versão"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "A aguardar que o comando termine..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "desconhecido"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/ro/opkg.po b/applications/luci-app-opkg/po/ro/opkg.po
new file mode 100644
index 0000000000..132145b150
--- /dev/null
+++ b/applications/luci-app-opkg/po/ro/opkg.po
@@ -0,0 +1,304 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-04-01 23:12+0200\n"
+"Last-Translator: xcentric <webcctvservice@gmail.com>\n"
+"Language-Team: none\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Actiune"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Disponibil"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Anuleaza"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Configurare"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Descriere"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Descarca si instaleaza pachetul"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Eroare"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtreaza"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Spatiu liber"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Instalati"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Instalati"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Instalati"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Configurarea obisnuita"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Descarca si instaleaza pachetul"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Nici o informatie disponibila"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Gaseste pachet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Total disponibil"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Nu este conectat"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Configuratia-OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Numele pachetului"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Numele pachetului"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Elimina"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Salveaza"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Configurarea dispozitivului"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Marime"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Software"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versiune"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "necunoscut"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/ru/opkg.po b/applications/luci-app-opkg/po/ru/opkg.po
new file mode 100644
index 0000000000..b41d039ded
--- /dev/null
+++ b/applications/luci-app-opkg/po/ru/opkg.po
@@ -0,0 +1,311 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: base\n"
+"POT-Creation-Date: 2010-05-09 01:01+0300\n"
+"PO-Revision-Date: 2018-10-25 19:04+0300\n"
+"Last-Translator: Anton Kikin <a.kikin@tano-systems.com>\n"
+"Language-Team: http://cyber-place.ru\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Действия"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Доступно"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Отменить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Настройка config файла"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Описание"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "Отклонить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Загрузить и установить пакет"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Ошибка"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Фильтр"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Свободное место"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Установить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Установить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Установить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Применение конфигурации..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Загрузить и установить пакет"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+#, fuzzy
+msgid "Needs upgrade"
+msgstr "Принудительная прошивка"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Нет доступной информации"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Найти пакет"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Всего доступно"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Не подключено"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Настройка OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Имя пакета"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Имя пакета"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Удалить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Сбросить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Сохранить"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Применение конфигурации..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Размер"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Размер (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Программное обеспечение"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Обновить списки"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Обновить списки"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Версия"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Ожидание завершения выполнения команды..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "неизвестный"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/sk/opkg.po b/applications/luci-app-opkg/po/sk/opkg.po
new file mode 100644
index 0000000000..326d9ab2a5
--- /dev/null
+++ b/applications/luci-app-opkg/po/sk/opkg.po
@@ -0,0 +1,289 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+msgid "Configure opkg…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+msgid "Errors"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+msgid "Installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+msgid "Install…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+msgid "Loading configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+msgid "Manually install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+msgid "No packages"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+msgid "Not available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+msgid "Not installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+msgid "OPKG Configuration"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+msgid "Package name or URL…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+msgid "Saving configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/sv/opkg.po b/applications/luci-app-opkg/po/sv/opkg.po
new file mode 100644
index 0000000000..652f4f6db6
--- /dev/null
+++ b/applications/luci-app-opkg/po/sv/opkg.po
@@ -0,0 +1,306 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-04-28 09:22+0200\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
+"Language-Team: none\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Åtgärder"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Tillgänglig"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Konfiguration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Beskrivning"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Ladda ner och installera paket"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Fel"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Filtrera"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Fritt utrymme"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Installera"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Installera"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Installera"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Gå till relevant konfigurationssida"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Ladda ner och installera paket"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Ingen information tillgänglig"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Hitta paket"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Totalt tillgängligt"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Inte ansluten"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Konfiguration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Paketnamn"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Paketnamn"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Ta bort"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Återställ"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Spara"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Enhetskonfiguration"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Storlek"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Storlek (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Mjukvara"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Uppdatera listor"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Uppdatera listor"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Version"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Väntar på att kommandot ska avsluta..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "okänd"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/templates/opkg.pot b/applications/luci-app-opkg/po/templates/opkg.pot
new file mode 100644
index 0000000000..2f1218af89
--- /dev/null
+++ b/applications/luci-app-opkg/po/templates/opkg.pot
@@ -0,0 +1,281 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+msgid "Configure opkg…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+msgid "Errors"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+msgid "Installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+msgid "Install…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+msgid "Loading configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+msgid "Manually install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+msgid "No packages"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+msgid "Not available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+msgid "Not installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+msgid "OPKG Configuration"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+msgid "Package name or URL…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+msgid "Saving configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/tr/opkg.po b/applications/luci-app-opkg/po/tr/opkg.po
new file mode 100644
index 0000000000..2a3826f9b3
--- /dev/null
+++ b/applications/luci-app-opkg/po/tr/opkg.po
@@ -0,0 +1,297 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2018-09-13 22:59+0300\n"
+"Last-Translator: Yusuf Soyipek <yusuf@soyipek.com>\n"
+"Language-Team: none\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.1.1\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Eylemler"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Kullanılabilir"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Vazgeç"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+msgid "Configure opkg…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Açıklama"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "Reddet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+msgid "Errors"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Boş alan"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+msgid "Installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+msgid "Install…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Yapılandırmaya dön"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+msgid "Manually install package"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Kullanılabilir Paketler"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Toplam Mevcut"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+msgid "Not installed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Cihaz Yapılandırması"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+msgid "Package name or URL…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Sıfırla"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Kaydet"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Cihaz Yapılandırması"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Boyut"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Boyut (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Yazılım"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Versiyon"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "bilinmeyen"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/uk/opkg.po b/applications/luci-app-opkg/po/uk/opkg.po
new file mode 100644
index 0000000000..f1ba3f4da5
--- /dev/null
+++ b/applications/luci-app-opkg/po/uk/opkg.po
@@ -0,0 +1,307 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2018-10-14 18:10+0300\n"
+"Last-Translator: Yurii <yuripet@gmail.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Дії"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Доступно"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Скасувати"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Конфігурація"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Опис"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "Відхилити"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Завантажити та інсталювати пакети"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Помилка"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Фільтр"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "Вільне місце"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Інсталювати"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Інсталювати"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Інсталювати"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Розпочато застосування конфігурації…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Завантажити та інсталювати пакети"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+#, fuzzy
+msgid "Needs upgrade"
+msgstr "Примусове оновлення"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "Інформація відсутня"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Знайти пакет"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "Усього доступно"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Не підключено"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Конфігурація OPKG"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Назва пакета"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Назва пакета"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Видалити"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Скинути"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Зберегти"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "Розпочато застосування конфігурації…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Розмір"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "Розмір (.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Програмне забезпечення"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "Оновити списки"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "Оновити списки"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Версія"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "Очікуємо завершення виконання команди..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "невідомий"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/vi/opkg.po b/applications/luci-app-opkg/po/vi/opkg.po
new file mode 100644
index 0000000000..5f434273a1
--- /dev/null
+++ b/applications/luci-app-opkg/po/vi/opkg.po
@@ -0,0 +1,303 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-08-16 06:59+0200\n"
+"PO-Revision-Date: 2009-08-14 12:23+0200\n"
+"Last-Translator: Hong Phuc Dang <dhppat@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "Hành động"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "Sẵn có"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "Bỏ qua"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "Cấu hình"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "Mô tả"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "Tải và cài đặt gói"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "Lỗi"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "Lọc"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "Cài đặt "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "Cài đặt "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "Cài đặt "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "Đi tới trang cấu hình thích hợp"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "Tải và cài đặt gói"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "Tìm gói"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "(%s available)"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "Cài đặt "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "OK "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "Cấu hình OPKG-"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "Tên gói"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "Tên gói"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "Loại bỏ"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "Reset"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "Lưu"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+msgid "Saving configuration data…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "Dung lượng "
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "Phần mềm"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+msgid "Update lists…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+msgid "Updates"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "Phiên bản"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/zh-cn/opkg.po b/applications/luci-app-opkg/po/zh-cn/opkg.po
new file mode 100644
index 0000000000..cb4b5d43aa
--- /dev/null
+++ b/applications/luci-app-opkg/po/zh-cn/opkg.po
@@ -0,0 +1,307 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2018.
+#
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2018-08-18 12:39+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team: <debian-l10n-chinese@lists.debian.org>\n"
+"Language: \n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "动作"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "可用"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "取消"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "配置"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "描述"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr "解除"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "下载并安装软件包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "错误"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "过滤器"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "空闲空间"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "安装"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "安装"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "安装"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "开始应用配置…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "下载并安装软件包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "无可用信息"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "查找软件包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "可用数"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "未连接"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "确认"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG 配置"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "软件包名称"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "软件包名称"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "移除"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "复位"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "保存"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "开始应用配置…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "大小"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr "大小(.ipk)"
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "软件包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "刷新列表"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "刷新列表"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "版本"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "等待命令执行完成…"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "未知"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-opkg/po/zh-tw/opkg.po b/applications/luci-app-opkg/po/zh-tw/opkg.po
new file mode 100644
index 0000000000..0bef4e0683
--- /dev/null
+++ b/applications/luci-app-opkg/po/zh-tw/opkg.po
@@ -0,0 +1,306 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-05-21 10:34+0200\n"
+"Last-Translator: omnistack <omnistack@gmail.com>\n"
+"Language-Team: none\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:927
+msgid "Actions"
+msgstr "動作"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:795
+msgid "Automatically remove unused dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:935
+msgid "Available"
+msgstr "可用"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:725
+msgid ""
+"Below is a listing of the various configuration files used by <em>opkg</em>. "
+"Use <em>opkg.conf</em> for global settings and <em>customfeeds.conf</em> for "
+"custom repository entries. The configuration in the other files may be "
+"changed but is usually not preserved by <em>sysupgrade</em>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:666
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:711
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:740
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:801
+msgid "Cancel"
+msgstr "取消"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:917
+msgid "Clear"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:930
+#, fuzzy
+msgid "Configure opkg…"
+msgstr "設定"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:643
+msgid "Dependencies"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:649
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:781
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:953
+msgid "Description"
+msgstr "描述"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:654
+msgid "Details for package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:851
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:311
+msgid "Displaying %d-%d of %d"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:921
+msgid "Download and install package"
+msgstr "下載並安裝軟體包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:837
+#, fuzzy
+msgid "Errors"
+msgstr "錯誤"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:821
+msgid "Executing package manager"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:915
+msgid "Filter"
+msgstr "過濾器"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:908
+msgid "Free space"
+msgstr "剩餘空間"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:673
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:689
+msgid "Install"
+msgstr "安裝"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:262
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:470
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:936
+#, fuzzy
+msgid "Installed"
+msgstr "安裝"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:695
+msgid ""
+"Installing packages from untrusted sources is a potential security risk! "
+"Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:251
+#, fuzzy
+msgid "Install…"
+msgstr "安裝"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:720
+#, fuzzy
+msgid "Loading configuration data…"
+msgstr "到相應設定頁"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:858
+msgid "Loading package information…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:705
+#, fuzzy
+msgid "Manually install package"
+msgstr "下載並安裝軟體包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:458
+msgid "Needs upgrade"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:324
+msgid "No information available"
+msgstr "尚無可運用資訊"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:312
+#, fuzzy
+msgid "No packages"
+msgstr "搜尋軟體包"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:328
+msgid "No packages matching \"<strong>%h</strong>\"."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:490
+#, fuzzy
+msgid "Not available"
+msgstr "全部可用"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:475
+#, fuzzy
+msgid "Not installed"
+msgstr "尚未連線"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:923
+msgid "OK"
+msgstr "行"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:719
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:751
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:761
+#, fuzzy
+msgid "OPKG Configuration"
+msgstr "OPKG-設定值"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:950
+msgid "Package name"
+msgstr "軟體包名稱"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:922
+#, fuzzy
+msgid "Package name or URL…"
+msgstr "軟體包名稱"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:702
+msgid "Really attempt to install <em>%h</em>?"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:241
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:808
+msgid "Remove"
+msgstr "移除"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:786
+msgid "Remove package <em>%h</em>"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:639
+msgid "Require approx. %.1024mB size for %d package(s) to install."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:465
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:483
+msgid ""
+"Require version %h %h,\n"
+"installed %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:488
+msgid ""
+"Required dependency package <em>%h</em> is not available in any repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:456
+msgid "Requires update to %h %h"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:329
+msgid "Reset"
+msgstr "重置"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:758
+msgid "Save"
+msgstr "保存"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:752
+#, fuzzy
+msgid "Saving configuration data…"
+msgstr "設定設備"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:657
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:789
+msgid "Size"
+msgstr "大小"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:952
+msgid "Size (.ipk)"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/controller/opkg.lua:7
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:904
+msgid "Software"
+msgstr "軟體"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:842
+msgid "The <em>opkg %h</em> command failed with code <code>%d</code>."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:461
+msgid ""
+"The installed version of package <em>%h</em> is not compatible, require %s "
+"while %s is installed."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:698
+msgid "The package <em>%h</em> is not available in any configured repository."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:478
+msgid ""
+"The repository version of package <em>%h</em> is not compatible, require %s "
+"but only %s is available."
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:916
+msgid "Type to filter…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:928
+#, fuzzy
+msgid "Update lists…"
+msgstr "上傳清單"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:937
+#, fuzzy
+msgid "Updates"
+msgstr "上傳清單"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:233
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:257
+msgid "Upgrade…"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:656
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:788
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:951
+msgid "Version"
+msgstr "版本"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:467
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:485
+msgid "Version incompatible"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:823
+#, fuzzy
+msgid "Waiting for the <em>opkg %h</em> command to complete…"
+msgstr "等待完整性指令..."
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:617
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:777
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:909
+msgid "unknown"
+msgstr "未知"
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:615
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:775
+msgid "~%.1024mB compressed"
+msgstr ""
+
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:613
+#: applications/luci-app-opkg/luasrc/view/opkg.htm:773
+msgid "~%.1024mB installed"
+msgstr ""
diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile
index 486cf0ee74..6728172836 100644
--- a/applications/luci-app-privoxy/Makefile
+++ b/applications/luci-app-privoxy/Makefile
@@ -21,7 +21,7 @@ PKG_MAINTAINER:=
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Privoxy WEB proxy
-LUCI_DEPENDS:=+luci-mod-admin-full +privoxy
+LUCI_DEPENDS:=+luci-lib-ipkg +luci-mod-admin-full +privoxy
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
diff --git a/applications/luci-app-radicale/Makefile b/applications/luci-app-radicale/Makefile
index 87180e77d6..90ef0deba6 100644
--- a/applications/luci-app-radicale/Makefile
+++ b/applications/luci-app-radicale/Makefile
@@ -21,7 +21,7 @@ PKG_MAINTAINER:=
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Radicale CardDAV/CalDAV
-LUCI_DEPENDS:=+luci-mod-admin-full
+LUCI_DEPENDS:=+luci-lib-ipkg +luci-mod-admin-full
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
diff --git a/applications/luci-app-transmission/Makefile b/applications/luci-app-transmission/Makefile
index 668c73185b..42b29e9a4c 100644
--- a/applications/luci-app-transmission/Makefile
+++ b/applications/luci-app-transmission/Makefile
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for Transmission
-LUCI_DEPENDS:=
+LUCI_DEPENDS:=+luci-lib-ipkg
include ../../luci.mk
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
index fea190e9b9..8597912b20 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
@@ -11,7 +11,7 @@ if not fs.access(input) then
end
m = SimpleForm("input", nil)
-m:append(Template("travelmate/config_css"))
+m:append(Template("travelmate/travelmate_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
index 6f0ade772d..36a32aefe8 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
@@ -11,7 +11,7 @@ if not fs.access(input) then
end
m = SimpleForm("input", nil)
-m:append(Template("travelmate/config_css"))
+m:append(Template("travelmate/travelmate_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
index ab59dfb376..bb6205b9b3 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
@@ -11,7 +11,7 @@ if not fs.access(input) then
end
m = SimpleForm("input", nil)
-m:append(Template("travelmate/config_css"))
+m:append(Template("travelmate/travelmate_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
index 7bb32c1ec5..c9cc587edd 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
@@ -13,7 +13,7 @@ if not fs.access(input) then
end
m = SimpleForm("input", nil)
-m:append(Template("travelmate/config_css"))
+m:append(Template("travelmate/travelmate_css"))
m.submit = translate("Save")
m.reset = false
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
deleted file mode 100644
index 2233a15e31..0000000000
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
+++ /dev/null
@@ -1,13 +0,0 @@
-<style type="text/css">
- textarea
- {
- border: 1px solid #cccccc;
- padding: 5px;
- font-size: 12px;
- font-family: monospace;
- resize: none;
- white-space: pre;
- overflow-wrap: normal;
- overflow-x: scroll;
- }
-</style>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
index 4457296f54..25c29b8bbe 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
@@ -4,22 +4,7 @@ This is free software, licensed under the Apache License, Version 2.0
-%>
<%+header%>
-
-<style type="text/css">
- select[readonly],
- textarea[readonly]
- {
- width: 100%;
- height: 450px;
- border: 1px solid #cccccc;
- padding: 5px;
- font-size: 12px;
- font-family: monospace;
- resize: none;
- pointer-events: auto;
- cursor: auto;
- }
-</style>
+<%+travelmate/travelmate_css%>
<script type="text/javascript">
//<![CDATA[
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
index 1a53b577d1..0b025fdaee 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
@@ -3,17 +3,7 @@ Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
-<style type="text/css">
- .runtime
- {
- color: #37c;
- font-weight: bold;
- display: inline-block;
- width: 100%;
- padding-top: 0.5rem;
- }
-</style>
-
+<%+travelmate/travelmate_css%>
<script type="text/javascript">
//<![CDATA[
function status_update(json)
@@ -148,7 +138,7 @@ This is free software, licensed under the Apache License, Version 2.0
<label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label>
<div class="cbi-value-field">
<input class="cbi-button cbi-button-reset" id="btn1" type="button" name="do_restart" value="<%:Restart%>" onclick="btn_action(this)" />
- <span id="btn1_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
+ <span id="btn1_running" class="btn_running"></span>
</div>
</div>
<div class="cbi-value" id="button_2">
@@ -200,10 +190,10 @@ This is free software, licensed under the Apache License, Version 2.0
if fs.access("/usr/bin/qrencode") then
qrcode = luci.sys.exec("/usr/bin/qrencode --inline --8bit --type=SVG --output=- 'WIFI:S:\"'" .. e_ssid .. "'\";T:'" .. enc .. "';P:\"'" .. e_key .. "'\";H:'" .. hidden .. "';'")
-%>
- <div class="cbi-value" style="border-bottom: 0px; margin-bottom: 0px; padding: 0.25em 0.6em; text-align: left">
+ <div class="qr-code">
<%=qrcode%>
</div>
- <div class="cbi-value" style="border-bottom: 0px; margin-bottom: 0px; padding: 0.25em 0.6em; text-align: left">
+ <div class="qr-code">
<em><%:AP on %><%=device%><%: with SSID %>"<%=ssid%>"</em>
<hr />
</div>
@@ -214,7 +204,7 @@ This is free software, licensed under the Apache License, Version 2.0
end)
if not qrcode then
-%>
- <div class="cbi-value" style="border-bottom: 0px; margin-bottom: 0px; padding: 0.25em 0.6em; text-align: left">
+ <div class="qr-code">
<em><%:For QR-Code support please install package 'qrencode'!%></em>
</div>
<%-
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/travelmate_css.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/travelmate_css.htm
new file mode 100644
index 0000000000..fc8036e334
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/travelmate_css.htm
@@ -0,0 +1,116 @@
+<style type="text/css">
+ textarea
+ {
+ width: 100%;
+ height: 450px;
+ border: 1px solid #cccccc;
+ padding: 5px;
+ font-size: 12px;
+ font-family: monospace;
+ resize: none;
+ white-space: pre;
+ overflow-wrap: normal;
+ overflow-x: scroll;
+ }
+
+ select[readonly],
+ textarea[readonly]
+ {
+ width: 100%;
+ height: 450px;
+ border: 1px solid #cccccc;
+ padding: 5px;
+ font-size: 12px;
+ font-family: monospace;
+ resize: none;
+ pointer-events: auto;
+ cursor: auto;
+ }
+
+ .table.cbi-section-table .th,
+ .table.cbi-section-table .td,
+ .cbi-section-table-cell,
+ .cbi-section-table-row,
+ .tr[data-title]::before
+ {
+ text-align: left;
+ vertical-align: top;
+ margin-left: 0px;
+ padding-left: 2px;
+ }
+
+ .table.cbi-section-table .th
+ {
+ white-space: nowrap;
+ }
+
+ .cbi-section-table-row > .cbi-value-field .cbi-input-select,
+ .table.cbi-section-table select
+ {
+ width: 70px;
+ }
+
+ .cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
+ .table.cbi-section-table input[type="text"],
+ .cbi-dynlist > .item,
+ .table.cbi-section-table input,
+ .cbi-dynlist
+ {
+ display: inline-block;
+ width: 7em;
+ margin: 1px;
+ }
+
+ .td.cbi-value-field .cbi-button
+ {
+ width: auto;
+ margin: 1px 0 1px -2px;
+ }
+
+ .btn,
+ .cbi-button,
+ .item::after
+ {
+ -webkit-appearance: menulist;
+ }
+
+ .cbi-input-checkbox
+ {
+ height: 1em;
+ }
+
+ .cbi-input-text
+ {
+ text-align: left;
+ padding-left: 2px;
+ outline: none;
+ box-shadow: none;
+ background: transparent;
+ width: 7em;
+ }
+
+ .runtime
+ {
+ color: #37c;
+ font-weight: bold;
+ display: inline-block;
+ width: 100%;
+ padding-top: 0.5rem;
+ }
+
+ .button_running
+ {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin: 0 5px;
+ }
+
+ .qr-code
+ {
+ border-bottom: 0px;
+ margin-bottom: 0px;
+ padding: 0.25em 0.6em;
+ text-align: left
+ }
+</style>
diff --git a/collections/luci/Makefile b/collections/luci/Makefile
index c3174e8b9a..739eb51bc1 100644
--- a/collections/luci/Makefile
+++ b/collections/luci/Makefile
@@ -13,7 +13,7 @@ LUCI_TITLE:=LuCI interface with Uhttpd as Webserver (default)
LUCI_DESCRIPTION:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme
LUCI_DEPENDS:= \
+uhttpd +luci-mod-admin-full +luci-theme-bootstrap \
- +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \
+ +luci-app-firewall +luci-app-opkg +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \
+rpcd-mod-rrdns
PKG_LICENSE:=Apache-2.0
diff --git a/applications/luci-app-asterisk/Makefile b/libs/luci-lib-ipkg/Makefile
index 3434e167f4..52fcf6fe82 100644
--- a/applications/luci-app-asterisk/Makefile
+++ b/libs/luci-lib-ipkg/Makefile
@@ -1,12 +1,13 @@
#
-# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
+# Copyright (C) 2018 Jo-Philipp Wich <jo@mein.io>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
-LUCI_TITLE:=LuCI Support for Asterisk
+LUCI_TITLE:=Legacy opkg interface class
+LUCI_DEPENDS:=+luci-base
include ../../luci.mk
diff --git a/modules/luci-base/luasrc/model/ipkg.lua b/libs/luci-lib-ipkg/luasrc/model/ipkg.lua
index e27ea52895..e27ea52895 100644
--- a/modules/luci-base/luasrc/model/ipkg.lua
+++ b/libs/luci-lib-ipkg/luasrc/model/ipkg.lua
diff --git a/modules/luci-base/luasrc/model/ipkg.luadoc b/libs/luci-lib-ipkg/luasrc/model/ipkg.luadoc
index 4e1548dda6..4e1548dda6 100644
--- a/modules/luci-base/luasrc/model/ipkg.luadoc
+++ b/libs/luci-lib-ipkg/luasrc/model/ipkg.luadoc
diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js
index 0230ae9fa0..294b2d7486 100644
--- a/modules/luci-base/htdocs/luci-static/resources/cbi.js
+++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js
@@ -228,7 +228,7 @@ var CBIValidatorPrototype = {
validate: function() {
/* element is detached */
- if (!this.field.form)
+ if (!findParent(this.field, 'form'))
return true;
this.field.classList.remove('cbi-input-invalid');
@@ -569,7 +569,7 @@ var CBIValidatorPrototype = {
return;
var input = sibling.querySelector('[data-type]'),
- values = input.getAttribute('data-is-list') ? input.value.match(/[^ \t]+/g) : [ input.value ];
+ values = input ? (input.getAttribute('data-is-list') ? input.value.match(/[^ \t]+/g) : [ input.value ]) : null;
if (values !== null && values.indexOf(ctx.value) !== -1)
unique = false;
@@ -806,7 +806,9 @@ function cbi_combobox_init(id, values, def, man) {
'class': 'cbi-dropdown',
'display-items': 5,
'optional': obj.getAttribute('data-optional'),
- 'placeholder': _('-- Please choose --')
+ 'placeholder': _('-- Please choose --'),
+ 'data-type': obj.getAttribute('data-type'),
+ 'data-optional': obj.getAttribute('data-optional')
}, [ E('ul') ]);
if (!(obj.value in values) && obj.value.length) {
@@ -833,6 +835,7 @@ function cbi_combobox_init(id, values, def, man) {
})
]));
+ sb.value = obj.value;
obj.parentNode.replaceChild(sb, obj);
}
@@ -1114,38 +1117,30 @@ function cbi_validate_field(cbid, optional, type)
try {
var cbiValidator = new CBIValidator(field, type, optional);
-
- validatorFn = function() {
- return cbiValidator.validate();
- };
+ validatorFn = cbiValidator.validate.bind(cbiValidator);
}
catch(e) {
validatorFn = null;
};
if (validatorFn !== null) {
- if (!field.form.cbi_validators)
- field.form.cbi_validators = [ ];
+ var form = findParent(field, 'form');
- field.form.cbi_validators.push(validatorFn);
+ if (!form.cbi_validators)
+ form.cbi_validators = [ ];
+
+ form.cbi_validators.push(validatorFn);
field.addEventListener("blur", validatorFn);
field.addEventListener("keyup", validatorFn);
+ field.addEventListener("cbi-dropdown-change", validatorFn);
if (matchesElem(field, 'select')) {
field.addEventListener("change", validatorFn);
field.addEventListener("click", validatorFn);
}
- field.setAttribute("cbi_validate", validatorFn);
- field.setAttribute("cbi_datatype", type);
- field.setAttribute("cbi_optional", (!!optional).toString());
-
validatorFn();
-
- var fcbox = document.getElementById('cbi.combobox.' + field.id);
- if (fcbox)
- cbi_validate_field(fcbox, optional, type);
}
}
@@ -1441,6 +1436,14 @@ if (window.NodeList && !NodeList.prototype.forEach) {
};
}
+if (!window.requestAnimationFrame) {
+ window.requestAnimationFrame = function(f) {
+ window.setTimeout(function() {
+ f(new Date().getTime())
+ }, 1000/30);
+ };
+}
+
var dummyElem, domParser;
@@ -1561,11 +1564,10 @@ CBIDropdown = {
var st = window.getComputedStyle(sb, null),
ul = sb.querySelector('ul'),
li = ul.querySelectorAll('li'),
+ fl = findParent(sb, '.cbi-value-field'),
sel = ul.querySelector('[selected]'),
rect = sb.getBoundingClientRect(),
- h = sb.clientHeight - parseFloat(st.paddingTop) - parseFloat(st.paddingBottom),
- mh = this.dropdown_items * h,
- eh = Math.min(mh, li.length * h);
+ items = Math.min(this.dropdown_items, li.length);
document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
@@ -1573,22 +1575,54 @@ CBIDropdown = {
sb.setAttribute('open', '');
+ var pv = ul.cloneNode(true);
+ pv.classList.add('preview');
+
+ if (fl)
+ fl.classList.add('cbi-dropdown-open');
+
if ('ontouchstart' in window) {
- var scroll = document.documentElement.scrollTop,
- vpWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
- vpHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+ var vpWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
+ vpHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0),
+ scrollFrom = window.pageYOffset,
+ scrollTo = scrollFrom + rect.top - vpHeight * 0.5,
+ start = null;
- ul.style.top = h + 'px';
+ ul.style.top = sb.offsetHeight + 'px';
ul.style.left = -rect.left + 'px';
ul.style.right = (rect.right - vpWidth) + 'px';
+ ul.style.maxHeight = (vpHeight * 0.5) + 'px';
+ ul.style.WebkitOverflowScrolling = 'touch';
+
+ var scrollStep = function(timestamp) {
+ if (!start) {
+ start = timestamp;
+ ul.scrollTop = sel ? Math.max(sel.offsetTop - sel.offsetHeight, 0) : 0;
+ }
- window.scrollTo(0, (scroll + rect.top - vpHeight * 0.6));
+ var duration = Math.max(timestamp - start, 1);
+ if (duration < 100) {
+ document.body.scrollTop = scrollFrom + (scrollTo - scrollFrom) * (duration / 100);
+ window.requestAnimationFrame(scrollStep);
+ }
+ else {
+ document.body.scrollTop = scrollTo;
+ }
+ };
+
+ window.requestAnimationFrame(scrollStep);
}
else {
- ul.style.maxHeight = mh + 'px';
- ul.scrollTop = sel ? Math.max(sel.offsetTop - sel.offsetHeight, 0) : 0;
+ ul.style.maxHeight = '1px';
ul.style.top = ul.style.bottom = '';
- ul.style[((rect.top + rect.height + eh) > window.innerHeight) ? 'bottom' : 'top'] = rect.height + 'px';
+
+ window.requestAnimationFrame(function() {
+ var height = items * li[Math.max(0, li.length - 2)].offsetHeight;
+
+ ul.scrollTop = sel ? Math.max(sel.offsetTop - sel.offsetHeight, 0) : 0;
+ ul.style[((rect.top + rect.height + height) > window.innerHeight) ? 'bottom' : 'top'] = rect.height + 'px';
+ ul.style.maxHeight = height + 'px';
+ });
}
ul.querySelectorAll('[selected] input[type="checkbox"]').forEach(function(c) {
@@ -1597,10 +1631,6 @@ CBIDropdown = {
ul.classList.add('dropdown');
- var pv = ul.cloneNode(true);
- pv.classList.remove('dropdown');
- pv.classList.add('preview');
-
sb.insertBefore(pv, ul.nextElementSibling);
li.forEach(function(l) {
@@ -1618,7 +1648,8 @@ CBIDropdown = {
var pv = sb.querySelector('ul.preview'),
ul = sb.querySelector('ul.dropdown'),
- li = ul.querySelectorAll('li');
+ li = ul.querySelectorAll('li'),
+ fl = findParent(sb, '.cbi-value-field');
li.forEach(function(l) { l.removeAttribute('tabindex'); });
sb.lastElementChild.removeAttribute('tabindex');
@@ -1628,6 +1659,10 @@ CBIDropdown = {
sb.style.width = sb.style.height = '';
ul.classList.remove('dropdown');
+ ul.style.top = ul.style.bottom = ul.style.maxHeight = '';
+
+ if (fl)
+ fl.classList.remove('cbi-dropdown-open');
if (!no_focus)
this.setFocus(sb, sb);
@@ -1727,6 +1762,7 @@ CBIDropdown = {
saveValues: function(sb, ul) {
var sel = ul.querySelectorAll('li[selected]'),
div = sb.lastElementChild,
+ strval = '',
values = [];
while (div.lastElementChild)
@@ -1736,17 +1772,21 @@ CBIDropdown = {
if (s.hasAttribute('placeholder'))
return;
+ var v = {
+ text: s.innerText,
+ value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText,
+ element: s
+ };
+
div.appendChild(E('input', {
type: 'hidden',
name: s.hasAttribute('name') ? s.getAttribute('name') : (sb.getAttribute('name') || ''),
- value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText
+ value: v.value
}));
- values.push({
- text: s.innerText,
- value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText,
- element: s
- });
+ values.push(v);
+
+ strval += strval.length ? ' ' + v.value : v.value;
});
var detail = {
@@ -1754,11 +1794,13 @@ CBIDropdown = {
element: sb
};
- if (this.mult)
+ if (this.multi)
detail.values = values;
else
detail.value = values.length ? values[0] : null;
+ sb.value = strval;
+
sb.dispatchEvent(new CustomEvent('cbi-dropdown-change', {
bubbles: true,
detail: detail
@@ -1815,14 +1857,13 @@ CBIDropdown = {
createItems: function(sb, value) {
var sbox = this,
- val = (value || '').trim().split(/\s+/),
+ val = (value || '').trim(),
ul = sb.querySelector('ul');
if (!sbox.multi)
- val.length = Math.min(val.length, 1);
-
- if (val.length === 1 && val[0].length === 0)
- val.length = 0;
+ val = val.length ? [ val ] : [];
+ else
+ val = val.length ? val.split(/\s+/) : [];
val.forEach(function(item) {
var new_item = null;
@@ -1879,6 +1920,8 @@ CBIDropdown = {
var li = findParent(ev.target, 'li');
if (li && li.parentNode.classList.contains('dropdown'))
this.toggleItem(sb, li);
+ else if (li && li.parentNode.classList.contains('preview'))
+ this.closeDropdown(sb);
}
ev.preventDefault();
@@ -2205,7 +2248,9 @@ function cbi_update_table(table, data, placeholder) {
var tooltipDiv = null, tooltipTimeout = null;
function showTooltip(ev) {
- if (!matchesElem(ev.target, '[data-tooltip]'))
+ var target = findParent(ev.target, '[data-tooltip]');
+
+ if (!target)
return;
if (tooltipTimeout !== null) {
@@ -2213,19 +2258,19 @@ function showTooltip(ev) {
tooltipTimeout = null;
}
- var rect = ev.target.getBoundingClientRect(),
+ var rect = target.getBoundingClientRect(),
x = rect.left + window.pageXOffset,
y = rect.top + rect.height + window.pageYOffset;
tooltipDiv.className = 'cbi-tooltip';
tooltipDiv.innerHTML = '▲ ';
- tooltipDiv.firstChild.data += ev.target.getAttribute('data-tooltip');
+ tooltipDiv.firstChild.data += target.getAttribute('data-tooltip');
- if (ev.target.hasAttribute('data-tooltip-style'))
- tooltipDiv.classList.add(ev.target.getAttribute('data-tooltip-style'));
+ if (target.hasAttribute('data-tooltip-style'))
+ tooltipDiv.classList.add(target.getAttribute('data-tooltip-style'));
if ((y + tooltipDiv.offsetHeight) > (window.innerHeight + window.pageYOffset)) {
- y -= (tooltipDiv.offsetHeight + ev.target.offsetHeight);
+ y -= (tooltipDiv.offsetHeight + target.offsetHeight);
tooltipDiv.firstChild.data = '▼ ' + tooltipDiv.firstChild.data.substr(2);
}
@@ -2247,8 +2292,43 @@ function hideTooltip(ev) {
tooltipTimeout = window.setTimeout(function() { tooltipDiv.removeAttribute('style'); }, 250);
}
+
+var modalDiv = null;
+
+function showModal(title, children)
+{
+ var dlg = modalDiv.firstElementChild;
+
+ while (dlg.firstChild)
+ dlg.removeChild(dlg.firstChild);
+
+ dlg.setAttribute('class', 'modal');
+ dlg.appendChild(E('h4', {}, title));
+
+ if (!Array.isArray(children))
+ children = [ children ];
+
+ for (var i = 0; i < children.length; i++)
+ if (isElem(children[i]))
+ dlg.appendChild(children[i]);
+ else
+ dlg.appendChild(document.createTextNode('' + children[i]));
+
+ document.body.classList.add('modal-overlay-active');
+
+ return dlg;
+}
+
+function hideModal()
+{
+ document.body.classList.remove('modal-overlay-active');
+}
+
+
document.addEventListener('DOMContentLoaded', function() {
tooltipDiv = document.body.appendChild(E('div', { 'class': 'cbi-tooltip' }));
+ modalDiv = document.body.appendChild(E('div', { 'id': 'modal_overlay' },
+ E('div', { 'class': 'modal' })));
document.addEventListener('mouseover', showTooltip, true);
document.addEventListener('mouseout', hideTooltip, true);
diff --git a/modules/luci-base/luasrc/sys.lua b/modules/luci-base/luasrc/sys.lua
index 1436a3a235..7e4a9d63cf 100644
--- a/modules/luci-base/luasrc/sys.lua
+++ b/modules/luci-base/luasrc/sys.lua
@@ -13,8 +13,8 @@ local luci = {}
luci.util = require "luci.util"
luci.ip = require "luci.ip"
-local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select =
- tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select
+local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select, unpack =
+ tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select, unpack
module "luci.sys"
@@ -436,6 +436,96 @@ end
process.signal = nixio.kill
+local function xclose(fd)
+ if fd and fd:fileno() > 2 then
+ fd:close()
+ end
+end
+
+function process.exec(command, stdout, stderr, nowait)
+ local out_r, out_w, err_r, err_w
+ if stdout then out_r, out_w = nixio.pipe() end
+ if stderr then err_r, err_w = nixio.pipe() end
+
+ local pid = nixio.fork()
+ if pid == 0 then
+ nixio.chdir("/")
+
+ local null = nixio.open("/dev/null", "w+")
+ if null then
+ nixio.dup(out_w or null, nixio.stdout)
+ nixio.dup(err_w or null, nixio.stderr)
+ nixio.dup(null, nixio.stdin)
+ xclose(out_w)
+ xclose(out_r)
+ xclose(err_w)
+ xclose(err_r)
+ xclose(null)
+ end
+
+ nixio.exec(unpack(command))
+ os.exit(-1)
+ end
+
+ local _, pfds, rv = nil, {}, { code = -1, pid = pid }
+
+ xclose(out_w)
+ xclose(err_w)
+
+ if out_r then
+ pfds[#pfds+1] = {
+ fd = out_r,
+ cb = type(stdout) == "function" and stdout,
+ name = "stdout",
+ events = nixio.poll_flags("in", "err", "hup")
+ }
+ end
+
+ if err_r then
+ pfds[#pfds+1] = {
+ fd = err_r,
+ cb = type(stderr) == "function" and stderr,
+ name = "stderr",
+ events = nixio.poll_flags("in", "err", "hup")
+ }
+ end
+
+ while #pfds > 0 do
+ local nfds, err = nixio.poll(pfds, -1)
+ if not nfds and err ~= nixio.const.EINTR then
+ break
+ end
+
+ local i
+ for i = #pfds, 1, -1 do
+ local rfd = pfds[i]
+ if rfd.revents > 0 then
+ local chunk, err = rfd.fd:read(4096)
+ if chunk and #chunk > 0 then
+ if rfd.cb then
+ rfd.cb(chunk)
+ else
+ rfd.buf = rfd.buf or {}
+ rfd.buf[#rfd.buf + 1] = chunk
+ end
+ else
+ table.remove(pfds, i)
+ if rfd.buf then
+ rv[rfd.name] = table.concat(rfd.buf, "")
+ end
+ rfd.fd:close()
+ end
+ end
+ end
+ end
+
+ if not nowait then
+ _, _, rv.code = nixio.waitpid(pid)
+ end
+
+ return rv
+end
+
user = {}
diff --git a/modules/luci-base/luasrc/sys.luadoc b/modules/luci-base/luasrc/sys.luadoc
index 3c7f69c6e9..162650e7ac 100644
--- a/modules/luci-base/luasrc/sys.luadoc
+++ b/modules/luci-base/luasrc/sys.luadoc
@@ -272,6 +272,42 @@ Send a signal to a process identified by given pid.
]]
---[[
+Execute a process, optionally capturing stdio.
+
+Executes the process specified by the given argv vector, e.g.
+`{ "/bin/sh", "-c", "echo 1" }` and waits for it to terminate unless a true
+value has been passed for the "nowait" parameter.
+
+When a function value is passed for the stdout or stderr arguments, the passed
+function is repeatedly called for each chunk read from the corresponding stdio
+stream. The read data is passed as string containing at most 4096 bytes at a
+time.
+
+When a true, non-function value is passed for the stdout or stderr arguments,
+the data of the corresponding stdio stream is read into an internal string
+buffer and returned as "stdout" or "stderr" field respectively in the result
+table.
+
+When a true value is passed to the nowait parameter, the function does not
+await process termination but returns as soon as all captured stdio streams
+have been closed or - if no streams are captured - immediately after launching
+the process.
+
+@class function
+@name process.exec
+@param commend Table containing the argv vector to execute
+@param stdout Callback function or boolean to indicate capturing (optional)
+@param stderr Callback function or boolean to indicate capturing (optional)
+@param nowait Don't wait for process termination when true (optional)
+@return Table containing at least the fields "code" which holds the exit
+ status of the invoked process or "-1" on error and "pid", which
+ contains the process id assigned to the spawned process. When
+ stdout and/or stderr capturing has been requested, it additionally
+ contains "stdout" and "stderr" fields respectively, holding the
+ captured stdio data as string.
+]]
+
+---[[
LuCI system utilities / user related functions.
@class module
diff --git a/modules/luci-base/luasrc/view/cbi/apply_widget.htm b/modules/luci-base/luasrc/view/cbi/apply_widget.htm
index 0df16e88c8..05511c9ab0 100644
--- a/modules/luci-base/luasrc/view/cbi/apply_widget.htm
+++ b/modules/luci-base/luasrc/view/cbi/apply_widget.htm
@@ -1,49 +1,4 @@
<% export("cbi_apply_widget", function(redirect_ok, rollback_token) -%>
-<style type="text/css">
- #cbi_apply_overlay {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- background: rgba(0, 0, 0, 0.7);
- display: none;
- z-index: 20000;
- }
-
- #cbi_apply_overlay .alert-message {
- position: relative;
- top: 10%;
- width: 60%;
- margin: auto;
- display: flex;
- flex-wrap: wrap;
- min-height: 32px;
- align-items: center;
- }
-
- #cbi_apply_overlay .alert-message > h4,
- #cbi_apply_overlay .alert-message > p,
- #cbi_apply_overlay .alert-message > div {
- flex-basis: 100%;
- }
-
- #cbi_apply_overlay .alert-message > img {
- margin-right: 1em;
- flex-basis: 32px;
- }
-
- body.apply-overlay-active {
- overflow: hidden;
- height: 100vh;
- }
-
- body.apply-overlay-active #cbi_apply_overlay {
- display: block;
- }
-</style>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.138.59467-72fe5dd"></script>
<script type="text/javascript">//<![CDATA[
var xhr = new XHR(),
uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' },
@@ -55,28 +10,22 @@
was_xhr_poll_running = false;
function uci_status_message(type, content) {
- var overlay = document.getElementById('cbi_apply_overlay') || document.body.appendChild(E('<div id="cbi_apply_overlay"><div class="alert-message"></div></div>')),
- message = overlay.querySelector('.alert-message');
-
- if (message && type) {
- if (!message.classList.contains(type)) {
- message.classList.remove('notice');
- message.classList.remove('warning');
- message.classList.add(type);
- }
+ if (type) {
+ var message = showModal('', '');
+
+ message.classList.add('alert-message');
+ DOMTokenList.prototype.add.apply(message.classList, type.split(/\s+/));
if (content)
message.innerHTML = content;
- document.body.classList.add('apply-overlay-active');
-
if (!was_xhr_poll_running) {
was_xhr_poll_running = XHR.running();
XHR.halt();
}
}
else {
- document.body.classList.remove('apply-overlay-active');
+ hideModal();
if (was_xhr_poll_running)
XHR.run();
@@ -85,19 +34,18 @@
function uci_rollback(checked) {
if (checked) {
- uci_status_message('warning',
- '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback));
+ uci_status_message('warning spinning',
+ '<p><%:Failed to confirm apply within %ds, waiting for rollback…%></p>'.format(uci_apply_rollback));
var call = function(r, data, duration) {
if (r.status === 204) {
uci_status_message('warning',
'<h4><%:Configuration has been rolled back!%></h4>' +
- '<p><%:The device could not be reached within %d seconds after applying the pending changes, which caused the configuration to be rolled back for safety reasons. If you believe that the configuration changes are correct nonetheless, proceed by applying anyway. Alternatively, you can dismiss this warning and edit changes before attempting to apply again, or revert all pending changes to keep the currently working configuration state.%></p>'.format(uci_apply_rollback) +
+ '<p><%:The device could not be reached within %d seconds after applying the pending changes, which caused the configuration to be rolled back for safety reasons. If you believe that the configuration changes are correct nonetheless, perform an unchecked configuration apply. Alternatively, you can dismiss this warning and edit changes before attempting to apply again, or revert all pending changes to keep the currently working configuration state.%></p>'.format(uci_apply_rollback) +
'<div class="right">' +
'<input type="button" class="btn" onclick="uci_status_message(false)" value="<%:Dismiss%>" /> ' +
'<input type="button" class="btn cbi-button-action important" onclick="uci_revert()" value="<%:Revert changes%>" /> ' +
- '<input type="button" class="btn cbi-button-negative important" onclick="uci_apply(false)" value="<%:Apply anyway%>" />' +
+ '<input type="button" class="btn cbi-button-negative important" onclick="uci_apply(false)" value="<%:Apply unchecked%>" />' +
'</div>');
return;
@@ -126,6 +74,7 @@
var call = function(r, data, duration) {
if (Date.now() >= deadline) {
+ window.clearTimeout(tt);
uci_rollback(checked);
return;
}
@@ -133,7 +82,7 @@
var indicator = document.querySelector('.uci_change_indicator');
if (indicator) indicator.style.display = 'none';
- uci_status_message('notice', '<%:Configuration has been applied.%>');
+ uci_status_message('notice', '<p><%:Configuration has been applied.%></p>');
window.clearTimeout(tt);
window.setTimeout(function() {
@@ -156,9 +105,8 @@
var tick = function() {
var now = Date.now();
- uci_status_message('notice',
- '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Waiting for configuration to be applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0)));
+ uci_status_message('notice spinning',
+ '<p><%:Waiting for configuration to get applied… %ds%></p>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0)));
if (now >= deadline)
return;
@@ -174,9 +122,7 @@
}
function uci_apply(checked) {
- uci_status_message('notice',
- '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Starting configuration apply…%>');
+ uci_status_message('notice spinning', '<p><%:Starting configuration apply…%></p>');
xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r, tok) {
if (r.status === (checked ? 200 : 204)) {
@@ -186,7 +132,7 @@
uci_confirm(checked, Date.now() + uci_apply_rollback * 1000);
}
else if (checked && r.status === 204) {
- uci_status_message('notice', '<%:There are no changes to apply.%>');
+ uci_status_message('notice', '<p><%:There are no changes to apply.%></p>');
window.setTimeout(function() {
<% if redirect_ok then -%>
location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
@@ -196,20 +142,18 @@
}, uci_apply_display * 1000);
}
else {
- uci_status_message('warning', '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status));
+ uci_status_message('warning', '<p><%_Apply request failed with status <code>%h</code>%></p>'.format(r.responseText || r.statusText || r.status));
window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
}
function uci_revert() {
- uci_status_message('notice',
- '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Reverting configuration…%>');
+ uci_status_message('notice spinning', '<p><%:Reverting configuration…%></p>');
xhr.post('<%=url("admin/uci/revert")%>', uci_apply_auth, function(r) {
if (r.status === 200) {
- uci_status_message('notice', '<%:Changes have been reverted.%>');
+ uci_status_message('notice', '<p><%:Changes have been reverted.%></p>');
window.setTimeout(function() {
<% if redirect_ok then -%>
location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
@@ -219,7 +163,7 @@
}, uci_apply_display * 1000);
}
else {
- uci_status_message('warning', '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status));
+ uci_status_message('warning', '<p><%_Revert request failed with status <code>%h</code>%></p>'.format(r.statusText || r.status));
window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
diff --git a/modules/luci-base/luasrc/view/cbi/dynlist.htm b/modules/luci-base/luasrc/view/cbi/dynlist.htm
index 4d0b50942b..fa7dbdb418 100644
--- a/modules/luci-base/luasrc/view/cbi/dynlist.htm
+++ b/modules/luci-base/luasrc/view/cbi/dynlist.htm
@@ -6,22 +6,8 @@
self.keylist, self.vallist,
self.datatype, self.optional or self.rmempty
})) ..
-
+ attr("data-values", luci.util.serialize_json(self:cfgvalue(section))) ..
ifattr(self.size, "data-size", self.size) ..
ifattr(self.placeholder, "data-placeholder", self.placeholder)
-%>>
-<%
- local vals = self:cfgvalue(section) or {}
- for i=1, #vals + 1 do
- local val = vals[i]
- if (val and #val > 0) or (i == 1) then
-%>
- <input class="cbi-input-text" value="<%=pcdata(val)%>" data-update="change" type="text"<%=
- attr("id", cbid .. "." .. i) ..
- attr("name", cbid) ..
- ifattr(self.size, "size") ..
- ifattr(i == 1 and self.placeholder, "placeholder", self.placeholder)
- %> /><br />
-<% end end %>
-</div>
+%>></div>
<%+cbi/valuefooter%>
diff --git a/modules/luci-base/luasrc/view/cbi/value.htm b/modules/luci-base/luasrc/view/cbi/value.htm
index 8eec865348..79a358b305 100644
--- a/modules/luci-base/luasrc/view/cbi/value.htm
+++ b/modules/luci-base/luasrc/view/cbi/value.htm
@@ -21,6 +21,6 @@
ifattr(#self.keylist > 0, "data-choices", { self.keylist, self.vallist })
%> />
<%- if self.password then -%>
- <div class="cbi-button cbi-button-neutral" title="<%:Reveal/hide password%>" onclick="var e = this.previousElementSibling; e.type = (e.type === 'password') ? 'text' : 'password'">∗</div>
+ <button class="cbi-button cbi-button-neutral" title="<%:Reveal/hide password%>" aria-label="<%:Reveal/hide password%>" onclick="var e = this.previousElementSibling; e.type = (e.type === 'password') ? 'text' : 'password'">∗</button>
<% end %>
<%+cbi/valuefooter%>
diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po
index c5e6c1a896..0d63d02192 100644
--- a/modules/luci-base/po/de/base.po
+++ b/modules/luci-base/po/de/base.po
@@ -3,14 +3,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 17:57+0200\n"
-"PO-Revision-Date: 2018-07-15 12:25+0200\n"
+"PO-Revision-Date: 2018-11-05 13:01+0100\n"
"Last-Translator: JoeSemler <josef.semler@gmail.com>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 2.0.5\n"
"Language-Team: \n"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:196
@@ -402,11 +402,11 @@ msgstr "Alias-Schnittstelle"
#: modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm:86
msgid "Alias of \"%s\""
-msgstr ""
+msgstr "Alias von \"%s\""
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:126
msgid "All Servers"
-msgstr ""
+msgstr "Alle Server"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:69
msgid ""
@@ -427,6 +427,8 @@ msgstr "Erlaube Anmeldung per Passwort"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:533
msgid "Allow AP mode to disconnect STAs based on low ACK condition"
msgstr ""
+"Erlaubt dem Access-Point die Trennung von Clients mit schlechter "
+"Signalqualität"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:450
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:577
@@ -480,6 +482,9 @@ msgid ""
"Always use 40MHz channels even if the secondary channel overlaps. Using this "
"option does not comply with IEEE 802.11n-2009!"
msgstr ""
+"Immer 40MHz Kanalbandbreite benutzen, auch wenn sich der sekundäre Kanal mit "
+"benachbarten Funkzellen überlappt. Die Benutzung dieser Option ist eine "
+"Verletzung des IEEE 802.11n-2009 Standards!"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:158
#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:260
@@ -488,7 +493,7 @@ msgstr ""
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:159
msgid "Annex A + L + M (all)"
-msgstr ""
+msgstr "Annex A, L und M (alle)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:167
msgid "Annex A G.992.1"
@@ -782,7 +787,7 @@ msgstr "Frequenztyp"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:258
msgid "Beacon Interval"
-msgstr ""
+msgstr "Beacon-Intervall"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:39
msgid ""
@@ -881,11 +886,11 @@ msgstr "Kategorie"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:44
msgid "Caution: Configuration files will be erased"
-msgstr ""
+msgstr "Achtung: Konfigurationsdateien werden gelöscht"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:48
msgid "Caution: System upgrade will be forced"
-msgstr ""
+msgstr "Achtung: Systemupgrade wird erzwungen"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:87
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:89
@@ -946,7 +951,7 @@ msgstr "Prüfsumme"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:70
msgid "Choose mtdblock"
-msgstr ""
+msgstr "Wähle \"mtdblock\" Datei"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:358
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_add.lua:87
@@ -990,6 +995,9 @@ msgid ""
"Click \"Save mtdblock\" to download specified mtdblock file. (NOTE: THIS "
"FEATURE IS FOR PROFESSIONALS! )"
msgstr ""
+"\"Speichere mtdblock\" anklicken um die ausgewählte mtdblock-Datei "
+"herunterzuladen. (Hinweis: Diese Funktionalität ist nur für Experten "
+"gedacht!)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:366
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:459
@@ -1041,7 +1049,7 @@ msgstr "Befehl"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:105
msgid "Comment"
-msgstr ""
+msgstr "Kommentar"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:185
msgid "Common Configuration"
@@ -1075,7 +1083,7 @@ msgstr "Konfiguration fehlgeschlagen"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:42
msgid "Configuration files will be kept"
-msgstr ""
+msgstr "Konfigurationsdateien werden beibehalten"
#: modules/luci-base/luasrc/view/cbi/apply_widget.htm:136
msgid "Configuration has been applied."
@@ -1420,7 +1428,7 @@ msgstr "Verschlüsselung deaktivieren"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:518
msgid "Disable Inactivity Polling"
-msgstr ""
+msgstr "Inaktivitäts-Proben deaktivieren"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua:106
msgid "Disable this network"
@@ -1442,7 +1450,7 @@ msgstr "Deaktiviert (Standard)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:532
msgid "Disassociate On Low Acknowledgement"
-msgstr ""
+msgstr "Trennung bei schlechtem Antwortverhalten"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:150
msgid "Discard upstream RFC1918 responses"
@@ -1538,7 +1546,7 @@ msgstr "Backup herunterladen"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:87
msgid "Download mtdblock"
-msgstr ""
+msgstr "ntdblock herunterladen"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:193
msgid "Downstream SNR offset"
@@ -1787,7 +1795,7 @@ msgstr "Hosts vervollständigen"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:246
msgid "Expecting %s"
-msgstr ""
+msgstr "Erwarte %s"
#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:218
msgid "Expires"
@@ -1952,7 +1960,7 @@ msgstr "Start erzwingen"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:255
msgid "Force 40MHz mode"
-msgstr ""
+msgstr "40MHz-Modus forcieren"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:610
msgid "Force CCMP (AES)"
@@ -1978,7 +1986,7 @@ msgstr "Erzwinge Verbindung"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:113
msgid "Force upgrade"
-msgstr ""
+msgstr "Erzwinge Upgrade"
#: protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua:60
msgid "Force use of NAT-T"
@@ -2171,7 +2179,7 @@ msgstr "ESSID verstecken"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:140
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:310
msgid "Hide empty chains"
-msgstr ""
+msgstr "Leere Chains ausblenden"
#: modules/luci-base/luasrc/view/lease_status.htm:86
#: modules/luci-base/luasrc/view/wifi_assoclist.htm:75
@@ -2218,7 +2226,7 @@ msgstr ""
#: protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua:45
msgid "IKE DH Group"
-msgstr ""
+msgstr "IKE-DH-Gruppe"
#: protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua:41
msgid "IP Addresses"
@@ -2226,7 +2234,7 @@ msgstr "IP-Adressen"
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:40
msgid "IP Protocol"
-msgstr ""
+msgstr "IP-Protokoll"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/hosts.lua:19
msgid "IP address"
@@ -2278,7 +2286,7 @@ msgstr "IPv4 Netzmaske"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:323
msgid "IPv4 network in address/netmask notation"
-msgstr ""
+msgstr "IPv4-Netzwerk in Addresse/Netzmaske-Notation"
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua:25
msgid "IPv4 prefix"
@@ -2349,7 +2357,7 @@ msgstr "IPv6 Gateway"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:328
msgid "IPv6 network in address/netmask notation"
-msgstr ""
+msgstr "IPv6-Netzwerk in Addresse/Netzmaske-Notation"
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua:26
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua:37
@@ -3056,7 +3064,7 @@ msgstr "Maximal erreichbare Datenrate (ATTNDR)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:527
msgid "Maximum allowed Listen Interval"
-msgstr ""
+msgstr "Maximal erlaubter Inaktivitätszeitraum"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:193
msgid "Maximum allowed number of active DHCP leases"
@@ -3150,7 +3158,7 @@ msgstr "Modell"
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:31
msgid "Modem default"
-msgstr ""
+msgstr "Modem-Grundeinstellung"
#: protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua:11
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:19
@@ -3367,7 +3375,7 @@ msgstr "Keine Regeln in dieser Kette"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:171
msgid "No scan results available yet..."
-msgstr ""
+msgstr "Noch keine Scan-Ergebnisse verfügbar..."
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:25
msgid "No zone assigned"
@@ -3440,7 +3448,7 @@ msgstr ""
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:125
msgid "Number of parallel threads used for compression"
-msgstr ""
+msgstr "Für Kompression benutze parallele Prozessanzahl"
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:106
msgid "OK"
@@ -3899,7 +3907,7 @@ msgstr "Bitte Benutzernamen und Passwort eingeben."
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:105
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:113
msgid "Please update package lists first"
-msgstr ""
+msgstr "Bitte zuerst die Paketlisten aktualisieren"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:87
msgid "Policy"
@@ -4396,7 +4404,7 @@ msgstr ""
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:281
msgid "Rule"
-msgstr ""
+msgstr "Regel"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/mount.lua:148
msgid "Run a filesystem check before mounting the device"
@@ -4460,11 +4468,11 @@ msgstr "Speichern & Anwenden"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:89
msgid "Save mtdblock"
-msgstr ""
+msgstr "Speichere mtdblock"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:64
msgid "Save mtdblock contents"
-msgstr ""
+msgstr "Inhalte von mtdblock-Partitionen speichern"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua:82
msgid "Scan"
@@ -4472,7 +4480,7 @@ msgstr "Scan"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:133
msgid "Scan request failed"
-msgstr ""
+msgstr "Scan-Anforderung fehlgeschlagen"
#: modules/luci-mod-system/luasrc/controller/admin/system.lua:21
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/crontab.lua:8
@@ -4497,6 +4505,9 @@ msgid ""
"fails. Use only if you are sure that the firmware is correct and meant for "
"your device!"
msgstr ""
+"\"Upgrade erzwingen\" auswählen um die Abbilddatei auch dann zu schreiben, "
+"wenn die Formatüberprüfung fehlschlägt. Diese Option nur benutzen wenn das "
+"Abbild korrekt und für dieses Gerät bestimmt ist!"
#: protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua:119
#: protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua:90
@@ -4568,7 +4579,7 @@ msgstr "kurzes Guardintervall"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:504
msgid "Short Preamble"
-msgstr ""
+msgstr "Kurze Präambel"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:18
msgid "Show current backup file list"
@@ -4576,7 +4587,7 @@ msgstr "Zeige aktuelle Liste der gesicherten Dateien"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:140
msgid "Show empty chains"
-msgstr ""
+msgstr "Leere Chains anzeigen"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:53
msgid "Shutdown this interface"
@@ -4615,7 +4626,7 @@ msgstr "Größe des DNS-Caches"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:113
msgid "Size of the ZRam device in megabytes"
-msgstr ""
+msgstr "Größe der ZRAM-Gerätedatei in Megabytes."
#: modules/luci-base/luasrc/view/cbi/footer.htm:18
#: modules/luci-base/luasrc/view/cbi/simpleform.htm:57
@@ -4738,7 +4749,7 @@ msgstr "Starte Anwendung der Konfigurationsänderungen..."
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:128
msgid "Starting wireless scan..."
-msgstr ""
+msgstr "Starte WLAN Scan..."
#: modules/luci-mod-system/luasrc/controller/admin/system.lua:20
msgid "Startup"
@@ -4777,7 +4788,7 @@ msgstr ""
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:522
msgid "Station inactivity limit"
-msgstr ""
+msgstr "Client-Inaktivitäts-Limit"
#: modules/luci-base/luasrc/controller/admin/index.lua:40
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:197
@@ -5270,7 +5281,7 @@ msgstr "Die Zeitsynchronisation wurde noch nicht konfiguriert."
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:513
msgid "Time interval for rekeying GTK"
-msgstr ""
+msgstr "Zeitintervall für die neubestimmung des Gruppenschlüssels"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:44
msgid "Timezone"
@@ -5877,22 +5888,25 @@ msgid ""
"upgrade it to at least version 7 or use another browser like Firefox, Opera "
"or Safari."
msgstr ""
+"Die benutzte Version des Internet Explorers ist zu alt, um diese Seite "
+"korrekt darzustellen. Bitte mindestens auf Version 7 upgraden oder einen "
+"anderen Browser wie Firefox, Opera oder Safari benutzen."
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:118
msgid "ZRam Compression Algorithm"
-msgstr ""
+msgstr "ZRAM Kompressionsalgorithmus"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:125
msgid "ZRam Compression Streams"
-msgstr ""
+msgstr "ZRAM Kompressionsprozesse"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:25
msgid "ZRam Settings"
-msgstr ""
+msgstr "ZRAM Einstellungen"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:113
msgid "ZRam Size"
-msgstr ""
+msgstr "ZRAM Größe"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:187
msgid "any"
@@ -5995,7 +6009,7 @@ msgstr "Halb-Duplex"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:589
msgid "hexadecimal encoded value"
-msgstr ""
+msgstr "hexadezimal kodierten Wert"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:162
msgid "hidden"
@@ -6050,11 +6064,11 @@ msgstr "kbit/s"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:427
msgid "key between 8 and 63 characters"
-msgstr ""
+msgstr "Schlüssel zwischen 8 und 63 Zeichen"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:439
msgid "key with either 5 or 13 characters"
-msgstr ""
+msgstr "Schlüssel mit exakt 5 oder 13 Zeichen"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:50
msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
@@ -6066,7 +6080,7 @@ msgstr "Minuten"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:66
msgid "mixed WPA/WPA2"
-msgstr ""
+msgstr "gemischtes WPA/WPA2"
#: modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm:44
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua:225
@@ -6080,7 +6094,7 @@ msgstr "nicht verbunden"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:241
msgid "non-empty value"
-msgstr ""
+msgstr "nicht-leeren Wert"
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:156
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:157
@@ -6119,6 +6133,8 @@ msgid ""
"one of:\n"
" - %s"
msgstr ""
+"einen von:\n"
+"- %s"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:71
msgid "open"
@@ -6134,11 +6150,11 @@ msgstr "Overlay"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:273
msgid "positive decimal value"
-msgstr ""
+msgstr "positiven Dezimalwert"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:265
msgid "positive integer value"
-msgstr ""
+msgstr "positive Ganzzahl"
#: protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua:34
msgid "random"
@@ -6157,7 +6173,7 @@ msgstr "routed"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:513
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:522
msgid "sec"
-msgstr ""
+msgstr "Sekunden"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:525
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:531
@@ -6186,7 +6202,7 @@ msgstr "Zeiteinheiten (TUs / 1024 ms) [1000-65535]"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:579
msgid "unique value"
-msgstr ""
+msgstr "eindeutigen Wert"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:69
msgid "unknown"
@@ -6213,159 +6229,159 @@ msgstr "untagged"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:278
msgid "valid IP address"
-msgstr ""
+msgstr "gültige IP-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:278
msgid "valid IP address or prefix"
-msgstr ""
+msgstr "gültige IP-Adresse oder gültigen IP-Präfix"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:313
msgid "valid IPv4 CIDR"
-msgstr ""
+msgstr "gültige IPv4-CIDR-Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:286
msgid "valid IPv4 address"
-msgstr ""
+msgstr "gültige IPv4-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:286
msgid "valid IPv4 address or network"
-msgstr ""
+msgstr "gültige IPv4-Adresse oder gültiges IPv4-Netzwerk"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:406
msgid "valid IPv4 address:port"
-msgstr ""
+msgstr "gültige IPv4 \"Adresse:Port\" Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:346
msgid "valid IPv4 network"
-msgstr ""
+msgstr "gültiges IPv4-Netzwerk"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:308
msgid "valid IPv4 or IPv6 CIDR"
-msgstr ""
+msgstr "gültige IPv4- oder IPv6-CIDR-Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:299
msgid "valid IPv4 prefix value (0-32)"
-msgstr ""
+msgstr "gültigen IPv4-Präfix-Wert (0-32)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:318
msgid "valid IPv6 CIDR"
-msgstr ""
+msgstr "gültige iPv6-CIDR-Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:294
msgid "valid IPv6 address"
-msgstr ""
+msgstr "gültige IPv6-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:294
msgid "valid IPv6 address or prefix"
-msgstr ""
+msgstr "gültige IPv6-Addresse oder gültiges IPv6-Präfix"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:336
msgid "valid IPv6 host id"
-msgstr ""
+msgstr "gültige IPv6 Host-Identifikation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:351
msgid "valid IPv6 network"
-msgstr ""
+msgstr "gültiges IPv6-Netzwerk"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:304
msgid "valid IPv6 prefix value (0-128)"
-msgstr ""
+msgstr "gültigen IPv6-Präfix-Wert (0-128)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:372
msgid "valid MAC address"
-msgstr ""
+msgstr "gültige MAC-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:443
msgid "valid UCI identifier"
-msgstr ""
+msgstr "gültigen UCI-Bezeichner"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:394
msgid "valid UCI identifier, hostname or IP address"
-msgstr ""
+msgstr "gültigen UCI-Bezeichner, Hostnamen oder IP-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:415
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:418
msgid "valid address:port"
-msgstr ""
+msgstr "gültige \"Adresse:Port\" Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:553
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:557
msgid "valid date (YYYY-MM-DD)"
-msgstr ""
+msgstr "gültiges Datum (JJJJ-MM-DD)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:269
msgid "valid decimal value"
-msgstr ""
+msgstr "gültigen Dezimalwert"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:437
msgid "valid hexadecimal WEP key"
-msgstr ""
+msgstr "gültigen hexadezimalen WEP-Schlüssel"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:425
msgid "valid hexadecimal WPA key"
-msgstr ""
+msgstr "gültigen hexadezimalen WPA-Schlüssel"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:400
msgid "valid host:port"
-msgstr ""
+msgstr "gültige \"Host:Port\" Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:387
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:389
msgid "valid hostname"
-msgstr ""
+msgstr "gültigen Hostnamen"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:377
msgid "valid hostname or IP address"
-msgstr ""
+msgstr "gültigen Hostnamen oder IP-Adresse"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:261
msgid "valid integer value"
-msgstr ""
+msgstr "gültige Ganzzahl"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:341
msgid "valid network in address/netmask notation"
-msgstr ""
+msgstr "gültiges Netzwerk in \"Addresse/Netzmaske\" Notation"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:528
msgid "valid phone digit (0-9, \"*\", \"#\", \"!\" or \".\")"
-msgstr ""
+msgstr "gültige Telefonnummernziffer (0-0, \"*\", \"#\", \"!\" oder \".\")"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:364
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:367
msgid "valid port or port range (port1-port2)"
-msgstr ""
+msgstr "gültigen Netzwerkport oder Port-Bereich (von-bis)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:356
msgid "valid port value"
-msgstr ""
+msgstr "gültigen Netzwerkport"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:533
msgid "valid time (HH:MM:SS)"
-msgstr ""
+msgstr "gültige Zeit (SS:MM:ss)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:462
msgid "value between %d and %d characters"
-msgstr ""
+msgstr "Wert zwischen %d und %d Zeichen"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:448
msgid "value between %f and %f"
-msgstr ""
+msgstr "Wert zwischen %f und %f"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:452
msgid "value greater or equal to %f"
-msgstr ""
+msgstr "Wert größer oder gleich %f"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:456
msgid "value smaller or equal to %f"
-msgstr ""
+msgstr "Wert kleiner oder gleich %f"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:467
msgid "value with at least %d characters"
-msgstr ""
+msgstr "Wert mit mindestens %d Zeichen"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:472
msgid "value with at most %d characters"
-msgstr ""
+msgstr "Wert mit maximal %d Zeichen"
#: modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm:44
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua:221
diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po
index 17dbe957a0..74558ccda9 100644
--- a/modules/luci-base/po/zh-cn/base.po
+++ b/modules/luci-base/po/zh-cn/base.po
@@ -855,11 +855,11 @@ msgstr "分类"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:44
msgid "Caution: Configuration files will be erased"
-msgstr ""
+msgstr "注意:配置文件将被删除"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:48
msgid "Caution: System upgrade will be forced"
-msgstr ""
+msgstr "注意:将强制进行系统升级"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:87
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:89
@@ -917,7 +917,7 @@ msgstr "校验值"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:70
msgid "Choose mtdblock"
-msgstr ""
+msgstr "选择 mtdblock"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:358
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_add.lua:87
@@ -955,6 +955,8 @@ msgid ""
"Click \"Save mtdblock\" to download specified mtdblock file. (NOTE: THIS "
"FEATURE IS FOR PROFESSIONALS! )"
msgstr ""
+"单击“保存 mtdblock”以下载指定的 mtdblock 文件。(注意:此功能适用于专业人"
+"士!)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:366
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:459
@@ -1004,7 +1006,7 @@ msgstr "命令"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:105
msgid "Comment"
-msgstr ""
+msgstr "备注"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:185
msgid "Common Configuration"
@@ -1037,7 +1039,7 @@ msgstr "配置失败"
#: modules/luci-mod-system/luasrc/view/admin_system/upgrade.htm:42
msgid "Configuration files will be kept"
-msgstr ""
+msgstr "将保留配置文件"
#: modules/luci-base/luasrc/view/cbi/apply_widget.htm:136
msgid "Configuration has been applied."
@@ -1376,7 +1378,7 @@ msgstr "禁用加密"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:518
msgid "Disable Inactivity Polling"
-msgstr ""
+msgstr "禁用不活动轮询"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua:106
msgid "Disable this network"
@@ -1489,7 +1491,7 @@ msgstr "下载备份"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:87
msgid "Download mtdblock"
-msgstr ""
+msgstr "下载 mtdblock"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:193
msgid "Downstream SNR offset"
@@ -1731,7 +1733,7 @@ msgstr "扩展 HOSTS 文件中的主机后缀"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:246
msgid "Expecting %s"
-msgstr ""
+msgstr "期望 %s"
#: modules/luci-mod-status/luasrc/view/admin_status/index.htm:218
msgid "Expires"
@@ -1912,7 +1914,7 @@ msgstr "强制链路"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:113
msgid "Force upgrade"
-msgstr ""
+msgstr "强制升级"
#: protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua:60
msgid "Force use of NAT-T"
@@ -2100,7 +2102,7 @@ msgstr "隐藏 <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:140
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:310
msgid "Hide empty chains"
-msgstr ""
+msgstr "隐藏空链"
#: modules/luci-base/luasrc/view/lease_status.htm:86
#: modules/luci-base/luasrc/view/wifi_assoclist.htm:75
@@ -2155,7 +2157,7 @@ msgstr "IP 地址"
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:40
msgid "IP Protocol"
-msgstr ""
+msgstr "IP 协议"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/hosts.lua:19
msgid "IP address"
@@ -2207,7 +2209,7 @@ msgstr "IPv4 子网掩码"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:323
msgid "IPv4 network in address/netmask notation"
-msgstr ""
+msgstr "地址/网络掩码表示法中的 IPv4 网络"
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua:25
msgid "IPv4 prefix"
@@ -2220,7 +2222,7 @@ msgstr "IPv4 地址前缀长度"
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:43
msgid "IPv4+IPv6"
-msgstr ""
+msgstr "IPv4+IPv6"
#: modules/luci-base/luasrc/view/lease_status.htm:72
msgid "IPv4-Address"
@@ -2278,7 +2280,7 @@ msgstr "IPv6 网关"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:328
msgid "IPv6 network in address/netmask notation"
-msgstr ""
+msgstr "地址/网络掩码表示法中的 IPv6 网络"
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua:26
#: protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua:37
@@ -2955,7 +2957,7 @@ msgstr "最大可达数据速率(ATTNDR)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:527
msgid "Maximum allowed Listen Interval"
-msgstr ""
+msgstr "允许的最大监听间隔"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:193
msgid "Maximum allowed number of active DHCP leases"
@@ -3048,14 +3050,14 @@ msgstr "主机型号"
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:31
msgid "Modem default"
-msgstr ""
+msgstr "调制解调器默认"
#: protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua:11
#: protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua:19
#: protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua:11
#: protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua:10
msgid "Modem device"
-msgstr "调制解调器节点"
+msgstr "调制解调器设备"
#: protocols/luci-proto-ncm/luasrc/model/network/proto_ncm.lua:66
msgid "Modem information query failed"
@@ -3333,7 +3335,7 @@ msgstr "缓存的 DNS 条目数量(最大 10000,0 表示不缓存)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:125
msgid "Number of parallel threads used for compression"
-msgstr ""
+msgstr "用于压缩的并行线程数"
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:106
msgid "OK"
@@ -3780,7 +3782,7 @@ msgstr "请输入用户名和密码。"
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:105
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:113
msgid "Please update package lists first"
-msgstr ""
+msgstr "请先更新软件包列表"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:87
msgid "Policy"
@@ -4262,7 +4264,7 @@ msgstr "路由表描述了数据包的可达路径。"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:281
msgid "Rule"
-msgstr ""
+msgstr "规则"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/mount.lua:148
msgid "Run a filesystem check before mounting the device"
@@ -4311,7 +4313,7 @@ msgstr "SSID"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua:236
msgid "SWAP"
-msgstr ""
+msgstr "交换分区"
#: modules/luci-base/luasrc/view/cbi/error.htm:17
#: modules/luci-base/luasrc/view/cbi/footer.htm:26
@@ -4326,11 +4328,11 @@ msgstr "保存并应用"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:89
msgid "Save mtdblock"
-msgstr ""
+msgstr "保存 mtdblock"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:64
msgid "Save mtdblock contents"
-msgstr ""
+msgstr "保存 mtdblock 内容"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua:82
msgid "Scan"
@@ -4363,6 +4365,8 @@ msgid ""
"fails. Use only if you are sure that the firmware is correct and meant for "
"your device!"
msgstr ""
+"即使映像文件检查失败,也“强制升级”以烧录映像。仅在您确定固件正确且适用于您的"
+"设备时使用!"
#: protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua:119
#: protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua:90
@@ -4438,7 +4442,7 @@ msgstr "显示当前备份文件列表"
#: modules/luci-mod-status/luasrc/view/admin_status/iptables.htm:140
msgid "Show empty chains"
-msgstr ""
+msgstr "显示空链"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua:53
msgid "Shutdown this interface"
@@ -4477,7 +4481,7 @@ msgstr "DNS 查询缓存的大小"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:113
msgid "Size of the ZRam device in megabytes"
-msgstr ""
+msgstr "ZRam 设备的大小(以兆字节为单位)"
#: modules/luci-base/luasrc/view/cbi/footer.htm:18
#: modules/luci-base/luasrc/view/cbi/simpleform.htm:57
@@ -4627,7 +4631,7 @@ msgstr ""
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:522
msgid "Station inactivity limit"
-msgstr ""
+msgstr "非活动站点限制"
#: modules/luci-base/luasrc/controller/admin/index.lua:40
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:197
@@ -5065,7 +5069,7 @@ msgstr "尚未配置时间同步。"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:513
msgid "Time interval for rekeying GTK"
-msgstr ""
+msgstr "重新加密 GTK 的时间间隔"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:44
msgid "Timezone"
@@ -5664,19 +5668,19 @@ msgstr ""
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:118
msgid "ZRam Compression Algorithm"
-msgstr ""
+msgstr "ZRam 压缩算法"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:125
msgid "ZRam Compression Streams"
-msgstr ""
+msgstr "ZRam 压缩流"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:25
msgid "ZRam Settings"
-msgstr ""
+msgstr "ZRam 设置"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:113
msgid "ZRam Size"
-msgstr ""
+msgstr "ZRam 大小"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:187
msgid "any"
@@ -5781,7 +5785,7 @@ msgstr "半双工"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:589
msgid "hexadecimal encoded value"
-msgstr ""
+msgstr "十六进制编码值"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:162
msgid "hidden"
@@ -5836,11 +5840,11 @@ msgstr "kbit/s"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:427
msgid "key between 8 and 63 characters"
-msgstr ""
+msgstr "密钥在 8 到 63 个字符之间"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:439
msgid "key with either 5 or 13 characters"
-msgstr ""
+msgstr "密钥为 5 或 13 个字符"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/dhcp.lua:50
msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
@@ -5866,7 +5870,7 @@ msgstr "未连接"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:241
msgid "non-empty value"
-msgstr ""
+msgstr "非空值"
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:156
#: modules/luci-mod-system/luasrc/view/admin_system/packages.htm:157
@@ -5905,6 +5909,8 @@ msgid ""
"one of:\n"
" - %s"
msgstr ""
+"其一:\n"
+" - %s"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:71
msgid "open"
@@ -5920,11 +5926,11 @@ msgstr "覆盖"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:273
msgid "positive decimal value"
-msgstr ""
+msgstr "正十进制值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:265
msgid "positive integer value"
-msgstr ""
+msgstr "正整数值"
#: protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua:34
msgid "random"
@@ -5943,7 +5949,7 @@ msgstr "已路由"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:513
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:522
msgid "sec"
-msgstr ""
+msgstr "秒"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:525
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:531
@@ -5972,7 +5978,7 @@ msgstr "时间单位(TUs / 1.024ms)[1000-65535]"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:579
msgid "unique value"
-msgstr ""
+msgstr "唯一值"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_join.htm:69
msgid "unknown"
@@ -5999,159 +6005,159 @@ msgstr "未标记"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:278
msgid "valid IP address"
-msgstr ""
+msgstr "有效 IP 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:278
msgid "valid IP address or prefix"
-msgstr ""
+msgstr "有效 IP 地址或前缀"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:313
msgid "valid IPv4 CIDR"
-msgstr ""
+msgstr "有效 IPv4 CIDR"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:286
msgid "valid IPv4 address"
-msgstr ""
+msgstr "有效 IPv4 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:286
msgid "valid IPv4 address or network"
-msgstr ""
+msgstr "有效 IPv4 地址或网络"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:406
msgid "valid IPv4 address:port"
-msgstr ""
+msgstr "有效 IPv4 address:port"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:346
msgid "valid IPv4 network"
-msgstr ""
+msgstr "有效 IPv4 网络"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:308
msgid "valid IPv4 or IPv6 CIDR"
-msgstr ""
+msgstr "有效 IPv4 或 IPv6 CIDR"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:299
msgid "valid IPv4 prefix value (0-32)"
-msgstr ""
+msgstr "有效 IPv4 前缀值(0-32)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:318
msgid "valid IPv6 CIDR"
-msgstr ""
+msgstr "有效 IPv6 CIDR"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:294
msgid "valid IPv6 address"
-msgstr ""
+msgstr "有效 IPv6 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:294
msgid "valid IPv6 address or prefix"
-msgstr ""
+msgstr "有效 IPv6 地址或前缀"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:336
msgid "valid IPv6 host id"
-msgstr ""
+msgstr "有效 IPv6 主机 ID"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:351
msgid "valid IPv6 network"
-msgstr ""
+msgstr "有效 IPv6 网络"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:304
msgid "valid IPv6 prefix value (0-128)"
-msgstr ""
+msgstr "有效 IPv6 前缀值(0-128)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:372
msgid "valid MAC address"
-msgstr ""
+msgstr "有效 MAC 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:443
msgid "valid UCI identifier"
-msgstr ""
+msgstr "有效 UCI 识别"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:394
msgid "valid UCI identifier, hostname or IP address"
-msgstr ""
+msgstr "有效 UCI 标识符,主机名或 IP 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:415
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:418
msgid "valid address:port"
-msgstr ""
+msgstr "有效 address:port"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:553
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:557
msgid "valid date (YYYY-MM-DD)"
-msgstr ""
+msgstr "有效日期(YYYY-MM-DD)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:269
msgid "valid decimal value"
-msgstr ""
+msgstr "有效十进制值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:437
msgid "valid hexadecimal WEP key"
-msgstr ""
+msgstr "有效十六进制 WEP 密钥"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:425
msgid "valid hexadecimal WPA key"
-msgstr ""
+msgstr "有效十六进制 WPA 密钥"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:400
msgid "valid host:port"
-msgstr ""
+msgstr "有效 host:port"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:387
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:389
msgid "valid hostname"
-msgstr ""
+msgstr "有效主机名"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:377
msgid "valid hostname or IP address"
-msgstr ""
+msgstr "有效主机名或 IP 地址"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:261
msgid "valid integer value"
-msgstr ""
+msgstr "有效整数值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:341
msgid "valid network in address/netmask notation"
-msgstr ""
+msgstr "地址/网络掩码表示法中的有效网络"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:528
msgid "valid phone digit (0-9, \"*\", \"#\", \"!\" or \".\")"
-msgstr ""
+msgstr "有效电话号码(0-9、“*”、“#”、“!”或“.”)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:364
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:367
msgid "valid port or port range (port1-port2)"
-msgstr ""
+msgstr "有效端口或端口范围(port1-port2)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:356
msgid "valid port value"
-msgstr ""
+msgstr "有效端口值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:533
msgid "valid time (HH:MM:SS)"
-msgstr ""
+msgstr "有效时间(HH:MM:SS)"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:462
msgid "value between %d and %d characters"
-msgstr ""
+msgstr "%d 和 %d 字符之间的值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:448
msgid "value between %f and %f"
-msgstr ""
+msgstr "%f 和 %f 之间的值"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:452
msgid "value greater or equal to %f"
-msgstr ""
+msgstr "值大于或等于 %f"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:456
msgid "value smaller or equal to %f"
-msgstr ""
+msgstr "值小于或等于 %f"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:467
msgid "value with at least %d characters"
-msgstr ""
+msgstr "值至少为 %d 个字符"
#: modules/luci-base/htdocs/luci-static/resources/cbi.js:472
msgid "value with at most %d characters"
-msgstr ""
+msgstr "值至多为 %d 个字符"
#: modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm:44
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua:221
diff --git a/modules/luci-mod-freifunk/Makefile b/modules/luci-mod-freifunk/Makefile
index 550db1df15..70de10879c 100644
--- a/modules/luci-mod-freifunk/Makefile
+++ b/modules/luci-mod-freifunk/Makefile
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Freifunk module
-LUCI_DEPENDS:=+luci-mod-admin-full +luci-lib-json +freifunk-firewall +freifunk-common
+LUCI_DEPENDS:=+luci-mod-admin-full +luci-lib-json +luci-lib-ipkg +freifunk-firewall +freifunk-common
include ../../luci.mk
diff --git a/modules/luci-mod-status/luasrc/view/admin_status/index.htm b/modules/luci-mod-status/luasrc/view/admin_status/index.htm
index 54e35b82a0..b98ba76f89 100644
--- a/modules/luci-mod-status/luasrc/view/admin_status/index.htm
+++ b/modules/luci-mod-status/luasrc/view/admin_status/index.htm
@@ -132,21 +132,17 @@
<%+header%>
<script type="text/javascript">//<![CDATA[
- function progressbar(v, m)
+ function progressbar(q, v, m)
{
- var vn = parseInt(v) || 0;
- var mn = parseInt(m) || 100;
- var pc = Math.floor((100 / mn) * vn);
-
- return String.format(
- '<div style="width:100%%; max-width:200px; position:relative; border:1px solid #999999">' +
- '<div style="background-color:#CCCCCC; width:%d%%; height:15px">' +
- '<div style="position:absolute; left:0; top:0; text-align:center; width:100%%; color:#000000">' +
- '<small>%s / %s (%d%%)</small>' +
- '</div>' +
- '</div>' +
- '</div>', pc, v, m, pc
- );
+ var pg = document.querySelector(q),
+ vn = parseInt(v) || 0,
+ mn = parseInt(m) || 100,
+ pc = Math.floor((100 / mn) * vn);
+
+ if (pg) {
+ pg.firstElementChild.style.width = pc + '%';
+ pg.setAttribute('title', '%s / %s (%d%%)'.format(v, m, pc));
+ }
}
function labelList(items, offset) {
@@ -350,38 +346,28 @@
info.loadavg[2] / 65535.0
);
- if (e = document.getElementById('memtotal'))
- e.innerHTML = progressbar(
- ((info.memory.free + info.memory.buffered) / 1024) + " <%:kB%>",
- (info.memory.total / 1024) + " <%:kB%>"
- );
+ progressbar('#memtotal',
+ ((info.memory.free + info.memory.buffered) / 1024) + " <%:kB%>",
+ (info.memory.total / 1024) + " <%:kB%>");
- if (e = document.getElementById('memfree'))
- e.innerHTML = progressbar(
- (info.memory.free / 1024) + " <%:kB%>",
- (info.memory.total / 1024) + " <%:kB%>"
- );
+ progressbar('#memfree',
+ (info.memory.free / 1024) + " <%:kB%>",
+ (info.memory.total / 1024) + " <%:kB%>");
- if (e = document.getElementById('membuff'))
- e.innerHTML = progressbar(
- (info.memory.buffered / 1024) + " <%:kB%>",
- (info.memory.total / 1024) + " <%:kB%>"
- );
+ progressbar('#membuff',
+ (info.memory.buffered / 1024) + " <%:kB%>",
+ (info.memory.total / 1024) + " <%:kB%>");
- if (e = document.getElementById('swaptotal'))
- e.innerHTML = progressbar(
- (info.swap.free / 1024) + " <%:kB%>",
- (info.swap.total / 1024) + " <%:kB%>"
- );
+ progressbar('#swaptotal',
+ (info.swap.free / 1024) + " <%:kB%>",
+ (info.swap.total / 1024) + " <%:kB%>");
- if (e = document.getElementById('swapfree'))
- e.innerHTML = progressbar(
- (info.swap.free / 1024) + " <%:kB%>",
- (info.swap.total / 1024) + " <%:kB%>"
- );
+ progressbar('#swapfree',
+ (info.swap.free / 1024) + " <%:kB%>",
+ (info.swap.total / 1024) + " <%:kB%>");
- if (e = document.getElementById('conns'))
- e.innerHTML = progressbar(info.conncount, info.connmax);
+ progressbar('#conns',
+ info.conncount, info.connmax);
}
);
@@ -411,9 +397,9 @@
<h3><%:Memory%></h3>
<div class="table" width="100%">
- <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="memtotal">-</div></div>
- <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="memfree">-</div></div>
- <div class="tr"><div class="td left" width="33%"><%:Buffered%></div><div class="td left" id="membuff">-</div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left"><div id="memtotal" class="cbi-progressbar" title="-"><div></div></div></div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left"><div id="memfree" class="cbi-progressbar" title="-"><div></div></div></div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Buffered%></div><div class="td left"><div id="membuff" class="cbi-progressbar" title="-"><div></div></div></div></div>
</div>
</div>
@@ -422,8 +408,8 @@
<h3><%:Swap%></h3>
<div class="table" width="100%">
- <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="swaptotal">-</div></div>
- <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="swapfree">-</div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left"><div id="swaptotal" class="cbi-progressbar" title="-"><div></div></div></div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left"><div id="swapfree" class="cbi-progressbar" title="-"><div></div></div></div></div>
</div>
</div>
<% end %>
@@ -436,7 +422,7 @@
</div>
<div class="table" width="100%">
- <div class="tr"><div class="td left" width="33%"><%:Active Connections%></div><div class="td left" id="conns">-</div></div>
+ <div class="tr"><div class="td left" width="33%"><%:Active Connections%></div><div class="td left"><div id="conns" class="cbi-progressbar" title="-"><div></div></div></div></div>
</div>
</div>
diff --git a/modules/luci-mod-system/luasrc/controller/admin/system.lua b/modules/luci-mod-system/luasrc/controller/admin/system.lua
index 4e83769ee0..68ca88b980 100644
--- a/modules/luci-mod-system/luasrc/controller/admin/system.lua
+++ b/modules/luci-mod-system/luasrc/controller/admin/system.lua
@@ -11,12 +11,6 @@ function index()
entry({"admin", "system", "clock_status"}, post_on({ set = true }, "action_clock_status"))
entry({"admin", "system", "admin"}, cbi("admin_system/admin"), _("Administration"), 2)
-
- if fs.access("/bin/opkg") then
- entry({"admin", "system", "packages"}, post_on({ exec = "1" }, "action_packages"), _("Software"), 10)
- entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg"))
- end
-
entry({"admin", "system", "startup"}, form("admin_system/startup"), _("Startup"), 45)
entry({"admin", "system", "crontab"}, form("admin_system/crontab"), _("Scheduled Tasks"), 46)
@@ -61,124 +55,6 @@ function action_clock_status()
luci.http.write_json({ timestring = os.date("%c") })
end
-function action_packages()
- local fs = require "nixio.fs"
- local ipkg = require "luci.model.ipkg"
- local submit = (luci.http.formvalue("exec") == "1")
- local update, upgrade
- local changes = false
- local install = { }
- local remove = { }
- local stdout = { "" }
- local stderr = { "" }
- local out, err
-
- -- Display
- local display = luci.http.formvalue("display") or "available"
-
- -- Letter
- local letter = string.byte(luci.http.formvalue("letter") or "A", 1)
- letter = (letter == 35 or (letter >= 65 and letter <= 90)) and letter or 65
-
- -- Search query
- local query = luci.http.formvalue("query")
- query = (query ~= '') and query or nil
-
-
- -- Modifying actions
- if submit then
- -- Packets to be installed
- local ninst = luci.http.formvalue("install")
- local uinst = nil
-
- -- Install from URL
- local url = luci.http.formvalue("url")
- if url and url ~= '' then
- uinst = url
- end
-
- -- Do install
- if ninst then
- install[ninst], out, err = ipkg.install(ninst)
- stdout[#stdout+1] = out
- stderr[#stderr+1] = err
- changes = true
- end
-
- if uinst then
- local pkg
- for pkg in luci.util.imatch(uinst) do
- install[uinst], out, err = ipkg.install(pkg)
- stdout[#stdout+1] = out
- stderr[#stderr+1] = err
- changes = true
- end
- end
-
- -- Remove packets
- local rem = luci.http.formvalue("remove")
- if rem then
- remove[rem], out, err = ipkg.remove(rem)
- stdout[#stdout+1] = out
- stderr[#stderr+1] = err
- changes = true
- end
-
-
- -- Update all packets
- update = luci.http.formvalue("update")
- if update then
- update, out, err = ipkg.update()
- stdout[#stdout+1] = out
- stderr[#stderr+1] = err
- end
-
-
- -- Upgrade all packets
- upgrade = luci.http.formvalue("upgrade")
- if upgrade then
- upgrade, out, err = ipkg.upgrade()
- stdout[#stdout+1] = out
- stderr[#stderr+1] = err
- end
- end
-
-
- -- List state
- local no_lists = true
- local old_lists = false
- if fs.access("/var/opkg-lists/") then
- local list
- for list in fs.dir("/var/opkg-lists/") do
- no_lists = false
- if (fs.stat("/var/opkg-lists/"..list, "mtime") or 0) < (os.time() - (24 * 60 * 60)) then
- old_lists = true
- break
- end
- end
- end
-
-
- luci.template.render("admin_system/packages", {
- display = display,
- letter = letter,
- query = query,
- install = install,
- remove = remove,
- update = update,
- upgrade = upgrade,
- no_lists = no_lists,
- old_lists = old_lists,
- stdout = table.concat(stdout, ""),
- stderr = table.concat(stderr, "")
- })
-
- -- Remove index cache
- if changes then
- fs.unlink("/tmp/luci-indexcache")
- end
-end
-
local function image_supported(image)
return (os.execute("sysupgrade -T %q >/dev/null" % image) == 0)
end
@@ -301,38 +177,32 @@ function action_sysupgrade()
msg = luci.i18n.translate("The system is flashing now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
addr = (#keep > 0) and (#force > 0) and "192.168.1.1" or nil
})
- fork_exec("sleep 1; killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %s %q" %{ keep, force, image_tmp })
+ luci.sys.process.exec({ "/bin/sh", "-c","sleep 1; killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %s %q" %{ keep, force, image_tmp } }, nil, nil, true)
end
end
function action_backup()
- local reader = ltn12_popen("sysupgrade --create-backup - 2>/dev/null")
-
- luci.http.header(
- 'Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' %{
- luci.sys.hostname(),
- os.date("%Y-%m-%d")
- })
+ luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"'
+ %{ luci.sys.hostname(), os.date("%Y-%m-%d") })
luci.http.prepare_content("application/x-targz")
- luci.ltn12.pump.all(reader, luci.http.write)
+ luci.sys.process.exec({ "/sbin/sysupgrade", "--create-backup", "-" }, luci.http.write)
end
function action_backupmtdblock()
- local http = require "luci.http"
- local mv = http.formvalue("mtdblockname")
- local m, s, n = mv:match('^([^%s]+)/([^%s]+)/([^%s]+)')
+ local mv = luci.http.formvalue("mtdblockname") or ""
+ local m, n = mv:match('^([^%s%./"]+)/%d+/(%d+)$')
- local reader = ltn12_popen("dd if=/dev/mtd%s conv=fsync,notrunc 2>/dev/null" % n)
+ if not m and n then
+ luci.http.status(400, "Bad Request")
+ return
+ end
- luci.http.header(
- 'Content-Disposition', 'attachment; filename="backup-%s-%s-%s.bin"' %{
- luci.sys.hostname(), m,
- os.date("%Y-%m-%d")
- })
+ luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s-%s.bin"'
+ %{ luci.sys.hostname(), m, os.date("%Y-%m-%d") })
luci.http.prepare_content("application/octet-stream")
- luci.ltn12.pump.all(reader, luci.http.write)
+ luci.sys.process.exec({ "/bin/dd", "if=/dev/mtd%s" % n, "conv=fsync,notrunc" }, luci.http.write)
end
function action_restore()
@@ -387,7 +257,7 @@ function action_reset()
addr = "192.168.1.1"
})
- fork_exec("sleep 1; killall dropbear uhttpd; sleep 1; jffs2reset -y && reboot")
+ luci.sys.process.exec({ "/bin/sh", "-c", "sleep 1; killall dropbear uhttpd; sleep 1; jffs2reset -y && reboot" }, nil, nil, true)
return
end
@@ -413,57 +283,3 @@ end
function action_reboot()
luci.sys.reboot()
end
-
-function fork_exec(command)
- local pid = nixio.fork()
- if pid > 0 then
- return
- elseif pid == 0 then
- -- change to root dir
- nixio.chdir("/")
-
- -- patch stdin, out, err to /dev/null
- local null = nixio.open("/dev/null", "w+")
- if null then
- nixio.dup(null, nixio.stderr)
- nixio.dup(null, nixio.stdout)
- nixio.dup(null, nixio.stdin)
- if null:fileno() > 2 then
- null:close()
- end
- end
-
- -- replace with target command
- nixio.exec("/bin/sh", "-c", command)
- end
-end
-
-function ltn12_popen(command)
-
- local fdi, fdo = nixio.pipe()
- local pid = nixio.fork()
-
- if pid > 0 then
- fdo:close()
- local close
- return function()
- local buffer = fdi:read(2048)
- local wpid, stat = nixio.waitpid(pid, "nohang")
- if not close and wpid and stat == "exited" then
- close = true
- end
-
- if buffer and #buffer > 0 then
- return buffer
- elseif close then
- fdi:close()
- return nil
- end
- end
- elseif pid == 0 then
- nixio.dup(fdo, nixio.stdout)
- fdi:close()
- fdo:close()
- nixio.exec("/bin/sh", "-c", command)
- end
-end
diff --git a/modules/luci-mod-system/luasrc/model/cbi/admin_system/ipkg.lua b/modules/luci-mod-system/luasrc/model/cbi/admin_system/ipkg.lua
deleted file mode 100644
index 7c6d7e1c66..0000000000
--- a/modules/luci-mod-system/luasrc/model/cbi/admin_system/ipkg.lua
+++ /dev/null
@@ -1,64 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2008-2011 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ipkgfile = "/etc/opkg.conf"
-local distfeeds = "/etc/opkg/distfeeds.conf"
-local customfeeds = "/etc/opkg/customfeeds.conf"
-
-f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General options for opkg"))
-
-f:append(Template("admin_system/ipkg"))
-
-t = f:field(TextValue, "lines")
-t.wrap = "off"
-t.rows = 10
-function t.cfgvalue()
- return nixio.fs.readfile(ipkgfile) or ""
-end
-
-function t.write(self, section, data)
- return nixio.fs.writefile(ipkgfile, data:gsub("\r\n", "\n"))
-end
-
-function f.handle(self, state, data)
- return true
-end
-
-g = SimpleForm("distfeedconf", translate("Distribution feeds"),
- translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade."))
-
-d = g:field(TextValue, "lines2")
-d.wrap = "off"
-d.rows = 10
-function d.cfgvalue()
- return nixio.fs.readfile(distfeeds) or ""
-end
-
-function d.write(self, section, data)
- return nixio.fs.writefile(distfeeds, data:gsub("\r\n", "\n"))
-end
-
-function g.handle(self, state, data)
- return true
-end
-
-h = SimpleForm("customfeedconf", translate("Custom feeds"),
- translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade."))
-
-c = h:field(TextValue, "lines3")
-c.wrap = "off"
-c.rows = 10
-function c.cfgvalue()
- return nixio.fs.readfile(customfeeds) or ""
-end
-
-function c.write(self, section, data)
- return nixio.fs.writefile(customfeeds, data:gsub("\r\n", "\n"))
-end
-
-function h.handle(self, state, data)
- return true
-end
-
-return f, g, h
diff --git a/modules/luci-mod-system/luasrc/view/admin_system/ipkg.htm b/modules/luci-mod-system/luasrc/view/admin_system/ipkg.htm
deleted file mode 100644
index a7ff4e50bd..0000000000
--- a/modules/luci-mod-system/luasrc/view/admin_system/ipkg.htm
+++ /dev/null
@@ -1,10 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<ul class="cbi-tabmenu">
- <li class="cbi-tab-disabled"><a href="<%=url("admin/system/packages")%>"><%:Actions%></a></li>
- <li class="cbi-tab"><a href="#"><%:Configuration%></a></li>
-</ul>
diff --git a/modules/luci-mod-system/luasrc/view/admin_system/packages.htm b/modules/luci-mod-system/luasrc/view/admin_system/packages.htm
deleted file mode 100644
index 9e364d69ae..0000000000
--- a/modules/luci-mod-system/luasrc/view/admin_system/packages.htm
+++ /dev/null
@@ -1,213 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008-2010 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%-
-local opkg = require "luci.model.ipkg"
-local fs = require "nixio.fs"
-local wa = require "luci.tools.webadmin"
-local rowcnt = 1
-
-function rowstyle()
- rowcnt = rowcnt + 1
- return (rowcnt % 2) + 1
-end
-
-local fstat = fs.statvfs(opkg.overlay_root())
-local space_total = fstat and fstat.blocks or 0
-local space_free = fstat and fstat.bfree or 0
-local space_used = space_total - space_free
-
-local used_perc = math.floor(0.5 + ((space_total > 0) and ((100 / space_total) * space_used) or 100))
-local free_byte = space_free * fstat.frsize
-
-local filter = { }
-
-
-local opkg_list = luci.model.ipkg.list_all
-local querypat
-if query and #query > 0 then
- querypat = '*%s*' % query
- opkg_list = luci.model.ipkg.find
-end
-
-local letterpat
-if letter == 35 then
- letterpat = "[^a-z]*"
-else
- letterpat = string.char(letter, 42) -- 'A' '*'
-end
-
--%>
-
-<%+header%>
-
-
-<h2 name="content"><%:Software%></h2>
-
-<div class="cbi-map">
-
- <ul class="cbi-tabmenu">
- <li class="cbi-tab"><a href="#"><%:Actions%></a></li>
- <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/ipkg"><%:Configuration%></a></li>
- </ul>
-
- <form method="post" action="<%=REQUEST_URI%>">
- <input type="hidden" name="exec" value="1" />
- <input type="hidden" name="token" value="<%=token%>" />
-
- <div class="cbi-section">
- <div class="cbi-section-node">
- <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %>
- <div class="cbi-value">
- <% if #stdout > 0 then %><pre><%=pcdata(stdout)%></pre><% end %>
- <% if #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
- </div>
- <% end %>
-
- <% if querypat then %>
- <div class="cbi-value">
- <%:Displaying only packages containing%> <strong>"<%=pcdata(query)%>"</strong>
- <input type="button" onclick="location.href='?display=<%=luci.http.urlencode(display)%>'" href="#" class="cbi-button cbi-button-reset" style="margin-left:1em" value="<%:Reset%>" />
- <br style="clear:both" />
- </div>
- <% end %>
-
- <% if no_lists or old_lists then %>
- <div class="cbi-value">
- <% if old_lists then %>
- <%:Package lists are older than 24 hours%>
- <% else %>
- <%:No package lists available%>
- <% end %>
- <input type="submit" name="update" href="#" class="cbi-button cbi-button-apply" style="margin-left:3em" value="<%:Update lists%>" />
- </div>
- <% end %>
-
- <div class="cbi-value cbi-value-last">
- <%:Free space%>: <strong><%=(100-used_perc)%>%</strong> (<strong><%=wa.byte_format(free_byte)%></strong>)
- <div style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080" id="swfreespace">
- <div style="background-color:#F08080; border-right:1px solid #000000; height:100%; width:<%=used_perc%>%">&#160;</div>
- </div>
- </div>
- </div>
-
- <br />
-
- <div class="cbi-section-node">
- <input type="hidden" name="display" value="<%=pcdata(display)%>" />
-
- <div class="cbi-value">
- <label class="cbi-value-title"><%:Download and install package%>:</label>
- <div class="cbi-value-field">
- <span><input type="text" name="url" size="30" <% if no_lists then %>disabled="disabled" placeholder="<%:Please update package lists first%>"<% end %> value="" /></span>
- <input class="cbi-button cbi-button-save" type="submit" name="go" <% if no_lists then %>disabled="disabled"<% end %> value="<%:OK%>" />
- </div>
- </div>
-
- <div class="cbi-value cbi-value-last">
- <label class="cbi-value-title"><%:Filter%>:</label>
- <div class="cbi-value-field">
- <span><input type="text" name="query" size="20" <% if no_lists then %>disabled="disabled" placeholder="<%:Please update package lists first%>"<% else %>value="<%=pcdata(query)%>"<% end %> /></span>
- <input type="submit" class="cbi-button cbi-button-action" name="search" <% if no_lists then %>disabled="disabled"<% end %> value="<%:Find package%>" />
- </div>
- </div>
- </div>
- </div>
- </form>
-
-
- <h3><%:Status%></h3>
-
-
- <ul class="cbi-tabmenu">
- <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&amp;query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li>
- <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&amp;query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li>
- </ul>
-
- <% if display ~= "available" then %>
- <div class="cbi-section">
- <div class="cbi-section-node">
- <div class="table">
- <div class="tr cbi-section-table-titles">
- <div class="th left"><%:Package name%></div>
- <div class="th left"><%:Version%></div>
- <div class="th cbi-section-actions">&#160;</div>
- </div>
- <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %>
- <div class="tr cbi-rowstyle-<%=rowstyle()%>">
- <div class="td left"><%=luci.util.pcdata(n)%></div>
- <div class="td left"><%=luci.util.pcdata(v)%></div>
- <div class="td cbi-section-actions">
- <form method="post" class="inline" action="<%=REQUEST_URI%>">
- <input type="hidden" name="exec" value="1" />
- <input type="hidden" name="token" value="<%=token%>" />
- <input type="hidden" name="remove" value="<%=pcdata(n)%>" />
- <input class="cbi-button cbi-button-remove" type="submit" onclick="window.confirm('<%:Remove%> &quot;<%=luci.util.pcdata(n)%>&quot; ?') &#38;&#38; this.parentNode.submit(); return false" value="<%:Remove%>" />
- </form>
- </div>
- </div>
- <% end) %>
- <% if empty then %>
- <div class="tr cbi-section-table-row">
- <div class="td left">&#160;</div>
- <div class="td left"><em><%:none%></em></div>
- <div class="td left"><em><%:none%></em></div>
- </div>
- <% end %>
- </div>
- </div>
- </div>
- <% else %>
- <div class="cbi-section">
- <% if not querypat then %>
- <ul class="cbi-tabmenu" style="flex-wrap:wrap">
- <% local i; for i = 65, 90 do %>
- <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&amp;letter=<%=string.char(i)%>"><%=string.char(i)%></a></li>
- <% end %>
- <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&amp;letter=%23">#</a></li>
- </ul>
- <% end %>
- <div class="cbi-section-node cbi-section-node-tabbed">
- <div class="table">
- <div class="tr cbi-section-table-titles">
- <div class="th col-2 left"><%:Package name%></div>
- <div class="th col-2 left"><%:Version%></div>
- <div class="th col-1 center"><%:Size (.ipk)%></div>
- <div class="th col-10 left"><%:Description%></div>
- <div class="th cbi-section-actions">&#160;</div>
- </div>
- <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %>
- <div class="tr cbi-rowstyle-<%=rowstyle()%>">
- <div class="td col-2 left"><%=luci.util.pcdata(n)%></div>
- <div class="td col-2 left"><%=luci.util.pcdata(v)%></div>
- <div class="td col-1 center"><%=luci.util.pcdata(s)%></div>
- <div class="td col-10 left"><%=luci.util.pcdata(d)%></div>
- <div class="td cbi-section-actions">
- <form method="post" class="inline" action="<%=REQUEST_URI%>">
- <input type="hidden" name="exec" value="1" />
- <input type="hidden" name="token" value="<%=token%>" />
- <input type="hidden" name="install" value="<%=pcdata(n)%>" />
- <input class="cbi-button cbi-button-apply" type="submit" onclick="window.confirm('<%:Install%> &quot;<%=luci.util.pcdata(n)%>&quot; ?') &#38;&#38; this.parentNode.submit(); return false" value="<%:Install%>" />
- </form>
- </div>
- </div>
- <% end) %>
- <% if empty then %>
- <div class="tr">
- <div class="td left">&#160;</div>
- <div class="td left"><em><%:none%></em></div>
- <div class="td left"><em><%:none%></em></div>
- <div class="td right"><em><%:none%></em></div>
- <div class="td left"><em><%:none%></em></div>
- </div>
- <% end %>
- </div>
- </div>
- </div>
- <% end %>
-</div>
-
-<%+footer%>
diff --git a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
index 73e6c3bed6..35ea815009 100644
--- a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
+++ b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
@@ -13,28 +13,12 @@
/* Reset.less
* Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
* ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
-html {
- margin: 0;
- padding: 0;
-}
-
-body {
- margin: 0;
- padding: 5px;
-}
-h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, ins, q, s,
-small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset,
-form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td,
-.table, .tbody, .tfoot, .thead, .tr, .th, .td {
+* {
margin: 0;
padding: 0;
border: 0;
- font-weight: normal;
- font-style: normal;
- font-size: 100%;
- line-height: 1;
- font-family: inherit;
+ box-sizing: border-box;
}
abbr[title], acronym[title] {
@@ -52,15 +36,7 @@ ol, ul {
list-style: none;
}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
-}
-
html {
- overflow-y: scroll;
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
@@ -74,14 +50,8 @@ a:hover, a:active {
outline: 0;
}
-article,
-aside,
-details,
-figcaption,
-figure,
footer,
header,
-hgroup,
nav,
section {
display: block;
@@ -103,7 +73,6 @@ sub {
}
img {
- border: 0;
-ms-interpolation-mode: bicubic;
}
@@ -116,12 +85,7 @@ textarea {
margin: 0;
box-sizing: border-box;
vertical-align: baseline;
- *vertical-align: middle;
-}
-
-button, input {
line-height: normal;
- *overflow: visible;
}
button::-moz-focus-inner, input::-moz-focus-inner {
@@ -164,13 +128,12 @@ textarea {
* ------------------------------------------------------------------------------------------- */
body {
background-color: #fff;
- margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
font-weight: normal;
line-height: 18px;
color: #404040;
- padding-top: 58px;
+ padding: 58px 5px 5px 5px;
}
.container {
@@ -416,11 +379,6 @@ fieldset legend {
line-height: 1;
color: #404040;
padding-top: 20px;
- *padding: 0 0 5px 0px;
- /* IE6-7 */
-
- *line-height: 1.5;
- /* IE6-7 */
}
form .cbi-tab-descr {
@@ -475,6 +433,12 @@ input[type=checkbox], input[type=radio] {
cursor: pointer;
}
+label > input[type="checkbox"],
+label > input[type="radio"] {
+ vertical-align: bottom;
+ margin: 0;
+}
+
input,
textarea,
select,
@@ -489,7 +453,6 @@ select,
color: #808080;
border: 1px solid #ccc;
border-radius: 3px;
- box-sizing: border-box;
}
.cbi-dropdown,
@@ -565,12 +528,6 @@ input[type=button], input[type=reset], input[type=submit] {
height: auto;
}
-select, input[type=file] {
- *height: auto;
- *margin-top: 4px;
- /* For IE7, add top margin to align select with labels */
-}
-
select[multiple] {
height: inherit;
background-color: #fff;
@@ -770,7 +727,7 @@ header {
top: 0;
left: 0;
right: 0;
- z-index: 10000;
+ z-index: 800;
overflow: visible;
color: #BFBFBF;
}
@@ -1190,6 +1147,59 @@ footer {
border-top: 1px solid #eee;
}
+#modal_overlay {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: -10000px;
+ right: 10000px;
+ background: rgba(0, 0, 0, 0.7);
+ z-index: 900;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ transition: opacity .125s ease-in;
+ opacity: 0;
+}
+
+.modal {
+ width: 90%;
+ margin: 5em auto;
+ display: flex;
+ flex-wrap: wrap;
+ min-height: 32px;
+ max-width: 600px;
+ align-items: center;
+ border-radius: 3px;
+ background: #fff;
+ box-shadow: 0 0 3px #444;
+ padding: 1em 1em .5em 1em;
+ max-height: 2400px;
+ min-width: 270px;
+}
+
+.modal > * {
+ flex-basis: 100%;
+ line-height: normal;
+ margin-bottom: .5em;
+}
+
+.modal > pre,
+.modal > textarea {
+ white-space: pre-wrap;
+ overflow: auto;
+}
+
+body.modal-overlay-active {
+ overflow: hidden;
+ height: 100vh;
+}
+
+body.modal-overlay-active #modal_overlay {
+ left: 0;
+ right: 0;
+ opacity: 1;
+}
+
.btn.danger,
.alert-message.danger,
.btn.danger:hover,
@@ -1266,6 +1276,8 @@ footer {
}
.cbi-input-invalid,
+.cbi-input-invalid.cbi-dropdown,
+.cbi-input-invalid.cbi-dropdown:not([open]) > ul > li,
.cbi-value-error input {
color: #f00;
border-color: #f00;
@@ -1451,10 +1463,11 @@ footer {
border: 1px solid #918e8c;
box-shadow: 0 0 4px #918e8c;
position: absolute;
- z-index: 1000;
+ z-index: 1100;
max-width: none;
min-width: 100%;
width: auto;
+ transition: max-height .125s ease-in;
}
.cbi-dropdown > ul > li[display],
@@ -1512,12 +1525,11 @@ input[type="password"] + .cbi-button,
select + .cbi-button {
border-radius: 0 3px 3px 0;
border-color: #ccc;
- margin: 0 0 1px -2px;
+ margin-left: -2px;
padding: 0 6px;
vertical-align: top;
- height: 28px;
+ height: 30px;
font-size: 14px;
- font-weight: bold;
line-height: 28px;
}
@@ -1556,6 +1568,37 @@ select + .cbi-button {
transition: opacity .25s ease-in;
}
+.cbi-progressbar {
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ position: relative;
+ min-width: 170px;
+ height: 20px;
+ margin: 4px 0;
+ background: #f9f9f9;
+}
+
+.cbi-progressbar > div {
+ background: #90c0e0;
+ height: 100%;
+ transition: width .25s ease-in;
+ width: 0%;
+}
+
+.cbi-progressbar::after {
+ position: absolute;
+ bottom: 0;
+ top: 0;
+ right: 0;
+ left: 0;
+ text-align: center;
+ text-shadow: 0 0 2px #fff;
+ content: attr(title);
+ white-space: pre;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
.zonebadge .cbi-tooltip {
padding: 1px;
background: inherit;
@@ -2088,6 +2131,59 @@ div.cbi-value var,
bottom: 2px;
}
+#modal_overlay {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: -10000px;
+ right: 10000px;
+ background: rgba(0, 0, 0, 0.7);
+ z-index: 900;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ transition: opacity .125s ease-in;
+ opacity: 0;
+}
+
+#modal_overlay > .modal {
+ width: 90%;
+ margin: 5em auto;
+ display: flex;
+ flex-wrap: wrap;
+ min-height: 32px;
+ max-width: 600px;
+ align-items: center;
+ border-radius: 3px;
+ background: #fff;
+ box-shadow: 0 0 3px #444;
+ padding: 1em 1em .5em 1em;
+ max-height: 2400px;
+ min-width: 270px;
+}
+
+#modal_overlay .modal > * {
+ flex-basis: 100%;
+ line-height: normal;
+ margin-bottom: .5em;
+}
+
+#modal_overlay .modal > pre,
+#modal_overlay .modal > textarea {
+ white-space: pre-wrap;
+ overflow: auto;
+}
+
+body.modal-overlay-active {
+ overflow: hidden;
+ height: 100vh;
+}
+
+body.modal-overlay-active #modal_overlay {
+ left: 0;
+ right: 0;
+ opacity: 1;
+}
+
html body.apply-overlay-active {
height: calc(100vh - 63px);
}
@@ -2109,3 +2205,19 @@ html body.apply-overlay-active {
.flash {
animation: flash .35s;
}
+
+.spinning {
+ position: relative;
+ padding-left: 32px !important;
+}
+
+.spinning::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 32px;
+ content: " ";
+ background: url(../resources/icons/loading.gif) no-repeat center;
+ background-size: 16px;
+}
diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css
index b9ac0f033d..04f2941c98 100644
--- a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css
+++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css
@@ -386,7 +386,7 @@ ul.dropdowns li {
ul.dropdowns li ul {
position: absolute;
- z-index: 1000;
+ z-index: 1100;
top: auto;
min-width: 10em;
}
diff --git a/themes/luci-theme-material/htdocs/luci-static/material/cascade.css b/themes/luci-theme-material/htdocs/luci-static/material/cascade.css
index 3b53570a5f..48812c1c8a 100644
--- a/themes/luci-theme-material/htdocs/luci-static/material/cascade.css
+++ b/themes/luci-theme-material/htdocs/luci-static/material/cascade.css
@@ -1065,7 +1065,7 @@ td > table > tbody > tr > td,
border: 1px solid #918e8c;
box-shadow: 0 0 4px #918e8c;
position: absolute;
- z-index: 1000;
+ z-index: 1100;
max-width: none;
min-width: 100%;
width: auto;
diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
index e650aa55a9..acd711a1ea 100644
--- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
+++ b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
@@ -19,7 +19,7 @@ body {
background-position: bottom center;
background-repeat: repeat-x;
font-family: Arial, Verdana, sans-serif;
- font-size: 10pt;
+ font-size: 13px;
padding-bottom: 1.5em;
}
@@ -86,7 +86,7 @@ a img {
background: #f5f5f5;
border: 1px solid #444;
border-width: 0 0 1px 1px;
- font-size: 11pt;
+ font-size: 15px;
padding-bottom: 1em;
}
@@ -199,6 +199,59 @@ hr {
margin-left: 2em;
}
+#modal_overlay {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: -10000px;
+ right: 10000px;
+ background: rgba(0, 0, 0, 0.7);
+ z-index: 900;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ transition: opacity .125s ease-in;
+ opacity: 0;
+}
+
+.modal {
+ width: 90%;
+ margin: 5em auto;
+ display: flex;
+ flex-wrap: wrap;
+ min-height: 32px;
+ max-width: 600px;
+ align-items: center;
+ border-radius: 3px;
+ background: #f5f5f5;
+ border: 1px solid #000;
+ padding: .5em .5em .25em .5em;
+ max-height: 2400px;
+ min-width: 270px;
+ color: #444;
+}
+
+.modal > * {
+ flex-basis: 100%;
+ line-height: normal;
+ margin-bottom: .5em;
+}
+
+.modal > pre,
+.modal > textarea {
+ white-space: pre-wrap;
+ overflow: auto;
+}
+
+body.modal-overlay-active {
+ overflow: hidden;
+}
+
+body.modal-overlay-active #modal_overlay {
+ left: 0;
+ right: 0;
+ opacity: 1;
+}
+
.warning {
color: red;
background-color: white;
@@ -234,19 +287,29 @@ hr {
margin: 0 0 .5em 0;
}
-.alert-message, .cbi-tooltip.error {
+.label {
+ padding: 1px 2px;
+ font-size: 10px;
+ color: #fff;
+ text-transform: uppercase;
+ white-space: nowrap;
+ background-color: #aaa;
+ border-radius: 3px;
+}
+
+.alert-message, .cbi-tooltip.error, .label.error {
border-color: #a22;
background: #fee;
color: #a22;
}
-.alert-message.notice, .cbi-tooltip.notice {
+.alert-message.notice, .cbi-tooltip.notice, .label.notice {
border-color: #15a;
background: #e6f6ff;
color: #15a;
}
-.alert-message.warning, .cbi-tooltip.warning {
+.alert-message.warning, .cbi-tooltip.warning, .label.warning {
border-color: #ed5;
background: #fe9;
color: #650;
@@ -392,7 +455,7 @@ textarea#syslog {
direction: rtl;
}
-h2, h3, h4, legend {
+h2, h3, h4, h5, legend {
font-size: 150%;
font-family: Trebuchet MS, Verdana, sans-serif;
font-weight: bold;
@@ -411,6 +474,10 @@ h4 {
font-size: 112%;
}
+h5 {
+ font-size: 105%;
+}
+
fieldset { border: none; }
fieldset > legend { float: left; }
fieldset > legend + * { clear: both; }
@@ -491,16 +558,16 @@ select:hover {
input[type=text],
input[type=password] {
- padding: 0 3px;
+ padding: .25em;
}
select,
input[type=text],
-input[type=password] {
+input[type=password],
+.cbi-dropdown {
width: 20em;
- font-size: inherit;
- line-height: 13pt;
- height: 14pt;
+ font-size: 12px;
+ height: 22px;
}
select[multiple] {
@@ -514,6 +581,12 @@ input.cbi-input-password + img {
vertical-align: middle;
}
+label > input[type="checkbox"],
+label > input[type="radio"] {
+ vertical-align: bottom;
+ margin: 0;
+}
+
.td select,
.td .cbi-dropdown,
.td input[type=text],
@@ -521,7 +594,6 @@ input.cbi-input-password + img {
width: 100%;
}
-.td [data-dynlist] > input,
.td input.cbi-input-password {
width: calc(100% - 20px);
}
@@ -544,8 +616,9 @@ img.cbi-image-button {
background: #fff;
text-align: center;
font-weight: bold;
- line-height: 13pt;
- height: 16pt;
+ line-height: 12px;
+ height: 22px;
+ line-height: 20px;
box-sizing: border-box;
cursor: pointer;
}
@@ -620,10 +693,7 @@ img.cbi-image-button {
color: #595;
}
-.cbi-input-invalid {
- background-image: url('../resources/cbi/reset.gif');
- background-repeat: no-repeat;
- background-position: right;
+.cbi-input-invalid:not([open]) {
color: #FF0000 !important;
border-color: #FF0000;
}
@@ -781,16 +851,6 @@ div.cbi-optionals {
margin: 0;
}
-@keyframes flash {
- 0% { opacity: 1; }
- 50% { opacity: .5; }
- 100% { opacity: 1; }
-}
-
-.tr.cbi-section-table-row.flash {
- animation: flash .35s;
-}
-
.tr.cbi-section-table-descr .th {
font-weight: normal;
font-size: 90%;
@@ -804,7 +864,6 @@ div.cbi-optionals {
.th.cbi-section-actions,
.td.cbi-section-actions {
- overflow: visible;
align-self: center;
vertical-align: middle;
}
@@ -1044,7 +1103,6 @@ ul.cbi-tabmenu li.cbi-tab {
flex-direction: column;
justify-content: center;
text-align: center;
- line-height: 2em;
padding: 0 .25em;
}
@@ -1054,6 +1112,7 @@ ul.cbi-tabmenu li.cbi-tab {
font-weight: bold;
text-shadow: 1px 1px 0px #fff;
display: none;
+ min-height: 22px;
}
.cbi-dropdown > ul > li {
@@ -1066,7 +1125,7 @@ ul.cbi-tabmenu li.cbi-tab {
flex-grow: 1;
align-items: center;
align-self: center;
- min-height: 20px;
+ min-height: 22px;
}
.cbi-dropdown > ul > li .hide-open { display: initial; }
@@ -1096,10 +1155,6 @@ ul.cbi-tabmenu li.cbi-tab {
margin: 0;
}
-.cbi-dropdown > ul > li input[type="text"] {
- height: 20px;
-}
-
.cbi-dropdown[open] {
position: relative;
}
@@ -1110,10 +1165,11 @@ ul.cbi-tabmenu li.cbi-tab {
border: 1px solid #918e8c;
box-shadow: 0 0 4px #918e8c;
position: absolute;
- z-index: 1000;
+ z-index: 1100;
max-width: none;
min-width: 100%;
width: auto;
+ transition: max-height .125s ease-in;
}
.cbi-dropdown > ul > li[display],
@@ -1129,7 +1185,6 @@ ul.cbi-tabmenu li.cbi-tab {
}
.cbi-dropdown[empty] > ul > li,
-.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
display: block;
}
@@ -1213,13 +1268,13 @@ input[type="password"] + .cbi-button,
select + .cbi-button {
border-radius: 0 3px 3px 0;
border: 1px outset #000;
- margin: 0 0 1px -2px;
+ margin: 0 0 0 -2px;
padding: 0 6px;
vertical-align: top;
display: inline-block;
- height: 14pt;
- font-size: 10pt;
- line-height: 12pt;
+ height: 22px;
+ font-size: 12px;
+ line-height: 20px;
}
.cbi-tooltip-container {
@@ -1238,14 +1293,49 @@ select + .cbi-button {
transition: opacity .25s ease-out;
pointer-events: none;
box-shadow: 0 0 2px #444;
+ color: #444;
}
.cbi-tooltip-container:hover .cbi-tooltip {
left: auto;
opacity: 1;
transition: opacity .25s ease-in;
+ white-space: normal;
+}
+
+.cbi-progressbar {
+ background: #ddd;
+ border: 1px solid #bbb;
+ border-radius: 3px;
+ position: relative;
+ min-width: 170px;
+ height: 20px;
+ margin: 4px 0;
+ line-height: 20px;
+}
+
+.cbi-progressbar > div {
+ background: #90c0e0;
+ height: 100%;
+ transition: width .25s ease-in;
+ width: 0%;
+}
+
+.cbi-progressbar::after {
+ position: absolute;
+ bottom: 0;
+ top: 0;
+ right: 0;
+ left: 0;
+ text-align: center;
+ text-shadow: 0 0 2px #fff;
+ content: attr(title);
+ white-space: pre;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
+
.zonebadge .cbi-tooltip {
padding: 1px;
background: inherit;
@@ -1339,7 +1429,7 @@ select + .cbi-button {
}
.ifacebadge > * {
- align-self: flex-start;
+ align-self: center;
}
.ifacebadge > img,
@@ -1535,6 +1625,32 @@ select + .cbi-button {
}
+@keyframes flash {
+ 0% { opacity: 1; }
+ 50% { opacity: .5; }
+ 100% { opacity: 1; }
+}
+
+.flash {
+ animation: flash .35s;
+}
+
+.spinning {
+ position: relative;
+ padding-left: 32px !important;
+}
+
+.spinning::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 32px;
+ content: " ";
+ background: url(../resources/icons/loading.gif) no-repeat center;
+ background-size: 16px;
+}
+
}
@media screen and (max-width: 992px) {
@@ -1656,6 +1772,10 @@ select + .cbi-button {
display: inline-block;
}
+ .td.cbi-dropdown-open {
+ overflow: visible;
+ }
+
.td select {
word-wrap: normal;
}
@@ -1735,32 +1855,57 @@ select + .cbi-button {
@media screen and (max-width: 480px) {
body {
- font-size: 12pt;
+ font-size: 16px;
}
- input, textarea, select {
- font-size: 12pt !important;
- line-height: 1.4em;
+ input, textarea, select, .cbi-button, .cbi-dropdown {
+ font-size: 16px !important;
+ line-height: 30px;
}
select, input[type="text"], input[type="password"] {
width: 100%;
- height: 1.4em;
+ height: 30px;
+ border-radius: 3px;
}
- input.cbi-input-password {
- width: calc(100% - 20px);
+ input[type="text"] + .cbi-button,
+ input[type="password"] + .cbi-button,
+ select + .cbi-button {
+ height: 30px;
+ line-height: 30px;
+ margin-left: -5px;
+ min-width: 30px;
+ }
+
+ input.cbi-input-password,
+ [data-dynlist] > .add-item > input {
+ width: calc(100% - 25px);
+ }
+
+ .label {
+ font-size: 14px;
}
.cbi-dynlist,
.cbi-dropdown {
min-width: 100%;
+ height: auto;
display: flex;
}
+ .cbi-dropdown > .more,
+ .cbi-dropdown > ul > li,
+ .cbi-dropdown > ul > li[placeholder] {
+ min-height: 30px;
+ }
+
.btn, .cbi-button {
- font-size: 9pt !important;
- line-height: 13pt;
+ font-size: 16px !important;
+ line-height: 30px;
+ height: 30px;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
#maincontent {
@@ -1827,11 +1972,6 @@ select + .cbi-button {
padding: 0 3px;
}
- ul.cbi-tabmenu li {
- font-size: 90%;
- margin: 0 1px -1px 0;
- }
-
.hide-xs {
display: none;
}
@@ -1849,4 +1989,9 @@ select + .cbi-button {
width: 100%;
margin-top: .5em;
}
+
+ #cbi-firewall-rule .td[data-type="fvalue"],
+ #cbi-firewall-redirect .td[data-type="fvalue"] {
+ display: none;
+ }
}