des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-cat = bl:option(DynamicList, "adb_src_cat", translate("Categories"))
+cat = bl:option(DynamicList, "adb_src_cat", translate("Archive Categories"))
cat.datatype = "uciname"
cat.optional = true
-%>
<style type="text/css">
-table.cbi-section-table th,
-table.cbi-section-table td,
+.table.cbi-section-table .th,
+.table.cbi-section-table .td,
.cbi-section-table-cell,
-.cbi-section-table-row,
-.cbi-input-text
+.cbi-section-table-row
{
text-align:left;
vertical-align:top;
margin-right:auto;
margin-left:0px;
+ padding-left:2px;
+ line-height:20px;
+ height:20px;
+}
+.table.cbi-section-table .th
+{
+ white-space:nowrap;
+}
+.table.cbi-section-table input
+{
+ width:7em;
}
.cbi-input-text
{
+ text-align:left;
+ padding-left:2px;
outline:none;
box-shadow:none;
background:transparent;
- padding-left:2px;
- line-height:25px;
- height:25px;
+ height:20px;
width:10em;
}
</style>
else
{
input.style.display = 'none';
- output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>';
+ output.innerHTML = '<span class="error"><%:Blocklist not found!%></span>';
}
}
);
msgid "Advanced"
msgstr "Avanzato"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Directory del Backup"
msgid "Blocklist Sources"
msgstr "Fonti lista di Blocco"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr "File di input non trovato, per favore controlla la tua configurazione."
-msgid "Invalid domain specified!"
-msgstr "Dominio invalido specificato!"
-
msgid "Last Run"
msgstr "Ultimo Avvio"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Dominio invalido specificato!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Fonti lista di blocco disponibili."
msgid "Advanced"
msgstr "詳細設定"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "バックアップ先 ディレクトリ"
msgid "Blocklist Sources"
msgstr "ブロックリスト提供元"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
"ホワイトリストに存在しない全ドメインへのアクセスをブロックするために、追加で "
"'Jail' リスト (/tmp/adb_list.jail) を作成します。<br />"
-msgid "Categories"
-msgstr "カテゴリー"
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
-msgid "Invalid domain specified!"
-msgstr "無効なドメインが指定されています!"
-
msgid "Last Run"
msgstr "最終実行"
msgid "running"
msgstr "実行中"
+
+#~ msgid "Categories"
+#~ msgstr "カテゴリー"
+
+#~ msgid "Invalid domain specified!"
+#~ msgstr "無効なドメインが指定されています!"
msgid "Advanced"
msgstr "Avançado"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Diretório da cópia de segurança"
msgid "Blocklist Sources"
msgstr "Fontes de listas de bloqueio"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
-msgid "Invalid domain specified!"
-msgstr "Domínio especificado inválido!"
-
msgid "Last Run"
msgstr ""
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Domínio especificado inválido!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Fontes de listas de bloqueio disponíveis."
msgid "Advanced"
msgstr "Дополнительно"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Папка для бэкапа"
msgid "Blocklist Sources"
msgstr "Источники списков блокировки"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
"заблокировать доступ ко всем доменам, кроме тех что перечислены в файле "
"Белого списка.<br />"
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr "Config файл не найден, настройте config файл."
-msgid "Invalid domain specified!"
-msgstr "Задан недопустимый домен!"
-
msgid "Last Run"
msgstr "Последнее время запуска"
msgid "running"
msgstr "работает"
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Задан недопустимый домен!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Источники списков блокировки. "
msgid "Advanced"
msgstr "Avancerat"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Säkerhetskopiera mapp"
msgid "Blocklist Sources"
msgstr "Källor för blockeringslistor"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
-msgid "Invalid domain specified!"
-msgstr "Ogiltig domän angiven!"
-
msgid "Last Run"
msgstr "Kördes senast"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Ogiltig domän angiven!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Tillgängliga källor för blockeringslistor"
msgid "Advanced"
msgstr ""
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr ""
msgid "Blocklist Sources"
msgstr ""
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr ""
-msgid "Invalid domain specified!"
-msgstr ""
-
msgid "Last Run"
msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "'Jail' Blocklist Creation"
-msgstr ""
+msgstr "“Jail” 拦截名单创建"
msgid "-------"
msgstr "-------"
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
"than 64 MB free RAM, please only select a few of them!"
msgstr ""
+"<b>注意:</b>为防止在小于 64M 空闲内存的设备上出现内存不足异常,请只选择其中的几个!"
msgid "Adblock"
msgstr "Adblock"
msgid "Advanced"
msgstr "高级"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "备份目录"
msgid "Backup Mode"
-msgstr ""
+msgstr "备份模式"
msgid "Blocklist Sources"
msgstr "拦截列表来源"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
+"创建压缩的拦截列表备份,它们将在下载错误或备份模式启动期间使用。"
msgid "DNS Backend (DNS Directory)"
msgstr "DNS 后端(DNS 目录)"
msgstr "启动期间不要自动更新 blocklists,改用 blocklists 的备份。"
msgid "Download Utility"
-msgstr ""
+msgstr "下载工具"
msgid "Download Utility (SSL Library)"
msgstr "下载实用程序(SSL 库)"
msgstr "编辑白名单"
msgid "Email Notification"
-msgstr ""
+msgstr "Email 提醒"
msgid "Email Notification Count"
-msgstr ""
+msgstr "Email 提醒计数"
msgid "Enable Adblock"
msgstr "启用 Adblock"
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(< 64 MB free RAM)"
msgstr ""
+"在低内存设备上启用积极的内存整体排序/重复移除(< 64 MB 空闲内存)"
msgid "Enable verbose debug logging in case of any processing error."
msgstr "在出现任何处理错误的情况下启用详细调试日志记录。"
msgstr "额外选项"
msgid "Flush DNS Cache"
-msgstr ""
+msgstr "清空 DNS 缓存"
msgid "Flush DNS Cache after adblock processing."
-msgstr ""
+msgstr "在 adblock 进程启动后清空 DNS 缓存。"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
+"对受 SSL 保护的拦截列表源,您需要一个合适的 SSL 库,如 “libustream-ssl” 或 "
+"“built-in”。"
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
+"进一步信息<a href=\"%s\" target=\"_blank\">请访问在线文档"
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
+"为了进一步提高性能,您可以提高此值,例如:8 或 16 应该是安全的。"
msgid "Force Local DNS"
msgstr "强制本地 DNS"
msgstr "强制整体排序"
msgid "Full path to the whitelist file."
-msgstr ""
+msgstr "白名单文件的全路径。"
msgid "Input file not found, please check your configuration."
msgstr "输入文件未找到,请检查您的配置。"
-msgid "Invalid domain specified!"
-msgstr "无效域名!"
-
msgid "Last Run"
msgstr "最后运行"
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
+"可用网络接口列表。通常启动将由 “wan” 接口触发。<br />"
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
msgstr "支持的 DNS 后端列表及其默认列表导出目录。<br />"
msgid "List of supported and fully pre-configured download utilities."
-msgstr ""
+msgstr "支持和完全预配置的下载工具列表。"
msgid "Loading"
msgstr "加载中"
msgid "Max. Download Queue"
-msgstr ""
+msgstr "最大下载队列"
msgid "No"
msgstr "否"
msgstr "在默认设置并不适合您时的额外选项。"
msgid "Overall Domains"
-msgstr ""
+msgstr "域名总览"
msgid "Overview"
msgstr "总览"
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
+"请注意:这需要额外的 “msmtp” 软件包安装和设置。"
msgid "Query"
msgstr "查询"
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
+"如果总数小于或等于给定限制(默认为 0),请提高最小电子邮件通知数,以获取电子邮件。"
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
"Send notification emails in case of a processing error or if domain count is "
"≤ 0.<br />"
msgstr ""
+"如果发生错误或域计数 ≤ 0,发送通知电子邮件。<br />"
msgid ""
"Size of the download queue to handle downloads & list processing in "
"parallel (default '4').<br />"
msgstr ""
+"处理下载队列的大小 &amp; 并行处理列表(默认 “4”)。<br />"
msgid "Startup Trigger"
msgstr "启动触发器"
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
+"adblock 备份的目标目录。 请仅使用非易失性磁盘,例如:一个外置 U 盘。"
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "生成的 blocklist 'adb_list.overall'的目标目录。"
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
msgstr ""
+"文件过大,无法使用 LuCI 的在线编辑(≥ 100 KB)。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
msgstr "正在执行命令..."
msgid "Whitelist File"
-msgstr ""
+msgstr "白名单文件"
msgid "Yes"
msgstr "是"
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
+"您可以手动使用此限制性拦截列表,例如:为客人提供 wifi 或 kidsafe 配置。"
msgid "disabled"
msgstr "已禁用"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
-msgstr ""
+msgstr "例如:要接收每个 adblock 更新的电子邮件通知时将此值设置为150000。"
msgid "enabled"
msgstr "已启用"
msgstr "已暂停"
msgid "running"
-msgstr ""
+msgstr "运行中"
+
+#~ msgid "Invalid domain specified!"
+#~ msgstr "无效域名!"
#~ msgid "Available blocklist sources."
#~ msgstr "可用的 blocklist 来源。"
msgid "Advanced"
msgstr "高階"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "備份目錄"
msgid "Blocklist Sources"
msgstr "攔截列表來源"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgid "Input file not found, please check your configuration."
msgstr "輸入檔案未找到,請檢查您的配置。"
-msgid "Invalid domain specified!"
-msgstr "無效域名!"
-
msgid "Last Run"
msgstr "最後執行"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "無效域名!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "可用的 blocklist 來源。"
# Release == build
# increase on changes of translation files
-PKG_RELEASE:=3
+PKG_RELEASE:=5
PKG_LICENSE:=Apache-2.0
-PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>, \
+ Ansuel Smith <ansuelsmth@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
local srv_name = "ddns-scripts"
local srv_ver_min = "2.7.7" -- minimum version of service required
-local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
local app_name = "luci-app-ddns"
local app_title = "Dynamic DNS"
local app_version = "2.4.9-1"
function index()
local nxfs = require "nixio.fs" -- global definitions not available
local sys = require "luci.sys" -- in function index()
- local ddns = require "luci.tools.ddns" -- ddns multiused functions
local muci = require "luci.model.uci"
-- no config create an empty one
-- Standardized application/service functions
function app_title_main()
- return [[<a href="javascript:alert(']]
- .. I18N.translate("Version Information")
- .. [[\n\n]] .. app_name
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] .. app_version
- .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]]
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
- .. srv_ver_min .. [[ ]] .. I18N.translate("or higher")
- .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]]
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
- .. (service_version() or I18N.translate("NOT installed"))
- .. [[\n\n]]
- .. [[')">]]
- .. I18N.translate(app_title)
- .. [[</a>]]
+ tmp = {}
+ tmp[#tmp+1] = [[<a href="javascript:alert(']]
+ tmp[#tmp+1] = I18N.translate("Version Information")
+ tmp[#tmp+1] = [[\n\n]] .. app_name
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]] .. app_version
+ tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]]
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]]
+ tmp[#tmp+1] = srv_ver_min .. [[ ]] .. I18N.translate("or higher")
+ tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]]
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]]
+ tmp[#tmp+1] = (service_version() or I18N.translate("NOT installed"))
+ tmp[#tmp+1] = [[\n\n]]
+ tmp[#tmp+1] = [[')">]]
+ tmp[#tmp+1] = I18N.translate(app_title)
+ tmp[#tmp+1] = [[</a>]]
+
+ return table.concat(tmp)
end
-function service_version()
- local ver = nil
-
- ver = UTIL.exec(srv_ver_cmd)
- if #ver > 0 then return ver end
- IPKG.list_installed(srv_name, function(n, v, d)
- if v and (#v > 0) then ver = v end
- end
- )
- return ver
+function service_version()
+
+ local srv_ver_cmd = luci_helper .. " -V | awk {'print $2'} "
+ local ver
+
+ if IPKG then
+ ver = IPKG.info(srv_name)[srv_name].Version
+ else
+ ver = UTIL.exec(srv_ver_cmd)
+ end
+
+ if ver and #ver > 0 then return ver or nil end
+
end
+
function service_ok()
return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min)
end
end
-- function to verify if option is valid
-local function _option_validate(self, value)
+local function _option_validate(self, value, optional)
-- section is globally defined here be calling agrument (see above)
local fusev6 = usev6:formvalue(section) or "0"
local fsvc4 = svc4:formvalue(section) or "-"
if used < 1 then return "" end
-- needed but no data then return error
if not value or (#value == 0) then
+ if optional then return nil end
return nil, err_tab_basic(self) .. translate("missing / required")
end
return value
end
-- use_ipv6 -- ################################################################
+
+--We call it globally as it's called 11 times even outside specific function, saves 11 os.execute slow command!
+local has_ipv6 = DDNS.env_info("has_ipv6")
+
usev6 = ns:taboption("basic", ListValue, "use_ipv6",
translate("IP address version"),
translate("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider") )
usev6:value("0", translate("IPv4-Address") )
function usev6.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section) or "0"
- if DDNS.has_ipv6 or (value == "1" and not DDNS.has_ipv6) then
+ if has_ipv6 or (value == "1" and not has_ipv6) then
self:value("1", translate("IPv6-Address") )
end
- if value == "1" and not DDNS.has_ipv6 then
+ if value == "1" and not has_ipv6 then
self.description = err_ipv6_basic
end
return value
end
function usev6.validate(self, value)
- if (value == "1" and DDNS.has_ipv6) or value == "0" then
+ if (value == "1" and has_ipv6) or value == "0" then
return value
end
return nil, err_tab_basic(self) .. err_ipv6_plain
translate("DDNS Service provider") .. " [IPv6]" )
svc6.default = "-"
svc6:depends("use_ipv6", "1") -- only show on IPv6
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
svc6.description = err_ipv6_basic
end
function svc6.cfgvalue(self, section)
end
function svc6.validate(self, value)
if usev6:formvalue(section) == "1" then -- do only on IPv6
- if DDNS.has_ipv6 then return value end
+ if has_ipv6 then return value end
return nil, err_tab_basic(self) .. err_ipv6_plain
else
return "" -- suppress validate error
translate("Optional Encoded Parameter"),
translate("Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)") )
function pe.validate(self, value)
- return _option_validate(self, value)
+ return _option_validate(self, value, true)
end
function pe.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
end
--- IPv4/IPv6 - param_enc -- ###################################################
+-- IPv4/IPv6 - param_opt -- ###################################################
po = ns:taboption("basic", Value, "param_opt",
translate("Optional Parameter"),
translate("Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)") )
function po.validate(self, value)
- return _option_validate(self, value)
+ return _option_validate(self, value, true)
end
function po.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
svc6:value("-", translate("-- custom --") )
-- IPv4/IPv6 - use_https -- ###################################################
-if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
+
+--We call it globally as it's called 4 times outside specific function.
+local has_ssl = DDNS.env_info("has_ssl")
+
+if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
https = ns:taboption("basic", Flag, "use_https",
translate("Use HTTP Secure") )
https.orientation = "horizontal"
function https.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_ssl and value == "1" then
+ if not has_ssl and value == "1" then
self.description = bold_on .. font_red ..
translate("HTTPS not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
return value
end
function https.validate(self, value)
- if (value == "1" and DDNS.has_ssl ) or value == "0" then return value end
+ if (value == "1" and has_ssl ) or value == "0" then return value end
return nil, err_tab_basic(self) .. translate("HTTPS not supported") .. " !"
end
function https.write(self, section, value)
end
-- IPv4/IPv6 - cacert -- ######################################################
-if DDNS.has_ssl then
+if has_ssl then
cert = ns:taboption("basic", Value, "cacert",
translate("Path to CA-Certificate"),
translate("directory or path/file") .. "<br />" ..
src6:value("web", translate("URL"))
src6:value("interface", translate("Interface"))
src6:value("script", translate("Script"))
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
src6.description = err_ipv6_other
end
function src6.cfgvalue(self, section)
function src6.validate(self, value)
if usev6:formvalue(section) ~= "1" then
return "" -- ignore on IPv4 selected
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
elseif not _verify_ip_source() then
return nil, err_tab_adv(self) ..
ipn6:depends("ipv6_source", "network")
ipn6.default = "wan6"
WADM.cbi_add_networks(ipn6)
-if DDNS.has_ipv6 then
+if has_ipv6 then
ipn6.description = translate("Defines the network to read systems IPv6-Address from")
else
ipn6.description = err_ipv6_other
-- ignore if IPv4 selected OR
-- ignore everything except "network"
return ""
- elseif DDNS.has_ipv6 then
+ elseif has_ipv6 then
return value
else
return nil, err_tab_adv(self) .. err_ipv6_plain
translate("URL to detect") .. " [IPv6]" )
iurl6:depends("ipv6_source", "web")
iurl6.default = "http://checkipv6.dyndns.com"
-if DDNS.has_ipv6 then
+if has_ipv6 then
iurl6.description = translate("Defines the Web page to read systems IPv6-Address from")
else
iurl6.description = err_ipv6_other
-- ignore if IPv4 selected OR
-- ignore everything except "web"
return ""
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
elseif not value or #value == 0 then
return nil, err_tab_adv(self) .. translate("missing / required")
eif6:depends("ipv6_source", "script")
eif6.default = "wan6"
WADM.cbi_add_networks(eif6)
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
eif6.description = err_ipv6_other
else
eif6.description = translate("Network on which the ddns-updater scripts will be started")
or fsrc6 == "network"
or fsrc6 == "interface" then
return "" -- ignore IPv4, network, interface
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
else
return value
end
function eif6.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
-end
+end
-- IPv4/IPv6 - bind_network -- ################################################
-if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
+
+local has_bindnet = DDNS.env_info("has_bindnet")
+
+if has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
bnet = ns:taboption("advanced", ListValue, "bind_network",
translate("Bind Network") )
bnet:depends("ipv4_source", "web")
WADM.cbi_add_networks(bnet)
function bnet.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_bindnet and value ~= "" then
+ if not has_bindnet and value ~= "" then
self.description = bold_on .. font_red ..
translate("Binding to a specific network not supported") .. font_off .. "<br />" ..
translate("please set to 'default'") .. " !" .. bold_off
return value
end
function bnet.validate(self, value)
- if ( (value ~= "") and DDNS.has_bindnet ) or (value == "") then return value end
+ if ( (value ~= "") and has_bindnet ) or (value == "") then return value end
return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !"
end
function bnet.parse(self, section, novld)
-- IPv4 + IPv6 - force_ipversion -- ###########################################
-- optional to force wget/curl and host to use only selected IP version
-- command parameter "-4" or "-6"
-if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then
+
+local has_forceip = DDNS.env_info("has_forceip")
+
+if has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then
fipv = ns:taboption("advanced", Flag, "force_ipversion",
translate("Force IP Version") )
fipv.orientation = "horizontal"
function fipv.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_forceip and value ~= "0" then
+ if not has_forceip and value ~= "0" then
self.description = bold_on .. font_red ..
translate("Force IP Version not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
return value
end
function fipv.validate(self, value)
- if (value == "1" and DDNS.has_forceip) or value == "0" then return value end
+ if (value == "1" and has_forceip) or value == "0" then return value end
return nil, err_tab_adv(self) .. translate("Force IP Version not supported")
end
end
-- IPv4 + IPv6 - dns_server -- ################################################
-- optional DNS Server to use resolving my IP
-if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
+
+local has_dnsserver = DDNS.env_info("has_dnsserver")
+
+if has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
dns = ns:taboption("advanced", Value, "dns_server",
translate("DNS-Server"),
translate("OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'.") .. "<br />" ..
-- if .datatype is set, then it is checked before calling this function
if not value or (#value == 0) then
return "" -- ignore on empty
- elseif not DDNS.has_dnsserver then
+ elseif not has_dnsserver then
return nil, err_tab_adv(self) .. translate("Specifying a DNS-Server is not supported")
elseif not DTYP.host(value) then
return nil, err_tab_adv(self) .. translate("use hostname, FQDN, IPv4- or IPv6-Address")
end
-- IPv4 + IPv6 - force_dnstcp -- ##############################################
-if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then
+
+local has_bindhost = DDNS.env_info("has_bindhost")
+
+if has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then
tcp = ns:taboption("advanced", Flag, "force_dnstcp",
translate("Force TCP on DNS") )
tcp.orientation = "horizontal"
function tcp.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_bindhost and value ~= "0" then
+ if not has_bindhost and value ~= "0" then
self.description = bold_on .. font_red ..
translate("DNS requests via TCP not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
return value
end
function tcp.validate(self, value)
- if (value == "1" and DDNS.has_bindhost ) or value == "0" then
+ if (value == "1" and has_bindhost ) or value == "0" then
return value
end
return nil, err_tab_adv(self) .. translate("DNS requests via TCP not supported")
-- IPv4 + IPv6 - proxy -- #####################################################
-- optional Proxy to use for http/https requests [user:password@]proxyhost[:port]
-if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
+
+local has_proxy = DDNS.env_info("has_proxy")
+
+if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
pxy = ns:taboption("advanced", Value, "proxy",
translate("PROXY-Server") )
pxy.placeholder="user:password@myproxy.lan:8080"
function pxy.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_proxy and value ~= "" then
+ if not has_proxy and value ~= "" then
self.description = bold_on .. font_red ..
translate("PROXY-Server not supported") .. font_off .. "<br />" ..
translate("please remove entry") .. "!" .. bold_off
-- if .datatype is set, then it is checked before calling this function
if not value or (#value == 0) then
return "" -- ignore on empty
- elseif DDNS.has_proxy then
+ elseif has_proxy then
local ipv6 = usev6:formvalue(section) or "0"
local force = fipv:formvalue(section) or "0"
local command = CTRL.luci_helper .. [[ -]]
end
-- No IPv6 support
-if not DDNS.has_ipv6 then
+if not DDNS.env_info("has_ipv6") then
local v6 = s:option(DummyValue, "_no_ipv6")
v6.titleref = 'http://www.openwrt.org" target="_blank'
v6.rawhtml = true
end
-- No HTTPS support
-if not DDNS.has_ssl then
+if not DDNS.env_info("has_ssl") then
local sl = s:option(DummyValue, "_no_https")
sl.titleref = DISP.build_url("admin", "system", "packages")
sl.rawhtml = true
end
-- No bind_network
-if not DDNS.has_bindnet then
+if not DDNS.env_info("has_bindnet") then
local bn = s:option(DummyValue, "_no_bind_network")
bn.titleref = DISP.build_url("admin", "system", "packages")
bn.rawhtml = true
end
-- currently only cURL possibly without proxy support
-if not DDNS.has_proxy then
+if not DDNS.env_info("has_proxy") then
local px = s:option(DummyValue, "_no_proxy")
px.titleref = DISP.build_url("admin", "system", "packages")
px.rawhtml = true
end
-- "Force IP Version not supported"
-if not DDNS.has_forceip then
+if not DDNS.env_info("has_forceip") then
local fi = s:option(DummyValue, "_no_force_ip")
fi.titleref = DISP.build_url("admin", "system", "packages")
fi.rawhtml = true
translate("Force IP Version not supported") .. bold_off
local value = translate("BusyBox's nslookup and Wget do not support to specify " ..
"the IP version to use for communication with DDNS Provider!")
- if not (DDNS.has_wgetssl or DDNS.has_curl or DDNS.has_fetch) then
+ if not (DDNS.env_info("has_wgetssl") or DDNS.env_info("has_curl") or DDNS.env_info("has_fetch")) then
value = value .. "<br />- " ..
translate("You should install 'wget' or 'curl' or 'uclient-fetch' package.")
end
- if not DDNS.has_bindhost then
+ if not DDNS.env_info("has_bindhost") then
value = value .. "<br />- " ..
translate("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.")
end
end
-- "DNS requests via TCP not supported"
-if not DDNS.has_bindhost then
+if not DDNS.env_info("has_bindhost") then
local dt = s:option(DummyValue, "_no_dnstcp")
dt.titleref = DISP.build_url("admin", "system", "packages")
dt.rawhtml = true
end
-- nslookup compiled with musl produce problems when using
-if not DDNS.has_dnsserver then
+if not DDNS.env_info("has_dnsserver") then
local ds = s:option(DummyValue, "_no_dnsserver")
ds.titleref = DISP.build_url("admin", "system", "packages")
ds.rawhtml = true
end
-- certificates installed
-if DDNS.has_ssl and not DDNS.has_cacerts then
+if DDNS.env_info("has_ssl") and not DDNS.env_info("has_cacerts") then
local ca = s:option(DummyValue, "_no_certs")
ca.titleref = DISP.build_url("admin", "system", "packages")
ca.rawhtml = true
-- Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0.
-local NXFS = require "nixio.fs"
local DISP = require "luci.dispatcher"
local HTTP = require "luci.http"
local SYS = require "luci.sys"
local CTRL = require "luci.controller.ddns" -- this application's controller
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
-local show_hints = not (DDNS.has_ipv6 -- IPv6 support
- and DDNS.has_ssl -- HTTPS support
- and DDNS.has_proxy -- Proxy support
- and DDNS.has_bindhost -- DNS TCP support
- and DDNS.has_forceip -- Force IP version
- and DDNS.has_dnsserver -- DNS server support
- and DDNS.has_bindnet -- Bind to network/interface
- and DDNS.has_cacerts -- certificates installed at /etc/ssl/certs
+local show_hints = not (DDNS.env_info("has_ipv6") -- IPv6 support
+ and DDNS.env_info("has_ssl") -- HTTPS support
+ and DDNS.env_info("has_proxy") -- Proxy support
+ and DDNS.env_info("has_bindhost") -- DNS TCP support
+ and DDNS.env_info("has_forceip") -- Force IP version
+ and DDNS.env_info("has_dnsserver") -- DNS server support
+ and DDNS.env_info("has_bindnet") -- Bind to network/interface
+ and DDNS.env_info("has_cacerts") -- certificates installed at /etc/ssl/certs
)
local not_enabled = not SYS.init.enabled("ddns")
local need_update = not CTRL.service_ok()
local NX = require "nixio"
local NXFS = require "nixio.fs"
-local OPKG = require "luci.model.ipkg"
local UCI = require "luci.model.uci"
local SYS = require "luci.sys"
-local UTIL = require "luci.util"
-local function _check_certs()
- local _, v = NXFS.glob("/etc/ssl/certs/*.crt")
- if ( v == 0 ) then _, v = NXFS.glob("/etc/ssl/certs/*.pem") end
- return (v > 0)
-end
+function env_info(type)
+
+ if ( type == "has_ssl" ) or ( type == "has_proxy" ) or ( type == "has_forceip" )
+ or ( type == "has_bindnet" ) or ( type == "has_fetch" )
+ or ( type == "has_wgetssl" ) or ( type == "has_curl" )
+ or ( type == "has_curlssl" ) or ( type == "has_curlpxy" )
+ or ( type == "has_fetchssl" ) or ( type == "has_bbwget" ) then
+
+ local function has_wgetssl()
+ return (SYS.call( [[which wget-ssl >/dev/null 2>&1]] ) == 0) -- and true or nil
+ end
+
+ local function has_curlssl()
+ return (SYS.call( [[$(which curl) -V 2>&1 | grep "Protocols:" | grep -qF "https"]] ) ~= 0)
+ end
+
+ local function has_fetch()
+ return (SYS.call( [[which uclient-fetch >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_fetchssl()
+ return NXFS.access("/lib/libustream-ssl.so")
+ end
+
+ local function has_curl()
+ return (SYS.call( [[which curl >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_curlpxy()
+ return (SYS.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_bbwget()
+ return (SYS.call( [[$(which wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0)
+ end
+
+ if type == "has_wgetssl" then
+ return has_wgetssl()
+
+ elseif type == "has_curl" then
+ return has_curl()
+
+ elseif type == "has_curlssl" then
+ return has_curlssl()
+
+ elseif type == "has_curlpxy" then
+ return has_curlpxy()
+
+ elseif type == "has_fetch" then
+ return has_fetch()
+
+ elseif type == "has_fetchssl" then
+ return has_fetchssl()
+
+ elseif type == "has_bbwget" then
+ return has_bbwget()
+
+ elseif type == "has_ssl" then
+ if has_wgetssl() then return true end
+ if has_curlssl() then return true end
+ if (has_fetch() and has_fetchssl()) then return true end
+ return false
+
+ elseif type == "has_proxy" then
+ if has_wgetssl() then return true end
+ if has_curlpxy() then return true end
+ if has_fetch() then return true end
+ if has_bbwget() then return true end
+ return false
+
+ elseif type == "has_forceip" then
+ if has_wgetssl() then return true end
+ if has_curl() then return true end
+ if has_fetch() then return true end -- only really needed for transfer
+ return false
+
+ elseif type == "has_bindnet" then
+ if has_curl() then return true end
+ if has_wgetssl() then return true end
+ return false
+ end
+
+ elseif ( type == "has_dnsserver" ) or ( type == "has_bindhost" ) or ( type == "has_hostip" ) or ( type == "has_nslookup" ) then
+ local function has_bindhost()
+ if (SYS.call( [[which host >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which host >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which khost >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which drill >/dev/null 2>&1]] ) == 0) then return true end
+ return false
+ end
+
+ local function has_hostip()
+ return (SYS.call( [[which hostip >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_nslookup()
+ return (SYS.call( [[$(which nslookup) localhost 2>&1 | grep -qF "(null)"]] ) ~= 0)
+ end
+
+ if type == "has_bindhost" then
+ return has_bindhost()
+ elseif type == "has_hostip" then
+ return has_hostip()
+ elseif type == "has_nslookup" then
+ return has_nslookup()
+ elseif tyep == "has_dnsserver" then
+ if has_bindhost() then return true end
+ if has_hostip() then return true end
+ if has_nslookup() then return true end
+ return false
+ end
+
+ elseif type == "has_ipv6" then
+ return (NXFS.access("/proc/net/ipv6_route") and NXFS.access("/usr/sbin/ip6tables"))
+
+ elseif type == "has_cacerts" then
+ --old _check_certs() local function
+ local _, v = NXFS.glob("/etc/ssl/certs/*.crt")
+ if ( v == 0 ) then _, v = NXFS.glob("/etc/ssl/certs/*.pem") end
+ return (v > 0)
+ else
+ return
+ end
-has_wgetssl = (SYS.call( [[which wget-ssl >/dev/null 2>&1]] ) == 0) -- and true or nil
-has_curl = (SYS.call( [[which curl >/dev/null 2>&1]] ) == 0)
-has_curlssl = (SYS.call( [[$(which curl) -V 2>&1 | grep "Protocols:" | grep -qF "https"]] ) ~= 0)
-has_curlpxy = (SYS.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0)
-has_fetch = (SYS.call( [[which uclient-fetch >/dev/null 2>&1]] ) == 0)
-has_fetchssl = NXFS.access("/lib/libustream-ssl.so")
-has_bbwget = (SYS.call( [[$(which wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0)
-has_bindhost = (SYS.call( [[which host >/dev/null 2>&1]] ) == 0)
- or (SYS.call( [[which khost >/dev/null 2>&1]] ) == 0)
- or (SYS.call( [[which drill >/dev/null 2>&1]] ) == 0)
-has_hostip = (SYS.call( [[which hostip >/dev/null 2>&1]] ) == 0)
-has_nslookup = (SYS.call( [[$(which nslookup) localhost 2>&1 | grep -qF "(null)"]] ) ~= 0)
-has_ipv6 = (NXFS.access("/proc/net/ipv6_route") and NXFS.access("/usr/sbin/ip6tables"))
-has_ssl = (has_wgetssl or has_curlssl or (has_fetch and has_fetchssl))
-has_proxy = (has_wgetssl or has_curlpxy or has_fetch or has_bbwget)
-has_forceip = (has_wgetssl or has_curl or has_fetch) -- only really needed for transfer
-has_dnsserver = (has_bindhost or has_hostip or has_nslookup)
-has_bindnet = (has_wgetssl or has_curl)
-has_cacerts = _check_certs()
+end
-- function to calculate seconds from given interval and unit
function calc_seconds(interval, unit)
-
<!-- ++ BEGIN ++ Dynamic DNS ++ system_status.htm ++ -->
<script type="text/javascript">//<![CDATA[
// helper to move status data to the relevant
if ( !(tbl) ) { return; }
// clear all rows
- while (tbl.rows.length > 1)
- tbl.deleteRow(1);
+ while (tbl.firstElementChild !== tbl.lastElementChild)
+ tbl.removeChild(tbl.lastElementChild);
// variable for Modulo-Division use to set cbi-rowstyle-? (0 or 1)
var i = -1;
if (data[0].enabled == 0) {
var txt = '<strong><font color="red"><%:DDNS Autostart disabled%></font>' ;
var url = '<a href="' + data[0].url_up + '"><%:enable here%></a></strong>' ;
- var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1);
- var td = tr.insertCell(-1);
- td.colSpan = 2 ;
- td.innerHTML = txt + " - " + url
- tr.insertCell(-1).colSpan = 3 ;
+ tbl.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(((j + i) % 2) + 1), [
+ E('<div class="td">', [ txt," - ", url ])
+ ]));
i++ ;
}
+ var configuration;
+ var next_update;
+ var lookup;
+ var registered_ip;
+ var network;
+
for( j = 1; j < data.length; j++ )
{
- var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1) ;
-
// configuration
- tr.insertCell(-1).innerHTML = '<strong>' + data[j].section + '</strong>' ;
+ configuration = data[j].section;
// pid
// data[j].pid ignored here
// next update
switch (data[j].datenext) {
case "_empty_":
- tr.insertCell(-1).innerHTML = '<em><%:Unknown error%></em>' ;
+ next_update = '<em><%:Unknown error%></em>';
break;
case "_stopped_":
- tr.insertCell(-1).innerHTML = '<em><%:Stopped%></em>' ;
+ next_update = '<em><%:Stopped%></em>';
break;
case "_disabled_":
- tr.insertCell(-1).innerHTML = '<em><%:Disabled%></em>' ;
+ next_update = '<em><%:Disabled%></em>';
break;
case "_noupdate_":
- tr.insertCell(-1).innerHTML = '<em><%:Update error%></em>' ;
+ next_update = '<em><%:Update error%></em>';
break;
case "_runonce_":
- tr.insertCell(-1).innerHTML = '<em><%:Run once%></em>' ;
+ next_update = '<em><%:Run once%></em>';
break;
case "_verify_":
- tr.insertCell(-1).innerHTML = '<em><%:Verify%></em>';
+ next_update = '<em><%:Verify%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[j].datenext ;
+ next_update = data[j].datenext;
break;
}
// lookup
if (data[j].lookup == "_nolookup_")
- tr.insertCell(-1).innerHTML = '<em><%:config error%></em>';
+ lookup = '<em><%:config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[j].lookup;
+ lookup = data[j].lookup;
// registered IP
switch (data[j].reg_ip) {
case "_nolookup_":
- tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
+ registered_ip = '<em><%:config error%></em>';
break;
case "_nodata_":
- tr.insertCell(-1).innerHTML = '<em><%:No data%></em>';
+ registered_ip = '<em><%:No data%></em>';
break;
case "_noipv6_":
- tr.insertCell(-1).innerHTML = '<em><%:IPv6 not supported%></em>';
+ registered_ip = '<em><%:IPv6 not supported%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[j].reg_ip;
+ registered_ip = data[j].reg_ip;
break;
}
// monitored interface
if (data[j].iface == "_nonet_")
- tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
+ network = '<em><%:Config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[j].iface;
+ network = data[j].iface;
+
+ tbl.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(((j + i) % 2) + 1), [
+ E('<div class="td">', [ E('<strong>', configuration) ]),
+ E('<div class="td">', next_update),
+ E('<div class="td">', lookup),
+ E('<div class="td">', registered_ip),
+ E('<div class="td">', network)
+ ]));
}
- if (tbl.rows.length == 1 || (data[0].enabled == 0 && tbl.rows.length == 2) ) {
+ if (tbl.firstElementChild === tbl.lastElementChild || (data[0].enabled == 0 && tbl.childNodes.length == 2) ) {
var br = '<br />';
- if (tbl.rows.length > 1)
+ var msg = '<%:There is no service configured.%>';
+ if (tbl.firstElementChild !== tbl.lastElementChild)
br = '';
- var tr = tbl.insertRow(-1);
- tr.className = "cbi-section-table-row";
- var td = tr.insertCell(-1);
- td.colSpan = 5;
- td.innerHTML = '<em>' + br + '<%:There is no service configured.%></em>' ;
+ msg = br + msg;
+ tbl.appendChild(E('<div class="tr cbi-section-table-row">', [
+ E('<div class="td">', [ E('<em>', msg) ])
+ ]));
}
}
<fieldset class="cbi-section" id="ddns_status_section">
<legend><a href="<%=url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend>
- <table class="cbi-section-table" id="ddns_status_table">
- <tr class="cbi-section-table-titles">
- <th class="cbi-section-table-cell"><%:Configuration%></th>
- <th class="cbi-section-table-cell"><%:Next Update%></th>
- <th class="cbi-section-table-cell"><%:Lookup Hostname%></th>
- <th class="cbi-section-table-cell"><%:Registered IP%></th>
- <th class="cbi-section-table-cell"><%:Network%></th>
- </tr>
- <tr class="cbi-section-table-row">
- <td colspan="5"><em><br /><%:Collecting data...%></em></td>
- </tr>
- </table>
+ <div class="table cbi-section-table" id="ddns_status_table">
+ <div class="tr cbi-section-table-titles">
+ <div class="th cbi-section-table-cell"><%:Configuration%></div>
+ <div class="th cbi-section-table-cell"><%:Next Update%></div>
+ <div class="th cbi-section-table-cell"><%:Lookup Hostname%></div>
+ <div class="th cbi-section-table-cell"><%:Registered IP%></div>
+ <div class="th cbi-section-table-cell"><%:Network%></div>
+ </div>
+ <div class="tr cbi-section-table-row">
+ <div class="td"><em><br /><%:Collecting data...%></em></div>
+ </div>
+ </div>
</fieldset>
<!-- ++ END ++ Dynamic DNS ++ system_status.htm ++ -->
o.nocreate = true
o.default = "wan"
o.template = "cbi/firewall_zonelist"
+o.rmempty = false
o = s:option(DynamicList, "src_mac",
o.datatype = "neg(portrange)"
o.placeholder = translate("any")
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Value, "src_dip",
translate("External IP address"),
"destination port or port range on this host"))
o.datatype = "neg(portrange)"
-
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Value, "dest", translate("Internal zone"))
o.nocreate = true
o.placeholder = translate("any")
o.datatype = "portrange"
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Flag, "reflection", translate("Enable NAT Loopback"))
o.rmempty = true
if created then
m.uci:save("firewall")
luci.http.redirect(ds.build_url(
- "admin/network/firewall/redirect", created
+ "admin/network/firewall/forwards", created
))
end
end
o.datatype = "neg(portrange)"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(Value, "dest", translate("Destination zone"))
o.nocreate = true
o.placeholder = translate("any")
o.datatype = "neg(portrange)"
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(Value, "src_dip",
translate("SNAT IP address"),
o.rmempty = true
o.placeholder = translate('Do not rewrite')
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
s:option(Value, "extra",
translate("Extra arguments"),
o = s:option(Value, "src", translate("Source zone"))
o.nocreate = true
o.allowany = true
- o.default = "wan"
+ o.allowlocal = "src"
o.template = "cbi/firewall_zonelist"
o.datatype = "list(neg(portrange))"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
- o = s:option(Value, "dest", translate("Destination zone"))
+ o = s:option(Value, "dest_local", translate("Output zone"))
+ o.nocreate = true
+ o.allowany = true
+ o.rmempty = false
+ o.template = "cbi/firewall_zonelist"
+ o.alias = "dest"
+ o:depends("src", "")
+
+ o = s:option(Value, "dest_remote", translate("Destination zone"))
o.nocreate = true
o.allowany = true
o.allowlocal = true
o.template = "cbi/firewall_zonelist"
+ o.alias = "dest"
+ o:depends({["src"] = "", ["!reverse"] = true})
o = s:option(Value, "dest_ip", translate("Destination address"))
o.datatype = "list(neg(portrange))"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(ListValue, "target", translate("Action"))
o.default = "ACCEPT"
translate("Passes additional arguments to iptables. Use with care!"))
end
-o = s:option(MultiValue, "weekdays", translate("Week Days"))
-o.oneline = true
-o.widget = "checkbox"
+o = s:option(DropDown, "weekdays", translate("Week Days"))
+o.multiple = true
+o.display = 5
o:value("Sun", translate("Sunday"))
o:value("Mon", translate("Monday"))
o:value("Tue", translate("Tuesday"))
o:value("Fri", translate("Friday"))
o:value("Sat", translate("Saturday"))
-o = s:option(MultiValue, "monthdays", translate("Month Days"))
-o.oneline = true
-o.widget = "checkbox"
+o = s:option(DropDown, "monthdays", translate("Month Days"))
+o.multiple = true
+o.display = 15
for i = 1,31 do
o:value(translate(i))
end
end
local function rule_src_txt(self, s)
- local z = ft.fmt_zone(self.map:get(s, "src"), translate("any zone"))
- local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host"))
+ local z = ft.fmt_zone(self.map:get(s, "src"))
local p = ft.fmt_port(self.map:get(s, "src_port"))
local m = ft.fmt_mac(self.map:get(s, "src_mac"))
- if p and m then
- return translatef("From %s in %s with source %s and %s", a, z, p, m)
- elseif p or m then
- return translatef("From %s in %s with source %s", a, z, p or m)
+ -- Forward/Input
+ if z and #z > 0 then
+ local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host"))
+ if p and m then
+ return translatef("From %s in %s with source %s and %s", a, z, p, m)
+ elseif p or m then
+ return translatef("From %s in %s with source %s", a, z, p or m)
+ else
+ return translatef("From %s in %s", a, z)
+ end
+
+ -- Output
else
- return translatef("From %s in %s", a, z)
+ local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any router IP"))
+ if p and m then
+ return translatef("From %s on <var>this device</var> with source %s and %s", a, p, m)
+ elseif p or m then
+ return translatef("From %s on <var>this device</var> with source %s", a, p or m)
+ else
+ return translatef("From %s on <var>this device</var>", a)
+ end
end
end
target.rawhtml = true
target.width = "20%"
function target.cfgvalue(self, s)
- local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "dest"))
+ local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "src"), self.map:get(s, "dest"))
local l = ft.fmt_limit(self.map:get(s, "limit"),
self.map:get(s, "limit_burst"))
function net.write(self, section, value)
zone:clear_networks()
- local n
- for n in ut.imatch(value) do
- zone:add_network(n)
+ local net
+ for net in ut.imatch(value) do
+ local n = nw:get_network(net) or nw:add_network(net, { proto = "none" })
+ if n then
+ zone:add_network(n:name())
+ end
end
end
end
end
-function fmt_target(x, dest)
- if dest and #dest > 0 then
+function fmt_target(x, src, dest)
+ if not src or #src == 0 then
+ if x == "ACCEPT" then
+ return _("Accept output")
+ elseif x == "REJECT" then
+ return _("Refuse output")
+ elseif x == "NOTRACK" then
+ return _("Do not track output")
+ else --if x == "DROP" then
+ return _("Discard output")
+ end
+ elseif dest and #dest > 0 then
if x == "ACCEPT" then
return _("Accept forward")
elseif x == "REJECT" then
msgid "Output"
msgstr "Sortida"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa paràmetres addicionals al iptables. Utilitzeu-ho amb cura!"
msgid "Output"
msgstr "Výstup"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Předává další argumenty iptables. Používat opatrně!"
msgid "Output"
msgstr "Ausgang"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Gibt zusätzliche Kommandozeilenargumente an iptables weiter. Mit Vorsicht "
msgid "Output"
msgstr "Έξοδος"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Output"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Salida"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Pasa más parámetros a IPTables. ¡Usar con cuidado!"
msgid "Output"
msgstr "Sortie"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Kimenet"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"További argumentumok küldése az iptables részére. Használja körültekintően!"
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa comandi addizionali a iptables. Usare con cura!"
msgid "Output"
msgstr "送信"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"iptablesにパススルーする追加の引数を設定してください。ただし、注意して設定し"
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "iptables 명령에 추가 인자들을 더합니다. 조심해 사용하세요!"
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Utdata"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Sender flere argumenter til iptables. Bruk med forsiktighet!"
msgid "Output"
msgstr "Wyjście (Output)"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Przekazuje dodatkowe argumenty do iptables. Zachowaj szczególną ostrożność!"
msgid "Output"
msgstr "Saída"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa argumentos adicionais para o iptables. Use com cuidado!"
msgid "Output"
msgstr "Saída"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa argumentos adicionais para o iptables. Usar com cuidado!"
msgid "Output"
msgstr "Ieşire"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Исходящий трафик"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Передаёт дополнительные аргументы таблице iptables. Используйте с "
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr "Utmatning"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-12-29 12:53+0200\n"
+"PO-Revision-Date: 2018-06-10 17:15+0200\n"
"Last-Translator: Yurii <yuripet@gmail.com>\n"
"Language-Team: none\n"
"Language: uk\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.6\n"
+
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "%s in %s"
msgstr "%s у %s"
msgstr "<var>%s</var> з лімітом %s"
msgid "Accept forward"
-msgstr ""
+msgstr "Приймати переспрямовування"
msgid "Accept input"
-msgstr ""
+msgstr "Приймати введення"
msgid "Action"
msgstr "Дія"
msgstr "Розширені настройки"
msgid "Allow forward from <em>source zones</em>:"
-msgstr "Дозволити спрямовування від <em>зон-джерел</em>:"
+msgstr "Дозволити переспрямовування від <em>зон-джерел</em>:"
msgid "Allow forward to <em>destination zones</em>:"
-msgstr "Дозволити спрямовування до <em>зон призначення</em>:"
+msgstr "Дозволити переспрямовування до <em>зон призначення</em>:"
msgid "Any"
msgstr "Будь-який"
msgstr "Зона призначення"
msgid "Disable"
-msgstr ""
+msgstr "Вимкнути"
msgid "Discard forward"
-msgstr ""
+msgstr "Відкидати переспрямовування"
msgid "Discard input"
-msgstr ""
+msgstr "Відкидати введення"
msgid "Do not rewrite"
msgstr "Не перезаписувати"
msgid "Do not track forward"
-msgstr ""
+msgstr "Не відслідковувати переспрямовування"
msgid "Do not track input"
-msgstr ""
+msgstr "Не відслідковувати введення"
msgid "Drop invalid packets"
msgstr "Відкидати помилкові пакети"
msgstr "Увімкнути реєстрування у цій зоні"
msgid "Experimental feature. Not fully compatible with QoS/SQM."
-msgstr ""
+msgstr "Експериментальна функція. Не повністю сумісно з QoS / SQM."
msgid "External IP address"
msgstr "Зовнішня IP-адреса"
msgstr "Брандмауер — Настроювані правила"
msgid "Firewall - Port Forwards"
-msgstr "Ð\91Ñ\80андмаÑ\83еÑ\80 â\80\94 Спрямовування портів"
+msgstr "Ð\91Ñ\80андмаÑ\83еÑ\80 â\80\94 Ð\9fеÑ\80еÑ\81прямовування портів"
msgid "Firewall - Traffic Rules"
msgstr "Брандмауер — Правила трафіка"
msgstr "Увімкнути відстеження з'єднань"
msgid "Forward"
-msgstr "Спрямовування"
+msgstr "Ð\9fеÑ\80еÑ\81прямовування"
msgid "Forward to"
-msgstr "спрямовування до"
+msgstr "переспрямовування до"
msgid "Friday"
-msgstr ""
+msgstr "П'ятниця"
msgid "From %s in %s"
msgstr "%s у %s"
msgstr "Загальні настройки"
msgid "Hardware flow offloading"
-msgstr ""
+msgstr "Апаратні засоби розвантаження потоку"
msgid "IP"
-msgstr ""
+msgstr "IP-адреса"
msgid "IP range"
-msgstr ""
+msgstr "Діапазон IP"
msgid "IPs"
-msgstr ""
+msgstr "IP-алреси"
msgid "IPv4"
msgstr "IPv4"
msgstr "Вхідний"
msgid "Inter-Zone Forwarding"
-msgstr "СпÑ\80Ñ\8fмовÑ\83ваннÑ\8f кÑ\80Ñ\96зÑ\8c зони"
+msgstr "Ð\9fеÑ\80еÑ\81пÑ\80Ñ\8fмовÑ\83ваннÑ\8f мÑ\96ж зонами"
msgid "Internal IP address"
msgstr "Внутрішня IP-адреса"
msgstr "Обмеження повідомлень журналу"
msgid "MAC"
-msgstr ""
+msgstr "MAC-алреса"
msgid "MACs"
-msgstr ""
+msgstr "MAC-алреси"
msgid "MSS clamping"
msgstr "Затискання MSS"
msgid "Match forwarded traffic to the given destination port or port range."
msgstr ""
-"Зіставляти трафік, що спрямовується на заданий порт призначення або діапазон "
-"портів."
+"Зіставляти трафік, що переспрямовується на заданий порт призначення або "
+"дÑ\96апазон поÑ\80Ñ\82Ñ\96в."
msgid ""
"Match incoming traffic directed at the given destination port or port range "
"діапазоні портів вузла клієнта."
msgid "Monday"
-msgstr ""
+msgstr "Понеділок"
msgid "Month Days"
-msgstr ""
+msgstr "Дні місяця"
msgid "Name"
msgstr "Ім'я"
msgstr "Нове правило SNAT"
msgid "New forward rule"
-msgstr "Нове правило спрямовування"
+msgstr "Нове правило переспрямовування"
msgid "New input rule"
msgstr "Нове вхідне правило"
msgid "New port forward"
-msgstr "Нове спрямовування порту"
+msgstr "Нове переспрямовування порту"
msgid "New source NAT"
msgstr "Новий NAT джерела"
msgid "Output"
msgstr "Вихідний"
+msgid "Output zone"
+msgstr "Вихідна зона"
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Передача додаткових аргументів для IPTables. Використовуйте з обережністю!"
msgid "Port Forwards"
-msgstr "Спрямовування портів"
+msgstr "Ð\9fеÑ\80еÑ\81прямовування портів"
msgid ""
"Port forwarding allows remote computers on the Internet to connect to a "
"specific computer or service within the private LAN."
msgstr ""
-"Спрямовування портів дозволяє віддаленим комп'ютерам з Інтернету "
+"Ð\9fеÑ\80еÑ\81прямовування портів дозволяє віддаленим комп'ютерам з Інтернету "
"підключатися до певного комп'ютера або служби у приватній мережі."
msgid "Protocol"
msgstr "Переспрямувати відповідний вхідний трафік на заданий внутрішній вузол"
msgid "Refuse forward"
-msgstr ""
+msgstr "Відхиляти переспрямовування"
msgid "Refuse input"
-msgstr ""
+msgstr "Відхиляти введення"
msgid "Requires hardware NAT support. Implemented at least for mt7621"
-msgstr ""
+msgstr "Необхідна апаратна підтримка NAT. Впроваджено принаймні для mt7621"
msgid "Restart Firewall"
-msgstr ""
+msgstr "Перезавантажити брандмауер"
msgid "Restrict Masquerading to given destination subnets"
msgstr "Обмежити підміну заданими підмережами призначення"
msgstr "перезапис на вихідний %s, %s"
msgid "Routing/NAT Offloading"
-msgstr ""
+msgstr "Розвантаження маршрутизації/NAT"
msgid "Rule is disabled"
-msgstr ""
+msgstr "Правило вимкнено"
msgid "Rule is enabled"
-msgstr ""
+msgstr "Правило ввімкнено"
msgid "SNAT IP address"
msgstr "IP-адреса SNAT"
msgstr "Порт SNAT"
msgid "Saturday"
-msgstr ""
+msgstr "Субота"
msgid "Software based offloading for routing/NAT"
-msgstr ""
+msgstr "Програмне розвантаження для маршрутизації/NAT"
msgid "Software flow offloading"
-msgstr ""
+msgstr "Програмне розвантаження потоку"
msgid "Source IP address"
msgstr "IP-адреса джерела"
msgstr "Зона-джерело"
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата початку (рррр-мм-дд)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Час початку (гг:хх:сс)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата зупинки (рррр-мм-дд)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Час зупинки (гг:хх:сс)"
msgid "Sunday"
-msgstr ""
+msgstr "Неділя"
msgid ""
"The firewall creates zones over your network interfaces to control network "
"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
"<em>not</em> imply a permission to forward from wan to lan as well."
msgstr ""
-"Опції, наведені нижче, управляють політиками спрямовування між цією (%s) та "
-"іншими зонами. <em>Зони призначення</em> покриваються трафіком, що "
-"<strong>виходить з %q</strong>. <em>Зони-джерела</em> покриваються трафіком "
-"з інших зон, <strong>спрямованим на %q</strong>. Правила спрямування є "
-"<em>односпрямованим</em>, тобто, спрямування від LAN до WAN <em>не</em> "
-"означає, що є також дозвіл спрямовувати від WAN в LAN."
+"Опції, наведені нижче, керують політиками переспрямовування між цією (%s) "
+"та іншими зонами. <em>Зони призначення</em> покриваються переспрямованим "
+"трафіком, що <strong>виходить з %q</strong>. <em>Зони-джерела</em> "
+"покриваються трафіком з інших зон, <strong>переспрямованим на %q</strong>. "
+"Правило переспрямовування є <em>односпрямованим</em>, тобто, спрямовування "
+"від LAN до WAN <em>не</em> означає, що є також дозвіл спрямовувати від WAN "
+"до LAN."
msgid ""
"This page allows you to change advanced properties of the port forwarding "
"entry. In most cases there is no need to modify those settings."
msgstr ""
-"На цій сторінці можна змінити додаткові властивості елемента спрямовування "
-"поÑ\80Ñ\82Ñ\96в. У бÑ\96лÑ\8cÑ\88оÑ\81Ñ\82Ñ\96 випадкÑ\96в змÑ\96нÑ\8eваÑ\82и Ñ\86Ñ\96 паÑ\80амеÑ\82Ñ\80и немаÑ\94 необÑ\85Ñ\96дноÑ\81Ñ\82Ñ\96."
+"На цій сторінці можна змінити додаткові властивості елемента переспрямовування "
+"поÑ\80Ñ\82Ñ\96в. У бÑ\96лÑ\8cÑ\88оÑ\81Ñ\82Ñ\96 випадкÑ\96в змÑ\96нÑ\8eваÑ\82и Ñ\86Ñ\96 паÑ\80амеÑ\82Ñ\80и немаÑ\94 поÑ\82Ñ\80еби."
msgid ""
"This page allows you to change advanced properties of the traffic rule "
"На цій сторінці можна змінити додаткові властивості елемента правил трафіка, "
"таких як відповідні параметри джерела та вузлів призначення."
-#, fuzzy
msgid ""
"This section defines common properties of %q. The <em>input</em> and "
"<em>output</em> options set the default policies for traffic entering and "
msgstr ""
"Цей розділ визначає загальні властивості %q. Параметри <em>вхідний</em> і "
"<em>вихідний</em> задають типову політику для трафіку на вході й виході з "
-"цієї зони, а параметр \"спрямовування\" описує політику спрямовування "
-"Ñ\82Ñ\80аÑ\84Ñ\96кÑ\83 мÑ\96ж Ñ\80Ñ\96зними меÑ\80ежами в межаÑ\85 зони. Ð\9fÑ\83нкÑ\82 <em>вкриті мережі</em> "
+"цієї зони, а параметр \"переспрямовування\" описує політику спрямовування "
+"Ñ\82Ñ\80аÑ\84Ñ\96кÑ\83 мÑ\96ж Ñ\80Ñ\96зними меÑ\80ежами в межаÑ\85 зони. Ð\9fÑ\83нкÑ\82 <em>Ð\9fокриті мережі</em> "
"визначає, які доступні мережі є членами цієї зони."
msgid "Thursday"
-msgstr ""
+msgstr "Четвер"
msgid "Time in UTC"
-msgstr ""
+msgstr "Час в UTC"
msgid "To %s at %s on <var>this device</var>"
msgstr "%s на %s <var>цього пристрою</var>"
"порти WAN на маршрутизаторі."
msgid "Tuesday"
-msgstr ""
+msgstr "Вівторок"
msgid "Via %s"
msgstr "Через %s"
msgstr "Через %s на %s"
msgid "Wednesday"
-msgstr ""
+msgstr "Середа"
msgid "Week Days"
-msgstr ""
+msgstr "Дні тижня"
msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering "
msgstr "Зона %q"
msgid "Zone ⇒ Forwardings"
-msgstr "Ð\97она â\87\92 Спрямовування"
+msgstr "Ð\97она â\87\92 Ð\9fеÑ\80еÑ\81прямовування"
msgid "Zones"
msgstr "Зони"
msgstr "будь-якій зоні"
msgid "day"
-msgstr ""
+msgstr "день"
msgid "don't track"
msgstr "не відстеж."
msgstr "опускати"
msgid "hour"
-msgstr ""
+msgstr "година"
msgid "minute"
-msgstr ""
+msgstr "хвилина"
msgid "not"
-msgstr ""
+msgstr "не"
msgid "port"
-msgstr ""
+msgstr "порт"
msgid "ports"
-msgstr ""
+msgstr "порти"
msgid "reject"
msgstr "відкидати"
msgid "second"
-msgstr ""
+msgstr "секунда"
msgid "traffic"
-msgstr ""
+msgstr "трафік"
msgid "type"
-msgstr ""
+msgstr "типом"
msgid "types"
-msgstr ""
+msgstr "типами"
msgid "Output"
msgstr "Output"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgstr "基本设置"
msgid "Hardware flow offloading"
-msgstr "硬件æµ\81é\87\8få\8d¸载"
+msgstr "硬件æµ\81é\87\8få\88\86载"
msgid "IP"
msgstr "IP"
msgid "Output"
msgstr "出站数据"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "传递到 iptables 的额外参数。小心使用!"
msgstr "源地址改写成 %s, %s"
msgid "Routing/NAT Offloading"
-msgstr "Routing/NAT å\8d¸载"
+msgstr "Routing/NAT å\88\86载"
msgid "Rule is disabled"
msgstr "规则已禁用"
msgstr "星期六"
msgid "Software based offloading for routing/NAT"
-msgstr "å\9fºäº\8e软件ç\9a\84 Routing/NAT å\8d¸载"
+msgstr "å\9fºäº\8e软件ç\9a\84 Routing/NAT å\88\86载"
msgid "Software flow offloading"
-msgstr "软件æµ\81é\87\8få\8d¸载"
+msgstr "软件æµ\81é\87\8få\88\86载"
msgid "Source IP address"
msgstr "源 IP 地址"
msgid "Output"
msgstr "出站資料"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "傳遞到 iptables 的額外引數。小心使用!"
local uci = require "luci.model.uci".cursor()
local util = require "luci.util"
-local fs = require "nixio"
+local nx = require "nixio"
function index()
if not nixio.fs.access("/etc/config/lxc") then
function lxc_create(lxc_name, lxc_template)
luci.http.prepare_content("text/plain")
- local check = lxc_get_config_path()
- if not check then
+ local path = lxc_get_config_path()
+ if not path then
return
end
ssl_status
}
}), src_err)
+
+ while (nx.fs.access(path .. lxc_name .. "/partial")) do
+ nx.nanosleep(1)
+ end
end
function lxc_action(lxc_action, lxc_name)
local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)')
if ret then
- if nixio.fs.access(ret) then
+ if nx.fs.access(ret) then
local min_space = tonumber(uci:get("lxc", "lxc", "min_space")) or 100000
local free_space = tonumber(util.exec("df " ..ret.. " | awk '{if(NR==2)print $4}'"))
if free_space and free_space >= min_space then
end
function lxc_get_arch_target()
- local target = fs.uname().machine
+ local target = nx.uname().machine
local target_map = {
armv5 = "armel",
armv6 = "armel",
-%>
<%-
-local fs = require "nixio"
-local target = fs.uname().machine
+local nx = require "nixio"
+local target = nx.uname().machine
-%>
<fieldset class="cbi-section">
<span id="lxc-list-output"></span>
</fieldset>
-<hr/>
+<hr />
<fieldset class="cbi-section">
<legend><%:Create New Container%></legend>
<div class="cbi-section-node">
<div class="th cbi-section-table-cell"><%:Template%></div>
<div class="th cbi-section-table-cell"><%:Actions%></div>
</div>
- <div class="tr cbi-section-table-row" id="div_holder">
+ <div class="tr cbi-section-table-row" id="div_create">
<div class="td"><input class="cbi-input-text" type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /></div>
<div class="td"><select id="s_template" class="cbi-input-select cbi-button"></select></div>
<div class="td">
- <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(div_holder)" class="cbi-button cbi-button-add" />
+ <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create()" class="cbi-button cbi-button-add" />
<span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
</div>
</div>
<span id="lxc-add-output"></span>
</fieldset>
-<hr/>
+<hr />
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
<script type="text/javascript">
//<![CDATA[
- window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }
- window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple" }
+ window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" };
+ window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple" };
var t_lxc_list = document.getElementById('t_lxc_list');
var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
- var output_list = document.getElementById("lxc-list-output")
- var output_add = document.getElementById("lxc-add-output")
- var loader_add = document.getElementById("lxc-add-loader")
+ var output_list = document.getElementById("lxc-list-output");
+ var output_add = document.getElementById("lxc-add-output");
+ var loader_add = document.getElementById("lxc-add-loader");
+ var div_create = document.getElementById("div_create");
+ var bt_create = div_create.querySelector("#bt_create");
- function lxc_create(div)
+ bt_create.disabled = true;
+ info_message(output_add, "Template download in progress, please be patient!");
+
+ function lxc_create()
{
- var lxc_name = div.querySelector("#tx_name").value.replace(/[\s!@#$%^&*()+=\[\]{};':"\\|,<>\/?]/g,'');
- var lxc_template = div.querySelector("#s_template").value;
- var bt_create = div.querySelector("#bt_create");
+ var lxc_name = div_create.querySelector("#tx_name").value.replace(/[\s!@#$%^&*()+=\[\]{};':"\\|,<>\/?]/g,'');
+ var lxc_template = div_create.querySelector("#s_template").value;
if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null)
{
var div3 = document.createElement("div");
div3.className = "td";
div3.style.width = "50%";
- div3.innerHTML = actions
+ div3.innerHTML = actions;
document.getElementById("t_lxc_list").appendChild(div0);
div0.appendChild(div1);
}
else if (action == "destroy")
{
- var div = self.parentNode.parentNode
- var img = div.querySelector('img')
+ var div = self.parentNode.parentNode;
+ var img = div.querySelector('img');
if (img.getAttribute('src') != window.img["red"])
{
}
else
{
- setTimeout(function() { elem.innerHTML = ''}, 1000);
+ setTimeout(function() { elem.innerHTML = ''}, 2000);
}
}
}
}
- lxc_list_update();
-
- info_message(output_add, "Template download in progress, please be patient!");
-
new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null,
function(x, data)
{
return set_no_template();
}
- bt_create.disabled = false;
var select = document.getElementById("s_template");
for(var key in data)
{
option.text = data[key].replace(/[_:]/g, ' ');
select.add(option, -1);
}
+
info_message(output_add, "");
+ bt_create.disabled = false;
})
+
+ lxc_list_update();
//]]>
</script>
msgstr "检查 IP 规则"
msgid "Check link quality"
-msgstr ""
+msgstr "检查连接数量"
msgid "Check routing table"
msgstr "检查路由表"
msgstr "目标端口"
msgid "Detail"
-msgstr ""
+msgstr "详细"
msgid "Diagnostics"
msgstr "诊断"
msgstr "输入十六进制值,以 <code>0x</code> 开头"
msgid "Execute"
-msgstr ""
+msgstr "执行"
msgid "Expect interface state on up event"
msgstr "在 up 事件发生时的预期接口状态"
msgstr "Hotplug ifup"
msgid "INFO: MWAN not running"
-msgstr ""
+msgstr "信息:MWAN 没有运行"
msgid "IPset"
msgstr "IPset"
msgstr "本地源接口"
msgid "MWAN - Globals"
-msgstr ""
+msgstr "MWAN - 全局"
msgid "MWAN - Interfaces"
-msgstr ""
+msgstr "MWAN - 接口"
msgid "MWAN - Members"
-msgstr ""
+msgstr "MWAN - 成员"
msgid "MWAN - Notification"
-msgstr ""
+msgstr "MWAN - 通知"
msgid "MWAN - Policies"
-msgstr ""
+msgstr "MWAN - 策略"
msgid "MWAN - Rules"
-msgstr ""
+msgstr "MWAN - 规则"
msgid "MWAN Interface Configuration - %s"
msgstr "MWAN 接口配置 - %s"
msgid "MWAN Interfaces"
-msgstr ""
+msgstr "MWAN 接口"
msgid "MWAN Member Configuration - %s"
msgstr "MWAN 成员配置 - %s"
msgstr "MWAN 规则配置 - %s"
msgid "MWAN Status - Detail"
-msgstr ""
+msgstr "MWAN Status - 详细"
msgid "MWAN Status - Diagnostics"
-msgstr ""
+msgstr "MWAN Status - 诊断"
msgid "MWAN Status - Troubleshooting"
-msgstr ""
+msgstr "MWAN Status - 故障排除"
msgid ""
"MWAN supports up to 252 physical and/or logical interfaces<br />MWAN "
"口不应该与成员、策略、规则中的任意一个设置项使用相同的名称"
msgid "Max packet latency [ms]"
-msgstr ""
+msgstr "最大数据包延迟 [ms]"
msgid "Max packet loss [%]"
-msgstr ""
+msgstr "最大数据包丢失率 [%]"
msgid ""
"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
msgstr "跃点数"
msgid "Min packet latency [ms]"
-msgstr ""
+msgstr "最小数据包延迟 [ms]"
msgid "Min packet loss [%]"
-msgstr ""
+msgstr "最小数据包丢失率 [%]"
msgid ""
"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
msgstr "没有找到 MWAN 接口"
msgid "Notification"
-msgstr ""
+msgstr "通知"
msgid "Offline"
msgstr "离线"
"“策略”把成员进行分组,告诉 MWAN 如何分配“规则”中使用这一策略的流量<br />拥有"
"较低跃点数的成员将会被优先使用。拥有相同跃点数的成员把流量进行负载均衡。<br /"
">进行负载均衡的成员之间拥有较高比重的成员将会被分配到更多流量。<br />名称允许"
-"包括A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内<br />策略不应该"
+"包括 A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内<br />策略不应该"
"与接口、成员、规则中的任意一个设置项使用相同的名称"
msgid "Policy"
"z, 0-9, _ and no spaces<br />Rules may not share the same name as configured "
"interfaces, members or policies"
msgstr ""
+"规则指定哪些流量将使用特定的 MWAN 策略<br />规则基于 IP 地址,端口或协议<br />"
+"规则从上到下匹配<br />匹配规则以下的规则被忽略<br />不符合任何规则的流量将使用主路由表进"
+"行路由<br />目的地为已知(非默认)网络的流量由主路由表处理<br />流量符合规则,但该策略的"
+"所有 WAN 接口关闭后都会被失效<br />名称可包含字符 A-Z,a-z,0-9,_和空格<br />"
+"规则不能与配置的接口、成员或策略共享相同的名称"
msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
msgstr "单位为秒。接受的值:1-1000000。留空则使用默认值 600 秒"
msgstr "支持 CIDR 记法(例如:\"192.168.100.0/24\")不含引号"
msgid "Task"
-msgstr ""
+msgstr "任务"
msgid "There are currently %d of %d supported interfaces configured"
msgstr "当前已配置 %d 个接口,最大支持 %d 个"
"Physical device name which interface went up or down (e.g. \"eth0\" or "
"\"wwan0\")<br /><br />"
msgstr ""
+"这里允许您修改“/etc/mwan3.user”的内容。<br />该文件在 sysupgrade 期间也会"
+"保留。<br /><br />注意:<br />该文件会作为 shell 脚本解释。<br />脚本的第"
+"一行必须是 "#!/bin/sh",不带引号。<br />以 # 开头的行是注释,不会执"
+"行。<br />将您的自定义 mwan3 动作放在这里,他们将<br />在启用 mwan3 的接口"
+"上<br />在 netifd hotplug 接口事件时执行。<br /><br />有三个主要的环境变量"
+"传递给这个脚本。<br /><br />$ACTION “ifup” 或 “ifdown”<br />$INTERFACE 启动"
+"或停止的接口名(例如 “wan” 或 “wwan”)<br />$DEVICE 启动或停止接口的物理设备"
+"名(例如 “eth0” 或 “wwan0”)<br /><br />"
msgid "Tracking hostname or IP address"
msgstr "跟踪的主机或 IP 地址"
msgstr "使用该接口的 IP 地址作为路由器本身发起的流量的源 IP 地址"
msgid "View the content of /etc/protocols for protocol description"
-msgstr ""
+msgstr "查看协议描述的 /etc/protocols 的内容"
msgid "WARNING: %d interfaces are configured exceeding the maximum of %d!"
msgstr "警告:已配置 %d 个接口,超过最大值 %d!"
msgid "WARNING: Interface %s are not found in /etc/config/network"
-msgstr ""
+msgstr "警告:接口 %s 在 /etc/config/network 中未找到"
msgid "WARNING: Interface %s has a duplicate metric %s configured"
-msgstr ""
+msgstr "警告:接口 %s 的 metric %s 配置重复"
msgid ""
"WARNING: Interface %s has a higher reliability requirement than tracking "
"hosts (%d)"
msgstr ""
+"警告:接口 %s 比跟踪主机具有更高的可靠性要求(%d)"
msgid "WARNING: Interface %s has no default route in the main routing table"
-msgstr ""
+msgstr "警告:接口 %s 在主路由表中没有默认的路由"
msgid "WARNING: Policy %s has exceeding the maximum name of 15 characters"
-msgstr ""
+msgstr "警告:策略 %s 名称超过 15 个字符"
msgid ""
"WARNING: Rule %s have a port configured with no or improper protocol "
"specified!"
msgstr ""
+"警告:规则 %s 有一个端口配置没有指定或协议不正确!"
msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "正在等待命令完成..."
msgid "Weight"
msgstr "比重"
}
function cbi_d_checkvalue(target, ref) {
- var t = document.getElementById(target);
- var value;
+ var value = null,
+ query = 'input[id="'+target+'"], input[name="'+target+'"], ' +
+ 'select[id="'+target+'"], select[name="'+target+'"]';
- if (!t) {
- var tl = document.getElementsByName(target);
-
- if( tl.length > 0 && (tl[0].type == 'radio' || tl[0].type == 'checkbox'))
- for( var i = 0; i < tl.length; i++ )
- if( tl[i].checked ) {
- value = tl[i].value;
- break;
- }
-
- value = value ? value : "";
- } else if (!t.value) {
- value = "";
- } else {
- value = t.value;
-
- if (t.type == "checkbox") {
- value = t.checked ? value : "";
- }
- }
+ document.querySelectorAll(query).forEach(function(i) {
+ if (value === null && ((i.type !== 'radio' && i.type !== 'checkbox') || i.checked === true))
+ value = i.value;
+ });
- return (value == ref)
+ return (((value !== null) ? value : "") == ref);
}
function cbi_d_check(deps) {
node.getAttribute('data-type'));
}
+ document.querySelectorAll('.cbi-dropdown').forEach(function(s) {
+ cbi_dropdown_init(s);
+ });
+
cbi_d_update();
}
return elem;
}
+
+if (typeof(window.CustomEvent) !== 'function') {
+ function CustomEvent(event, params) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
+ return evt;
+ }
+
+ CustomEvent.prototype = window.Event.prototype;
+ window.CustomEvent = CustomEvent;
+}
+
+CBIDropdown = {
+ openDropdown: function(sb) {
+ var st = window.getComputedStyle(sb, null),
+ ul = sb.querySelector('ul'),
+ li = ul.querySelectorAll('li'),
+ 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);
+
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+
+ ul.style.maxHeight = mh + 'px';
+ sb.setAttribute('open', '');
+
+ ul.scrollTop = sel ? Math.max(sel.offsetTop - sel.offsetHeight, 0) : 0;
+ ul.querySelectorAll('[selected] input[type="checkbox"]').forEach(function(c) {
+ c.checked = true;
+ });
+
+ ul.style.top = ul.style.bottom = '';
+ ul.style[((sb.getBoundingClientRect().top + eh) > window.innerHeight) ? 'bottom' : 'top'] = rect.height + 'px';
+ 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) {
+ l.setAttribute('tabindex', 0);
+ });
+
+ sb.lastElementChild.setAttribute('tabindex', 0);
+
+ this.setFocus(sb, sel || li[0], true);
+ },
+
+ closeDropdown: function(sb, no_focus) {
+ if (!sb.hasAttribute('open'))
+ return;
+
+ var pv = sb.querySelector('ul.preview'),
+ ul = sb.querySelector('ul.dropdown'),
+ li = ul.querySelectorAll('li');
+
+ li.forEach(function(l) { l.removeAttribute('tabindex'); });
+ sb.lastElementChild.removeAttribute('tabindex');
+
+ sb.removeChild(pv);
+ sb.removeAttribute('open');
+ sb.style.width = sb.style.height = '';
+
+ ul.classList.remove('dropdown');
+
+ if (!no_focus)
+ this.setFocus(sb, sb);
+
+ this.saveValues(sb, ul);
+ },
+
+ toggleItem: function(sb, li, force_state) {
+ if (li.hasAttribute('unselectable'))
+ return;
+
+ if (this.multi) {
+ var cbox = li.querySelector('input[type="checkbox"]'),
+ items = li.parentNode.querySelectorAll('li'),
+ label = sb.querySelector('ul.preview'),
+ sel = li.parentNode.querySelectorAll('[selected]').length,
+ more = sb.querySelector('.more'),
+ ndisplay = this.display_items,
+ n = 0;
+
+ if (li.hasAttribute('selected')) {
+ if (force_state !== true) {
+ if (sel > 1 || this.optional) {
+ li.removeAttribute('selected');
+ cbox.checked = cbox.disabled = false;
+ sel--;
+ }
+ else {
+ cbox.disabled = true;
+ }
+ }
+ }
+ else {
+ if (force_state !== false) {
+ li.setAttribute('selected', '');
+ cbox.checked = true;
+ cbox.disabled = false;
+ sel++;
+ }
+ }
+
+ while (label.firstElementChild)
+ label.removeChild(label.firstElementChild);
+
+ for (var i = 0; i < items.length; i++) {
+ items[i].removeAttribute('display');
+ if (items[i].hasAttribute('selected')) {
+ if (ndisplay-- > 0) {
+ items[i].setAttribute('display', n++);
+ label.appendChild(items[i].cloneNode(true));
+ }
+ var c = items[i].querySelector('input[type="checkbox"]');
+ if (c)
+ c.disabled = (sel == 1 && !this.optional);
+ }
+ }
+
+ if (ndisplay < 0)
+ sb.setAttribute('more', '');
+ else
+ sb.removeAttribute('more');
+
+ if (ndisplay === this.display_items)
+ sb.setAttribute('empty', '');
+ else
+ sb.removeAttribute('empty');
+
+ more.innerHTML = (ndisplay === this.display_items) ? this.placeholder : '···';
+ }
+ else {
+ var sel = li.parentNode.querySelector('[selected]');
+ if (sel) {
+ sel.removeAttribute('display');
+ sel.removeAttribute('selected');
+ }
+
+ li.setAttribute('display', 0);
+ li.setAttribute('selected', '');
+
+ this.closeDropdown(sb, true);
+ }
+
+ this.saveValues(sb, li.parentNode);
+ },
+
+ transformItem: function(sb, li) {
+ var cbox = E('form', {}, E('input', { type: 'checkbox', tabindex: -1, onclick: 'event.preventDefault()' })),
+ label = E('label');
+
+ while (li.firstChild)
+ label.appendChild(li.firstChild);
+
+ li.appendChild(cbox);
+ li.appendChild(label);
+ },
+
+ saveValues: function(sb, ul) {
+ var sel = ul.querySelectorAll('[selected]'),
+ div = sb.lastElementChild;
+
+ while (div.lastElementChild)
+ div.removeChild(div.lastElementChild);
+
+ sel.forEach(function (s) {
+ div.appendChild(E('input', {
+ type: 'hidden',
+ name: s.hasAttribute('name') ? s.getAttribute('name') : (sb.getAttribute('name') || ''),
+ value: s.hasAttribute('value') ? s.getAttribute('value') : s.innerText
+ }));
+ });
+
+ cbi_d_update();
+ },
+
+ setFocus: function(sb, elem, scroll) {
+ if (sb && sb.hasAttribute && sb.hasAttribute('locked-in'))
+ return;
+
+ document.querySelectorAll('.focus').forEach(function(e) {
+ if (e.nodeName.toLowerCase() !== 'input') {
+ e.classList.remove('focus');
+ e.blur();
+ }
+ });
+
+ if (elem) {
+ elem.focus();
+ elem.classList.add('focus');
+
+ if (scroll)
+ elem.parentNode.scrollTop = elem.offsetTop - elem.parentNode.offsetTop;
+ }
+ },
+
+ createItems: function(sb, value) {
+ var sbox = this,
+ val = (value || '').trim().split(/\s+/),
+ ul = sb.querySelector('ul');
+
+ if (!sbox.multi)
+ val.length = Math.min(val.length, 1);
+
+ val.forEach(function(item) {
+ var new_item = null;
+
+ ul.childNodes.forEach(function(li) {
+ if (li.getAttribute && li.getAttribute('value') === item)
+ new_item = li;
+ });
+
+ if (!new_item) {
+ var markup,
+ tpl = sb.querySelector(sbox.template);
+
+ if (tpl)
+ markup = (tpl.textContent || tpl.innerHTML || tpl.firstChild.data).replace(/^<!--|-->$/, '').trim();
+ else
+ markup = '<li value="{{value}}">{{value}}</li>';
+
+ new_item = E(markup.replace(/{{value}}/g, item));
+
+ if (sbox.multi) {
+ sbox.transformItem(sb, new_item);
+ }
+ else {
+ var old = ul.querySelector('li[created]');
+ if (old)
+ ul.removeChild(old);
+
+ new_item.setAttribute('created', '');
+ }
+
+ new_item = ul.insertBefore(new_item, ul.lastElementChild);
+ }
+
+ sbox.toggleItem(sb, new_item, true);
+ sbox.setFocus(sb, new_item, true);
+ });
+ },
+
+ closeAllDropdowns: function() {
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+ },
+
+ findParent: function(node, selector) {
+ while (node)
+ if (node.msMatchesSelector && node.msMatchesSelector(selector))
+ return node;
+ else if (node.matches && node.matches(selector))
+ return node;
+ else
+ node = node.parentNode;
+
+ return null;
+ }
+};
+
+function cbi_dropdown_init(sb) {
+ if (!(this instanceof cbi_dropdown_init))
+ return new cbi_dropdown_init(sb);
+
+ this.multi = sb.hasAttribute('multiple');
+ this.optional = sb.hasAttribute('optional');
+ this.placeholder = sb.getAttribute('placeholder') || '---';
+ this.display_items = parseInt(sb.getAttribute('display-items') || 3);
+ this.dropdown_items = parseInt(sb.getAttribute('dropdown-items') || 5);
+ this.create = sb.getAttribute('item-create') || '.create-item-input';
+ this.template = sb.getAttribute('item-template') || 'script[type="item-template"]';
+
+ var sbox = this,
+ ul = sb.querySelector('ul'),
+ items = ul.querySelectorAll('li'),
+ more = sb.appendChild(E('span', { class: 'more', tabindex: -1 }, '···')),
+ open = sb.appendChild(E('span', { class: 'open', tabindex: -1 }, '▾')),
+ canary = sb.appendChild(E('div')),
+ create = sb.querySelector(this.create),
+ ndisplay = this.display_items,
+ n = 0;
+
+ if (this.multi) {
+ for (var i = 0; i < items.length; i++) {
+ sbox.transformItem(sb, items[i]);
+
+ if (items[i].hasAttribute('selected') && ndisplay-- > 0)
+ items[i].setAttribute('display', n++);
+ }
+ }
+ else {
+ var sel = sb.querySelectorAll('[selected]');
+
+ sel.forEach(function(s) {
+ s.removeAttribute('selected');
+ });
+
+ var s = sel[0] || items[0];
+ if (s) {
+ s.setAttribute('selected', '');
+ s.setAttribute('display', n++);
+ }
+
+ ndisplay--;
+
+ if (this.optional && !ul.querySelector('li[value=""]')) {
+ var placeholder = E('li', { placeholder: '' }, this.placeholder);
+ ul.firstChild ? ul.insertBefore(placeholder, ul.firstChild) : ul.appendChild(placeholder);
+ }
+ }
+
+ sbox.saveValues(sb, ul);
+
+ ul.setAttribute('tabindex', -1);
+ sb.setAttribute('tabindex', 0);
+
+ if (ndisplay < 0)
+ sb.setAttribute('more', '')
+ else
+ sb.removeAttribute('more');
+
+ if (ndisplay === this.display_items)
+ sb.setAttribute('empty', '')
+ else
+ sb.removeAttribute('empty');
+
+ more.innerHTML = (ndisplay === this.display_items) ? this.placeholder : '···';
+
+
+ sb.addEventListener('click', function(ev) {
+ if (!this.hasAttribute('open')) {
+ if (ev.target.nodeName.toLowerCase() !== 'input')
+ sbox.openDropdown(this);
+ }
+ else {
+ var li = sbox.findParent(ev.target, 'li');
+ if (li && li.parentNode.classList.contains('dropdown'))
+ sbox.toggleItem(this, li);
+ }
+
+ ev.preventDefault();
+ ev.stopPropagation();
+ });
+
+ sb.addEventListener('keydown', function(ev) {
+ if (ev.target.nodeName.toLowerCase() === 'input')
+ return;
+
+ if (!this.hasAttribute('open')) {
+ switch (ev.keyCode) {
+ case 37:
+ case 38:
+ case 39:
+ case 40:
+ sbox.openDropdown(this);
+ ev.preventDefault();
+ }
+ }
+ else
+ {
+ var active = sbox.findParent(document.activeElement, 'li');
+
+ switch (ev.keyCode) {
+ case 27:
+ sbox.closeDropdown(this);
+ break;
+
+ case 13:
+ if (active) {
+ if (!active.hasAttribute('selected'))
+ sbox.toggleItem(this, active);
+ sbox.closeDropdown(this);
+ ev.preventDefault();
+ }
+ break;
+
+ case 32:
+ if (active) {
+ sbox.toggleItem(this, active);
+ ev.preventDefault();
+ }
+ break;
+
+ case 38:
+ if (active && active.previousElementSibling) {
+ sbox.setFocus(this, active.previousElementSibling);
+ ev.preventDefault();
+ }
+ break;
+
+ case 40:
+ if (active && active.nextElementSibling) {
+ sbox.setFocus(this, active.nextElementSibling);
+ ev.preventDefault();
+ }
+ break;
+ }
+ }
+ });
+
+ sb.addEventListener('cbi-dropdown-close', function(ev) {
+ sbox.closeDropdown(this, true);
+ });
+
+ if ('ontouchstart' in window) {
+ sb.addEventListener('touchstart', function(ev) { ev.stopPropagation(); });
+ window.addEventListener('touchstart', sbox.closeAllDropdowns);
+ }
+ else {
+ sb.addEventListener('mouseover', function(ev) {
+ if (!this.hasAttribute('open'))
+ return;
+
+ var li = sbox.findParent(ev.target, 'li');
+ if (li) {
+ if (li.parentNode.classList.contains('dropdown'))
+ sbox.setFocus(this, li);
+
+ ev.stopPropagation();
+ }
+ });
+
+ sb.addEventListener('focus', function(ev) {
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ if (s !== this || this.hasAttribute('open'))
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+ });
+
+ canary.addEventListener('focus', function(ev) {
+ sbox.closeDropdown(this.parentNode);
+ });
+
+ window.addEventListener('mouseover', sbox.setFocus);
+ window.addEventListener('click', sbox.closeAllDropdowns);
+ }
+
+ if (create) {
+ create.addEventListener('keydown', function(ev) {
+ switch (ev.keyCode) {
+ case 13:
+ sbox.createItems(sb, this.value);
+ ev.preventDefault();
+ this.value = '';
+ this.blur();
+ break;
+ }
+ });
+
+ create.addEventListener('focus', function(ev) {
+ var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]');
+ if (cbox) cbox.checked = true;
+ sb.setAttribute('locked-in', '');
+ });
+
+ create.addEventListener('blur', function(ev) {
+ var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]');
+ if (cbox) cbox.checked = false;
+ sb.removeAttribute('locked-in');
+ });
+
+ var li = sbox.findParent(create, 'li');
+
+ li.setAttribute('unselectable', '');
+ li.addEventListener('click', function(ev) {
+ this.querySelector(sbox.create).focus();
+ });
+ }
+}
+
+cbi_dropdown_init.prototype = CBIDropdown;
local stval = RESORT_PREFIX .. self.config .. "." .. self.sectiontype
local order = self.map:formvalue(stval)
if order and #order > 0 then
- local sid
- local num = 0
+ local sids, sid = { }, nil
for sid in util.imatch(order) do
- self.map.uci:reorder(self.config, sid, num)
- num = num + 1
+ sids[#sids+1] = sid
+ end
+ if #sids > 0 then
+ self.map.uci:reorder(self.config, sids)
+ self.changed = true
end
- self.changed = (num > 0)
end
end
self:add_error(section, "invalid", val_err)
end
+ if self.alias then
+ self.section.aliased = self.section.aliased or {}
+ self.section.aliased[section] = self.section.aliased[section] or {}
+ self.section.aliased[section][self.alias] = true
+ end
+
if fvalue and (self.forcewrite or not (fvalue == cvalue)) then
if self:write(section, fvalue) then
-- Push events
end
else -- Unset the UCI or error
if self.rmempty or self.optional then
- if self:remove(section) then
- -- Push events
- self.section.changed = true
- --luci.util.append(self.map.events, self.events)
+ if not self.alias or
+ not self.section.aliased or
+ not self.section.aliased[section] or
+ not self.section.aliased[section][self.alias]
+ then
+ if self:remove(section) then
+ -- Push events
+ self.section.changed = true
+ --luci.util.append(self.map.events, self.events)
+ end
end
elseif cvalue ~= fvalue and not novld then
-- trigger validator with nil value to get custom user error msg.
if self.tag_error[section] then
value = self:formvalue(section)
else
- value = self.map:get(section, self.option)
+ value = self.map:get(section, self.alias or self.option)
end
if not value then
-- Write to UCI
function AbstractValue.write(self, section, value)
- return self.map:set(section, self.option, value)
+ return self.map:set(section, self.alias or self.option, value)
end
-- Remove from UCI
function AbstractValue.remove(self, section)
- return self.map:del(section, self.option)
+ return self.map:del(section, self.alias or self.option)
end
end
+DropDown = class(MultiValue)
+
+function DropDown.__init__(self, ...)
+ ListValue.__init__(self, ...)
+ self.template = "cbi/dropdown"
+ self.delimiter = " "
+end
+
+
--[[
TextValue - A multi-line value
rows: Rows
elseif key == "REQUEST_URI" then
return build_url(unpack(ctx.requestpath))
elseif key == "FULL_REQUEST_URI" then
- local url = { http.getenv("SCRIPT_NAME") or "" , http.getenv("PATH_INFO") }
+ local url = { http.getenv("SCRIPT_NAME") or "", http.getenv("PATH_INFO") }
local query = http.getenv("QUERY_STRING")
if query and #query > 0 then
url[#url+1] = "?"
else
ok, err = util.copcall(target, unpack(args))
end
- assert(ok,
- "Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") ..
- " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" ..
- "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"))
+ if not ok then
+ error500("Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") ..
+ " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" ..
+ "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"))
+ end
else
local root = node()
if not root or not root.target then
local setmetatable, rawget, rawset = setmetatable, rawget, rawset
local require, getmetatable, assert = require, getmetatable, assert
-local error, pairs, ipairs = error, pairs, ipairs
+local error, pairs, ipairs, select = error, pairs, ipairs, select
local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack
-- The typical workflow for UCI is: Get a cursor instance from the
local _, change
for _, change in ipairs(changes) do
local operation, section, option, value = unpack(change)
- if option and value and operation ~= "add" then
+ if option and operation ~= "add" then
res[package][section] = res[package][section] or { }
if operation == "list-add" then
return self:section(config, stype)
end
-function set(self, config, section, option, value)
- if value == nil then
+function set(self, config, section, option, ...)
+ if select('#', ...) == 0 then
local sname, err = self:section(config, option, section)
return (not not sname), err
else
local _, err = call("set", {
config = config,
section = section,
- values = { [option] = value }
+ values = { [option] = select(1, ...) }
})
return (err == nil), ERRSTR[err]
end
-- Scope manipulation routines
--
+coxpt = setmetatable({}, { __mode = "kv" })
+
local tl_meta = {
__mode = "k",
return false
end
+-------------------------------------------------------------------------------
+-- Coroutine safe xpcall and pcall versions
--
--- Coroutine safe xpcall and pcall versions modified for Luci
--- original version:
--- coxpcall 1.13 - Copyright 2005 - Kepler Project (www.keplerproject.org)
+-- Encapsulates the protected calls with a coroutine based loop, so errors can
+-- be dealed without the usual Lua 5.x pcall/xpcall issues with coroutines
+-- yielding inside the call to pcall or xpcall.
--
--- Copyright © 2005 Kepler Project.
--- Permission is hereby granted, free of charge, to any person obtaining a
--- copy of this software and associated documentation files (the "Software"),
--- to deal in the Software without restriction, including without limitation
--- the rights to use, copy, modify, merge, publish, distribute, sublicense,
--- and/or sell copies of the Software, and to permit persons to whom the
--- Software is furnished to do so, subject to the following conditions:
+-- Authors: Roberto Ierusalimschy and Andre Carregal
+-- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fabio Mascarenhas
--
--- The above copyright notice and this permission notice shall be
--- included in all copies or substantial portions of the Software.
+-- Copyright 2005 - Kepler Project
--
--- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
--- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
--- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
--- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
--- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
--- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
--- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-local performResume, handleReturnValue
-local oldpcall, oldxpcall = pcall, xpcall
-coxpt = {}
-setmetatable(coxpt, {__mode = "kv"})
-
--- Identity function for copcall
-local function copcall_id(trace, ...)
- return ...
-end
-
--- values of either the function or the error handler
-function coxpcall(f, err, ...)
- local res, co = oldpcall(coroutine.create, f)
- if not res then
- local params = {...}
- local newf = function() return f(unpack(params)) end
- co = coroutine.create(newf)
- end
- local c = coroutine.running()
- coxpt[co] = coxpt[c] or c or 0
+-- $Id: coxpcall.lua,v 1.13 2008/05/19 19:20:02 mascarenhas Exp $
+-------------------------------------------------------------------------------
- return performResume(err, co, ...)
-end
-
--- values of the function or the error object
-function copcall(f, ...)
- return coxpcall(f, copcall_id, ...)
-end
+-------------------------------------------------------------------------------
+-- Implements xpcall with coroutines
+-------------------------------------------------------------------------------
+local coromap = setmetatable({}, { __mode = "k" })
--- Handle return value of protected call
-function handleReturnValue(err, co, status, ...)
+local function handleReturnValue(err, co, status, ...)
if not status then
return false, err(debug.traceback(co, (...)), ...)
end
-
- if coroutine.status(co) ~= 'suspended' then
+ if coroutine.status(co) == 'suspended' then
+ return performResume(err, co, coroutine.yield(...))
+ else
return true, ...
end
-
- return performResume(err, co, coroutine.yield(...))
end
--- Resume execution of protected function call
function performResume(err, co, ...)
return handleReturnValue(err, co, coroutine.resume(co, ...))
end
+
+local function id(trace, ...)
+ return trace
+end
+
+function coxpcall(f, err, ...)
+ local current = coroutine.running()
+ if not current then
+ if err == id then
+ return pcall(f, ...)
+ else
+ if select("#", ...) > 0 then
+ local oldf, params = f, { ... }
+ f = function() return oldf(unpack(params)) end
+ end
+ return xpcall(f, err)
+ end
+ else
+ local res, co = pcall(coroutine.create, f)
+ if not res then
+ local newf = function(...) return f(...) end
+ co = coroutine.create(newf)
+ end
+ coromap[co] = current
+ coxpt[co] = coxpt[current] or current or 0
+ return performResume(err, co, ...)
+ end
+end
+
+function copcall(f, ...)
+ return coxpcall(f, id, ...)
+end
<% export("cbi_apply_widget", function(redirect_ok) -%>
<style type="text/css">
- #cbi_apply_status {
+ .alert-message.notice {
+ background: linear-gradient(#fff 0%, #eee 100%);
+ }
+
+ #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;
- margin: 1.5em 0 1.5em 0;
}
- #cbi_apply_status > h4,
- #cbi_apply_status > p,
- #cbi_apply_status > div {
+ #cbi_apply_overlay .alert-message > h4,
+ #cbi_apply_overlay .alert-message > p,
+ #cbi_apply_overlay .alert-message > div {
flex-basis: 100%;
}
- #cbi_apply_status > img {
+ #cbi_apply_overlay .alert-message > img {
margin-right: 1em;
flex-basis: 32px;
}
- #cbi_apply_status + script + .cbi-section {
- margin-top: -1em;
+ body.apply-overlay-active {
+ overflow: hidden;
+ height: 100vh;
}
- .alert-message.notice {
- background: linear-gradient(#fff 0%, #eee 100%);
+ body.apply-overlay-active #cbi_apply_overlay {
+ display: block;
}
</style>
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.138.59467-72fe5dd"></script>
<script type="text/javascript">//<![CDATA[
var xhr = new XHR(),
- stat, indicator,
uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' },
uci_apply_rollback = <%=math.max(luci.config and luci.config.apply and luci.config.apply.rollback or 30, 30)%>,
uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>,
uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>,
uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>;
+ 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 (content)
+ message.innerHTML = content;
+
+ document.body.classList.add('apply-overlay-active');
+ }
+ else {
+ document.body.classList.remove('apply-overlay-active');
+ }
+ }
+
function uci_rollback(checked) {
if (checked) {
- stat.classList.remove('notice');
- stat.classList.add('warning');
- stat.innerHTML = '<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',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback));
var call = function(r) {
if (r.status === 204) {
- stat.innerHTML = '<h4><%:Configuration has been rolled back!%></h4>' +
+ 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, 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="this.parentNode.parentNode.style.display=\'none\'" value="<%:Dismiss%>" /> ' +
+ '<input type="button" class="btn" onclick="uci_status_message(false)" value="<%:Dismiss%>" /> ' +
'<input type="button" class="btn" onclick="uci_revert()" value="<%:Revert changes%>" /> ' +
'<input type="button" class="btn danger" onclick="uci_apply(false)" value="<%:Apply unchecked%>" />' +
- '</div>';
+ '</div>');
return;
}
call({ status: 0 });
}
else {
- stat.classList.remove('notice');
- stat.classList.add('warning');
- stat.innerHTML = '<h4><%:Device unreachable!%></h4>' +
- '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>';
+ uci_status_message('warning',
+ '<h4><%:Device unreachable!%></h4>' +
+ '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>');
}
}
var tt;
var ts = Date.now();
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
-
- indicator = document.querySelector('.uci_change_indicator');
+ uci_status_message('notice');
var call = function(r) {
if (Date.now() >= deadline) {
return;
}
else if (r && (r.status === 200 || r.status === 204)) {
- if (indicator)
- indicator.style.display = 'none';
+ var indicator = document.querySelector('.uci_change_indicator');
+ if (indicator) indicator.style.display = 'none';
- stat.innerHTML = '<%:Configuration has been applied.%>';
+ uci_status_message('notice', '<%:Configuration has been applied.%>');
window.clearTimeout(tt);
window.setTimeout(function() {
- stat.style.display = 'none';
- <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+ <% if redirect_ok then -%>
+ location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
+ <%- else -%>
+ window.location = window.location.href.split('#')[0];
+ <% end %>
}, uci_apply_display * 1000);
return;
var tick = function() {
var now = Date.now();
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0));
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0)));
if (now >= deadline)
return;
}
function uci_apply(checked) {
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Starting configuration apply…%>';
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Starting configuration apply…%>');
xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r) {
if (r.status === (checked ? 200 : 204)) {
uci_confirm(checked, Date.now() + uci_apply_rollback * 1000);
}
else if (checked && r.status === 204) {
- stat.innerHTML = '<%:There are no changes to apply.%>';
+ uci_status_message('notice', '<%:There are no changes to apply.%>');
window.setTimeout(function() {
- stat.style.display = 'none';
- <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+ <% if redirect_ok then -%>
+ location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
+ <%- else -%>
+ uci_status_message(false);
+ <%- end %>
}, uci_apply_display * 1000);
}
else {
- stat.classList.add('warning');
- stat.classList.remove('notice');
- stat.innerHTML = '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status);
+ uci_status_message('warning', '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status));
+ window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
}
function uci_revert() {
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Reverting configuration…%>';
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Reverting configuration…%>');
xhr.post('<%=url("admin/uci/revert")%>', uci_apply_auth, function(r) {
if (r.status === 200) {
- stat.innerHTML = '<%:Changes have been reverted.%>';
+ uci_status_message('notice', '<%:Changes have been reverted.%>');
window.setTimeout(function() {
<% if redirect_ok then -%>
location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
}, uci_apply_display * 1000);
}
else {
- stat.classList.add('warning');
- stat.classList.remove('notice');
- stat.innerHTML = '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status);
+ uci_status_message('warning', '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status));
+ window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
}
--- /dev/null
+<%+cbi/valueheader%>
+
+<%-
+ local selected = { }
+
+ if self.multiple then
+ local val
+ for val in luci.util.imatch(self:cfgvalue(section)) do
+ selected[val] = true
+ end
+ else
+ selected[self:cfgvalue(section)] = true
+ end
+
+ if not next(selected) and self.default then
+ selected[self.default] = true
+ end
+-%>
+
+<div class="cbi-dropdown"<%=
+ attr("name", cbid) ..
+ attr("display-items", self.display or self.size or 3) ..
+ attr("dropdown-items", self.dropdown or self.display or self.size or 5) ..
+ attr("placeholder", self.placeholder or translate("-- please select --")) ..
+ ifattr(self.multiple, "multiple", "multiple") ..
+ ifattr(self.optional or self.rmempty, "optional", "optional")
+%>>
+ <ul>
+ <% local i, key; for i, key in pairs(self.keylist) do %>
+ <li<%=
+ attr("data-index", i) ..
+ attr("data-depends", self:deplist2json(section, self.deplist[i])) ..
+ attr("value", key) ..
+ ifattr(selected[key], "selected", "selected")
+ %>>
+ <%=pcdata(self.vallist[i])%>
+ </li>
+ <% end %>
+ </ul>
+</div>
+
+<%+cbi/valuefooter%>
end
-%>
-<span>
- <ul style="margin:0; list-style-type:none; text-align:left">
+<div class="cbi-dropdown" dropdown-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.rmempty or self.optional, "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <span class="zonebadge" style="background:repeating-linear-gradient(45deg,rgba(204,204,204,0.5),rgba(204,204,204,0.5) 5px,rgba(255,255,255,0.5) 5px,rgba(255,255,255,0.5) 10px)">
+ <strong>{{value}}:</strong><em>(<%:create%>)</em>
+ </span>
+ </li>
+ --></script>
+ <ul>
<% if self.allowlocal then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_empty") .. attr("name", cbid) .. attr("value", "") .. ifattr(checked[""], "checked", "checked")%> />  
- <label<%=attr("for", cbid .. "_empty")%>></label>
- <label<%=attr("for", cbid .. "_empty")%> style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
+ <li value=""<%=ifattr(checked[""], "selected", "selected")%>>
+ <span style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
<strong><%:Device%></strong>
- <% if self.allowany and self.allowlocal then %>(<%:input%>)<% end %>
- </label>
+ <% if self.allowany and self.allowlocal then -%>
+ (<%= self.alias ~= "dest"
+ and translate("output") or translate("input") %>)
+ <%- end %>
+ </span>
+ </li>
+ <% elseif self.widget ~= "checkbox" and (self.rmempty or self.optional) then %>
+ <li value=""<%=ifattr(checked[""], "selected", "selected")%>>
+ <span class="zonebadge">
+ <em><%:unspecified%></em>
+ </span>
</li>
<% end %>
<% if self.allowany then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_any") .. attr("name", cbid) .. attr("value", "*") .. ifattr(checked["*"], "checked", "checked")%> />  
- <label<%=attr("for", cbid .. "_any")%>></label>
- <label<%=attr("for", cbid .. "_any")%> style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
+ <li value="*"<%=ifattr(checked["*"], "selected", "selected")%>>
+ <span style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
<strong><%:Any zone%></strong>
<% if self.allowany and self.allowlocal then %>(<%:forward%>)<% end %>
- </label>
+ </span>
</li>
<% end %>
<%
if zone:name() ~= self.exclude then
selected = selected or (value == zone:name())
%>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "." .. zone:name()) .. attr("name", cbid) .. attr("value", zone:name()) .. ifattr(checked[zone:name()], "checked", "checked")%> />  
- <label<%=attr("for", cbid .. "." .. zone:name())%>></label>
- <label<%=attr("for", cbid .. "." .. zone:name())%> style="background-color:<%=zone:get_color()%>" class="zonebadge">
+ <li<%=attr("value", zone:name()) .. ifattr(checked[zone:name()], "selected", "selected")%>>
+ <span style="background-color:<%=zone:get_color()%>" class="zonebadge">
<strong><%=zone:name()%>:</strong>
- <%
+ <%-
local zempty = true
for _, net in ipairs(zone:get_networks()) do
net = nwm:get_network(net)
if net then
zempty = false
- %>
+ -%>
<span class="ifacebadge<% if net:name() == self.network then %> ifacebadge-active<% end %>"><%=net:name()%>:
- <%
+ <%-
local nempty = true
for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do
nempty = false
%>
- <img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
+ <img<%=attr("title", iface:get_i18n())%> src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
<% end %>
- <% if nempty then %><em><%:(empty)%></em><% end %>
+ <% if nempty then %><em><%:(empty)%></em><% end -%>
</span>
- <% end end %>
- <% if zempty then %><em><%:(empty)%></em><% end %>
- </label>
+ <%- end end -%>
+ <%- if zempty then %><em><%:(empty)%></em><% end -%>
+ </span>
</li>
<% end end %>
<% if self.widget ~= "checkbox" and not self.nocreate then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change" type="radio"<%=attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not selected, "checked", "checked")%> />  
- <label<%=attr("for", cbid .. "_new")%>></label>
- <div onclick="document.getElementById('<%=cbid%>_new').checked=true" class="zonebadge" style="background-color:<%=fwm.zone.get_color()%>">
- <em><%:unspecified -or- create:%> </em>
- <input type="text"<%=attr("name", cbid .. ".newzone") .. ifattr(not selected, "value", luci.http.formvalue(cbid .. ".newzone") or self.default)%> onfocus="document.getElementById('<%=cbid%>_new').checked=true" />
- </div>
+ <li value="-">
+ <span class="zonebadge">
+ <em><%:create%>:</em>
+ <input type="password" style="display:none" />
+ <input class="create-item-input" type="text" />
+ </span>
</li>
<% end %>
</ul>
-</span>
+</div>
<%+cbi/valuefooter%>
<%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%>
- <div class="errorbox"><%=pcdata(msg)%></div>
+ <div class="alert-message warning"><%=pcdata(msg)%></div>
<%- end end -%>
<div class="cbi-map" id="cbi-<%=self.config%>">
if value then
for value in utl.imatch(value) do
- checked[value] = true
+ for value in utl.imatch(value) do
+ checked[value] = true
+ end
end
else
local n = self.network and net:get_network(self.network)
-%>
<input type="hidden" name="<%=cbeid%>" value="1" />
-<ul style="margin:0; list-style-type:none">
- <% for _, iface in ipairs(ifaces) do
- local link = iface:adminlink()
- if (not self.nobridges or not iface:is_bridge()) and
- (not self.noinactive or iface:is_up()) and
- iface:name() ~= self.exclude
- then %>
- <li>
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "." .. iface:name()) ..
- attr("name", cbid) .. attr("value", iface:name()) ..
- ifattr(checked[iface:name()], "checked", "checked")
- %> />
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "." .. iface:name())%>></label>
- <%- end -%>
-  
- <label<%=attr("for", cbid .. "." .. iface:name())%>>
- <% if link then -%><a href="<%=link%>"><% end -%>
- <img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
- <% if link then -%></a><% end -%>
- <%=pcdata(iface:get_i18n())%>
- <% local ns = iface:get_networks(); if #ns > 0 then %>(
- <%- local i, n; for i, n in ipairs(ns) do -%>
- <%-= (i>1) and ', ' -%>
- <a href="<%=n:adminlink()%>"><%=n:name()%></a>
- <%- end -%>
- )<% end %>
- </label>
- </li>
- <% end end %>
- <% if not self.nocreate then %>
- <li>
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "_custom") ..
- attr("name", cbid) ..
- attr("value", " ")
- %> />
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "_custom")%>></label>
- <%- end -%>
-  
- <label<%=attr("for", cbid .. "_custom")%>>
- <img title="<%:Custom Interface%>" style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/ethernet_disabled.png" />
- <%:Custom Interface%>:
- </label>
- <input type="text" style="width:50px" onfocus="document.getElementById('<%=cbid%>_custom').checked=true" onblur="var x=document.getElementById('<%=cbid%>_custom'); x.value=this.value; x.checked=true" />
- </li>
- <% end %>
-</ul>
+
+<div class="cbi-dropdown" display-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.widget == "checkbox", "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <img title="<%:Custom Interface%>: "{{value}}"" src="<%=resource%>/icons/ethernet_disabled.png" />
+ <span class="hide-open">{{value}}</span>
+ <span class="hide-close"><%:Custom Interface%>: "{{value}}"</span>
+ </li>
+ --></script>
+ <ul>
+ <% for _, iface in ipairs(ifaces) do
+ if (not self.nobridges or not iface:is_bridge()) and
+ (not self.noinactive or iface:is_up()) and
+ iface:name() ~= self.exclude
+ then %>
+ <li<%=
+ attr("value", iface:name()) ..
+ ifattr(checked[iface:name()], "selected", "selected")
+ %>>
+ <img<%=attr("title", iface:get_i18n())%> src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
+ <span class="hide-open"><%=pcdata(iface:name())%></span>
+ <span class="hide-close">
+ <%=pcdata(iface:get_i18n())%>
+ <% local ns = iface:get_networks(); if #ns > 0 then %>(
+ <%- local i, n; for i, n in ipairs(ns) do -%>
+ <%-= (i>1) and ', ' -%>
+ <a href="<%=n:adminlink()%>"><%=n:name()%></a>
+ <%- end -%>
+ )<% end %>
+ </span>
+ </li>
+ <% end end %>
+ <% if not self.nocreate then %>
+ <li value="">
+ <img title="<%:Custom Interface%>" src="<%=resource%>/icons/ethernet_disabled.png" />
+ <span><%:Custom Interface%>:</span>
+ <input type="password" style="display:none" />
+ <input class="create-item-input" type="text" />
+ </li>
+ <% end %>
+ </ul>
+</div>
<%+cbi/valuefooter%>
end
-%>
-<ul style="margin:0; list-style-type:none; text-align:left">
- <% for _, net in ipairs(networks) do
- if (net:name() ~= "loopback") and
- (net:name() ~= self.exclude) and
- (not self.novirtual or not net:is_virtual())
- then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "." .. net:name()) ..
- attr("name", cbid) .. attr("value", net:name()) ..
- ifattr(checked[net:name()], "checked", "checked")
- %> />  
- <label<%=attr("for", cbid .. "." .. net:name())%>>
+<div class="cbi-dropdown" display-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.widget == "checkbox", "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <span class="ifacebadge" style="background:repeating-linear-gradient(45deg,rgba(204,204,204,0.5),rgba(204,204,204,0.5) 5px,rgba(255,255,255,0.5) 5px,rgba(255,255,255,0.5) 10px)">
+ {{value}}: <em>(<%:create%>)</em>
+ </span>
+ </li>
+ --></script>
+ <ul>
+ <% if self.widget ~= "checkbox" then %>
+ <li value=""<%= ifattr(not value, "selected", "selected") %>>
+ <em><%:unspecified%></em>
+ </li>
+ <% end %>
+
+ <% for _, net in ipairs(networks) do
+ if (net:name() ~= "loopback") and
+ (net:name() ~= self.exclude) and
+ (not self.novirtual or not net:is_virtual())
+ then %>
+ <li<%= attr("value", net:name()) .. ifattr(checked[net:name()], "selected", "selected") %>>
<span class="ifacebadge"><%=net:name()%>:
<%
local empty = true
for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do
if not iface:is_bridge() then
empty = false
- %>
+ -%>
<img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
- <% end end %>
- <% if empty then %><em><%:(no interfaces attached)%></em><% end %>
+ <%- end end %>
+ <% if empty then %>
+ <em class="hide-close"><%:(no interfaces attached)%></em>
+ <em class="hide-open">-</em>
+ <% end %>
</span>
- </label>
- </li>
- <% end end %>
+ </li>
+ <% end end %>
- <% if not self.nocreate then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not value and self.widget ~= "checkbox", "checked", "checked")%> />  
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "_new")%>></label>
- <%- end -%>
- <div style="padding:0.5em; display:inline">
- <label<%=attr("for", cbid .. "_new")%>><em>
+ <% if not self.nocreate then %>
+ <li value="-"<%= ifattr(not value and self.widget ~= "checkbox", "selected", "selected") %>>
+ <em>
<%- if self.widget == "checkbox" then -%>
<%:create:%>
<%- else -%>
<%:unspecified -or- create:%>
- <%- end -%> </em></label>
+ <%- end -%>
+ </em>
<input style="display:none" type="password" />
- <input style="width:6em" type="text"<%=attr("name", cbid .. ".newnet")%> onfocus="document.getElementById('<%=cbid%>_new').checked=true" />
- </div>
- </li>
- <% elseif self.widget ~= "checkbox" and self.unspecified then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "_uns") ..
- attr("name", cbid) ..
- attr("value", "") ..
- ifattr(not value or #value == 0, "checked", "checked")
- %> />  
- <div style="padding:0.5em; display:inline">
- <label<%=attr("for", cbid .. "_uns")%>><em><%:unspecified%></em></label>
- </div>
- </li>
- <% end %>
-</ul>
+ <input class="create-item-input" type="text" />
+ </li>
+ <% end %>
+ </ul>
+</div>
<%+cbi/valuefooter%>
<form method="post" action="<%=pcdata(FULL_REQUEST_URI)%>">
<%- if fuser then %>
- <div class="errorbox"><%:Invalid username and/or password! Please try again.%></div>
+ <div class="alert-message warning">
+ <p><%:Invalid username and/or password! Please try again.%></p>
+ </div>
<% end -%>
<div class="cbi-map">
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Càrrega d'1 minut:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Estacions associades"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "Tallafocs IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estat WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adreça IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estat WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adreça IPv6"
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr "pontejat"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crea:"
msgid "open"
msgstr "obert"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Enrere"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estat WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estat WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplica"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Zatížení za 1 minutu:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Připojení klienti"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 firewall"
-msgid "IPv4 WAN Status"
-msgstr "Stav IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 adresa"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Stav IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 adresa"
"Host Configuration Protocol\">DHCP</abbr> Serveru"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Opravdu odstranit toto rozhraní? Odstranění nelze vrátit zpět!\n"
"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím "
"tohoto rozhraní."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Opravdu odstranit bezdrátovou síť? Odstranění nelze vrátit zpět!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Opravdu vypnout síť ?\n"
"tohoto rozhraní."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Opravdu vypnout rozhraní \"%s\" ?\n"
msgid "bridged"
msgstr "přemostěný"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Zpět"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Stav IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Stav IPv6 WAN"
+
#~ msgid "Apply"
#~ msgstr "Použít"
msgid "-- match by uuid --"
msgstr "-- UUID vergleichen --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Systemlast (1 Minute):"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Assoziierte Clients"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Berechtigungsgruppe"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Weitere Informationen zu WireGuard-Schnittstellen und Peers unter <a href="
-"\"http://wireguard.io\">wireguard.io</a>."
+"\"http://wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 Firewall"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN Status"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 Adresse"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-Präfix"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN Status"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 Adresse"
msgstr "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Diese Schnittstelle wirklich löschen? Der Schritt kann nicht rückgängig "
"gemacht werden!\n"
"Schnittstelle verbunden sind."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Dieses Drahtlosnetzwerk wirklich löschen? Der Schritt kann nicht rückgängig "
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Das Netzwerk wirklich herunterfahren?\n"
"Schnittstelle verbunden sind."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Die Schnitstelle \"%s\" wirklich herunterfahren?\n"
msgid "bridged"
msgstr "bridged"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "erstelle:"
msgid "open"
msgstr "offen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "Overlay"
msgid "« Back"
msgstr "« Zurück"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN Status"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN Status"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Φορτίο 1 λεπτού:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Συνδεδεμένοι Σταθμοί"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 Τείχος Προστασίας"
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Κατάσταση IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Διεύθυνση IPv6"
"εξυπηρετητή <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr "Αρχικοποίηση όλων των αλλαγών;"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Πίσω"
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Κατάσταση IPv6 WAN"
+
#~ msgid "Apply"
#~ msgstr "Εφαρμογή"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 Minute Load:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Associated Stations"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga a 1 minuto:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Estaciones asociadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "Cortafuegos IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado de la WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Dirección IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estado de la WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Dirección IPv6"
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"¿Está seguro de borrar esta interfaz?. ¡No será posible deshacer el "
"borrado!\n"
"interfaz."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"¿Está seguro de borrar esta red inalámbrica?. ¡No será posible deshacer el "
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"¿Está seguro de querer apagar esta red?.\n"
"Puede perder el acceso a este dispositivo si está conectado por esta red."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"¿Está seguro de apagar la interfaz \"%s\"?.\n"
msgid "bridged"
msgstr "puenteado"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crear:"
msgid "open"
msgstr "abierto"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Volver"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado de la WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado de la WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplicar"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Charge sur 1 minute :"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Équipements associés"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "Pare-feu IPv4"
-msgid "IPv4 WAN Status"
-msgstr "État IPv4 du WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adresse IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "État IPv6 du WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adresse IPv6"
msgstr "Lire /etc/ethers pour configurer le serveur DHCP"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Voulez-vous vraiment supprimer cette interface? L'effacement ne peut être "
"annulé!\n"
"cette interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Voulez-vous vraiment supprimer ce réseau sans-fil? L'effacement ne peut être "
msgstr "Voulez-vous vraiment ré-initialiser toutes les modifications ?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Voulez-vous vraiment arrêter l'interface %s ?\n"
"cette interface."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Voulez-vous vraiment arrêter l'interface %s ?\n"
msgid "bridged"
msgstr "ponté"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "créer:"
msgid "open"
msgstr "ouvrir"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Retour"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "État IPv4 du WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "État IPv6 du WAN"
+
#~ msgid "Apply"
#~ msgstr "Appliquer"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "עומס במשך דקה:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "תחנות קשורות"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"האם למחוק את הרשת האלחוטית הזו? המחיקה אינה ניתנת לביטול!\n"
"ייתכן ותאבד גישה לנתב הזה אם אתה מחובר דרך השרת הזו."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Terhelés (utolsó 1 perc):"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Kapcsolódó kliensek"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 tűzfal"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN állapot"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 cím"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN állapot"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 cím"
"Configuration Protocol\">DHCP</abbr> kiszolgáló beállításához"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Biztosan törli az interfészt? A törlés nem visszavonható!\n"
" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az "
"interfészen keresztül kapcsolódik."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Biztosan törli ezt a vezetéknélküli hálózatot? A törlés nem visszavonható!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Biztos, hogy leállítja a hálózatot?!\n"
"hálózaton keresztül kapcsolódik."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Biztos, hogy leállítja a \"%s\" interfészt?\n"
msgid "bridged"
msgstr "áthidalt"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "új:"
msgid "open"
msgstr "nyitás"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Vissza"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN állapot"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN állapot"
+
#~ msgid "Apply"
#~ msgstr "Alkalmaz"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carico in 1 minuto:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Dispositivi Wi-Fi connessi"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 Firewall"
-msgid "IPv4 WAN Status"
-msgstr "Stato WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Indirizzi IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Stato WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Indirizzi IPv6"
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
+"Vuoi davvero rimuovere questa interfaccia? La rimozione non può essere ripristinata! "
+"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
+"Vuoi davvero rimuovere questa interfaccia wireless? La rimozione non può essere ripristinata! "
+"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete."
msgid "Really reset all changes?"
msgstr "Azzerare veramente tutte le modifiche?"
-#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
-"Vuoi davvero spegnere questa interfaccia?\\nPotresti perdere "
-"l'accesso a questo router se sei connesso usando questa interfaccia."
+"Vuoi davvero spegnere questa interfaccia? Potresti perdere l'accesso a "
+"questo router se sei connesso usando questa interfaccia."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere "
-"l'accesso a questo router se stai usando questa interfaccia."
+"Vuoi davvero spegnere questa interfaccia \"%s\"? Potresti perdere l'accesso "
+"a questo router se stai usando questa interfaccia."
msgid "Really switch protocol?"
msgstr "Cambiare veramente il protocollo?"
msgid "bridged"
msgstr "ponte"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crea:"
msgid "open"
msgstr "apri"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Indietro"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Stato WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Stato WAN IPv6"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2018-05-21 00:47+0900\n"
+"PO-Revision-Date: 2018-06-01 02:42+0900\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
msgid "-- match by uuid --"
msgstr "-- UUID を指定 --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "過去1分の負荷:"
msgid "Apply unchecked"
msgstr "チェックなしの適用"
+msgid "Architecture"
+msgstr "アーキテクチャ"
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "認証済み端末"
+msgid "Associations"
+msgstr "アソシエーション数"
+
msgid "Auth Group"
msgstr "認証グループ"
msgstr "変更が適用されました。"
msgid "Changes have been reverted."
-msgstr ""
+msgstr "変更は取り消されました。"
msgid "Changes the administrator password for accessing the device"
msgstr "デバイスの管理者パスワードを変更します"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"WireGuard インターフェースとピアについての詳細情報: <a href=\"http://"
-"wireguard.io\">wireguard.io</a>"
+"wireguard.com\">wireguard.com</a>"
msgid "GHz"
msgstr "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 ファイアウォール"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN ステータス"
+msgid "IPv4 Upstream"
+msgstr "IPv4 アップストリーム"
msgid "IPv4 address"
msgstr "IPv4 アドレス"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-プレフィクス"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN ステータス"
+msgid "IPv6 Upstream"
+msgstr "IPv6 アップストリーム"
msgid "IPv6 address"
msgstr "IPv6 アドレス"
"として<code>/etc/ethers</code> をロードします"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"本当にこのインターフェースを削除しますか?一度削除すると、元に戻すことはできま"
"せん!\n"
"る場合があります。"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"本当にこの無線ネットワークを削除しますか?一度削除すると、元に戻すことはできま"
msgstr "本当に全ての変更をリセットしますか?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"本当にネットワークを停止しますか?\n"
"合があります。"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"本当にインターフェース \"%s\" を停止しますか?\n"
msgid "bridged"
msgstr "ブリッジ"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "作成:"
msgid "open"
msgstr "オープン"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "オーバーレイ"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 분 부하:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "연결된 station 들"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 방화벽"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN 상태"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 주소"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN 상태"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr ""
"Configuration Protocol\">DHCP</abbr>-서버를 설정합니다"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"정말로 네트워크를 shutdown 하시겠습니까?\\n이 인터페이스를 통해 연결하였다면 "
"접속이 끊어질 수 있습니다."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr ""
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN 상태"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN 상태"
+
#~ msgid "Apply"
#~ msgstr "적용"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Associated Stesen"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
msgstr "Baca /etc/ethers untuk mengkonfigurasikan DHCP-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 minutts belastning:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Tilkoblede Klienter"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 Brannmur"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN Status"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 adresse"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN Status"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 adresse"
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Fjerne dette grensesnittet? Slettingen kan ikke omgjøres!\n"
"Du kan miste kontakten med ruteren om du er tilkoblet via dette "
"grensesnittet."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Fjerne dette trådløse nettverket? Slettingen kan ikke omgjøres!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Slå av dette nettverket ?\n"
"grensesnittet."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Slå av dette grensesnittet \"%s\" ?\n"
msgid "bridged"
msgstr "brokoblet"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "opprett:"
msgid "open"
msgstr "åpen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Tilbake"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN Status"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN Status"
+
#~ msgid "Apply"
#~ msgstr "Bruk"
"Project-Id-Version: LuCI\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-20 09:40+0200\n"
-"PO-Revision-Date: 2018-05-14 20:05+0200\n"
+"PO-Revision-Date: 2018-06-10 10:05+0200\n"
"Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n"
"Language-Team: Polish\n"
"Language: pl\n"
msgid "-- match by uuid --"
msgstr "-- dopasuj po uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Obciążenie 1 min.:"
msgstr ""
msgid "Announce as default router even if no public prefix is available."
-msgstr ""
+msgstr "Rozgłaszaj jako domyślny router nawet jeśli publiczny prefiks nie jest dostępny."
msgid "Announced DNS domains"
-msgstr ""
+msgstr "Rozgłaszaj domeny DNS"
msgid "Announced DNS servers"
-msgstr ""
+msgstr "Rozgłaszaj serwery DNS"
msgid "Anonymous Identity"
msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr "Architektura"
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
+"Przypisz część danej długości każdego publicznego prefiksu IPv6 do tego interfejsu"
msgid "Assign interfaces..."
msgstr "Przypisz interfejsy..."
msgid ""
"Assign prefix parts using this hexadecimal subprefix ID for this interface."
msgstr ""
+"Przypisz cześć prefiksu za pomocą szesnastkowego ID subprefiksu dla tego interfejsu"
msgid "Associated Stations"
msgstr "Połączone stacje"
+msgid "Associations"
+msgstr "Połączeni"
+
msgid "Auth Group"
msgstr ""
msgstr ""
msgid "Bind only to specific interfaces rather than wildcard address."
-msgstr ""
+msgstr "Powiąż tylko ze specyficznymi interfejsami, a nie z adresami wieloznacznymi."
msgid "Bind the tunnel to this interface (optional)."
msgstr ""
msgstr "Pliki konfiguracyjne zostaną zachowane."
msgid "Configuration has been applied."
-msgstr ""
+msgstr "Konfiguracja została zastosowana."
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "Konfiguracja została wycofana!"
msgid "Confirmation"
msgstr "Potwierdzenie"
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
+"Własne pliki (certyfikaty, skrypty) mogą pozostać w systemie. Aby zapobiec "
+"temu, wykonaj najpierw reset do ustawień fabrycznych"
msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
msgstr "Klient DHCPv6"
msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "Tryb DHCPv6"
msgid "DHCPv6-Service"
-msgstr ""
+msgstr "Serwis DHCPv6"
msgid "DNS"
msgstr "DNS"
msgstr ""
msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "Sprawdzanie DNSSEC bez podpisu"
msgid "DPD Idle Timeout"
msgstr ""
msgstr "Brama domyślna"
msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "Domyślnie jest to stateless + stateful"
msgid "Default state"
msgstr "Stan domyślny"
msgstr ""
msgid "External system log server"
-msgstr "Zewnętrzny serwer dla logów systemowych"
+msgstr "Serwer zewnętrzny dla logów systemowych"
msgid "External system log server port"
-msgstr "Port zewnętrznego serwera dla logów systemowych"
+msgstr "Port zewnętrznego serwera logów systemowych"
msgid "External system log server protocol"
-msgstr "Protokół zewnętrznego serwera dla logów systemowych"
+msgstr "Protokół zewnętrznego serwera logów systemowych"
msgid "Extra SSH command options"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgstr ""
msgid "Global network options"
-msgstr ""
+msgstr "Globalne opcje sieciowe"
msgid "Go to password configuration..."
msgstr "Przejdź do konfiguracji hasła..."
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Status IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr "Protokół IPv4"
msgid "IPv4 address"
msgstr "Adres IPv4"
msgstr ""
msgid "IPv6 Settings"
-msgstr ""
+msgstr "Ustawienia IPv6"
msgid "IPv6 ULA-Prefix"
-msgstr ""
+msgstr "IPv6 Prefiks-ULA"
-msgid "IPv6 WAN Status"
-msgstr "Status WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr "Protokół IPv6"
msgid "IPv6 address"
msgstr "Adres IPv6"
msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "Wskazówka przypisania IPv6"
msgid "IPv6 assignment length"
-msgstr ""
+msgstr "Długość przydziału IPv6"
msgid "IPv6 gateway"
msgstr "Brama IPv6"
msgstr ""
msgid "IPv6 suffix"
-msgstr ""
+msgstr "Sufiks IPv6"
msgid "IPv6-Address"
msgstr "Adres IPv6"
msgstr "Limit"
msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
-msgstr ""
+msgstr "Ogranicz usługi DNS do podsieci interfejsów, na których obsługujemy DNS."
msgid "Limit listening to these interfaces, and loopback."
msgstr "Ogranicz nasłuchiwanie do tych interfesjów, oraz loopbacku."
msgstr "Lokalny adres IPv6"
msgid "Local Service Only"
-msgstr ""
+msgstr "Tylko serwis lokalny"
msgid "Local Startup"
msgstr "Lokalny autostart"
msgid "Local domain suffix appended to DHCP names and hosts file entries"
msgstr ""
-"Przyrostek (suffiks) domeny przyłączany do nazw DHCP i wpisów w pliku hosts"
+"Przyrostek (sufiks) domeny przyłączany do nazw DHCP i wpisów w pliku hosts"
msgid "Local server"
msgstr "Serwer lokalny"
msgstr "NCM"
msgid "NDP-Proxy"
-msgstr ""
+msgstr "Proxy NDP"
msgid "NT Domain"
msgstr ""
msgstr ""
msgid "Non-wildcard"
-msgstr ""
+msgstr "Bez symboli wieloznacznych"
msgid "None"
msgstr "Brak"
msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
-msgstr ""
+msgstr "Liczba buforowanych wpisów DNS (max wynosi 10000, 0 oznacza "
+"brak pamięci podręcznej)"
msgid "OK"
msgstr "OK"
"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
"for the interface."
msgstr ""
+"Opcjonalne. Dopuszczalne wartości: 'eui64', 'random', stałe wartości takie jak "
+"'::1' lub '::1:2'. Kiedy prefiks IPv6 (taki jak 'a:b:c:d::') jest odbierany z serwera "
+"delegującego, użyj sufiksa (takiego jak '::1') aby utworzyć adres IPv6 ('a:b:c:d::1') "
+"dla tego interfejsu."
msgid ""
"Optional. Base64-encoded preshared key. Adds in an additional layer of "
msgstr ""
msgid "QMI Cellular"
-msgstr ""
+msgstr "Komórkowy QMI"
msgid "Quality"
msgstr "Jakość"
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Naprawdę usunąć ten interfejs? Usunięcie nie może zostać cofnięte!\n"
"Możesz stracić dostęp do tego urządzenia, jeśli jesteś połączony przez ten "
"interfejs!"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Naprawdę usunąć tę sieć bezprzewodową? Usunięcie nie może zostać cofnięte!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Naprawdę wyłączyć tę sieć?\n"
"interfejs!"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Naprawdę wyłączyć interfejs \"%s\"?\n"
msgid ""
"Requires upstream supports DNSSEC; verify unsigned domain responses really "
"come from unsigned domains"
-msgstr ""
+msgstr "Wymagane jest wsparcie dla DNSSEC; sprawdzanie, czy niepodpisane "
+"odpowiedzi w domenie rzeczywiście pochodzą z domen bez znaku"
msgid "Reset"
msgstr "Resetuj"
msgstr ""
msgid "Route type"
-msgstr ""
+msgstr "Typ trasy"
msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Serwis rozgłoszeniowy routera"
msgid "Router Password"
msgstr "Hasło routera"
msgstr ""
msgid "Size of DNS query cache"
-msgstr ""
+msgstr "Rozmiar pamięci podręcznej zapytań DNS"
msgid "Skip"
msgstr "Pomiń"
msgstr "Oprogramowanie"
msgid "Software VLAN"
-msgstr "VLAN programowy"
+msgstr "Programowy VLAN"
msgid "Some fields are invalid, cannot save values!"
msgstr "Wartości pewnych pól są niewłaściwe, nie mogę ich zachować!"
msgstr "Wyślij"
msgid "Suppress logging"
-msgstr ""
+msgstr "Pomiń rejestrowanie"
msgid "Suppress logging of the routine operation of these protocols"
-msgstr ""
+msgstr "Pomiń rejestrowanie rutynowych operacji dla tych protokołów"
msgid "Swap"
msgstr ""
msgstr "Brak aktywnych dzierżaw."
msgid "There are no changes to apply."
-msgstr ""
+msgstr "Nie ma żadnych zmian do zastosowania."
msgid "There are no pending changes to revert!"
msgstr "Brak oczekujących zmian do przywrócenia!"
"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
"Name System\">DNS</abbr> servers."
msgstr ""
+"Ten plik może zawierać linie takie jak 'server=/domain/1.2.3.4' lub "
+"'server=1.2.3.4' dla specyficznych dla domeny lub pełnych serwerów "
+"<abbr title=\"Domain Name System\">DNS</abbr>"
msgid ""
"This is a list of shell glob patterns for matching files and directories to "
"To restore configuration files, you can upload a previously generated backup "
"archive here."
msgstr ""
-"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesłać wcześniej "
+"Aby przywrócić pliki konfiguracyjne, możesz przesłać tutaj wcześniej "
"utworzoną kopię zapasową."
msgid "Tone"
msgstr "Trwa wykonanie polecenia..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "Oczekiwanie na zastosowanie konfiguracji… %ds"
msgid "Waiting for device..."
msgstr "Oczekiwanie na urządzenie..."
"upgrade it to at least version 7 or use another browser like Firefox, Opera "
"or Safari."
msgstr ""
-"Twój Internet Explorer jest za stary, aby poprawnie wyświetlić tę "
-"stronę zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglądarki, "
-"takiej jak Firefox, Opera czy Safari."
+"Twój Internet Explorer jest za stary, aby poprawnie wyświetlić tę stronę "
+"zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglądarki, takiej "
+"jak Firefox, Opera czy Safari."
msgid "any"
msgstr "dowolny"
msgid "bridged"
msgstr "zmostkowany"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "utwórz:"
msgid "open"
msgstr "otwarte"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Wróć"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Status IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Status WAN IPv6"
"-- casar por <abbr title=\"Universal Unique IDentifier/Identificador Único "
"Universal\">UUID</abbr> --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga 1 Minuto:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Estações associadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Grupo de Autenticação"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Mais informações sobre interfaces e parceiros WireGuard em <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "GHz"
msgid "IPv4 Firewall"
msgstr "Firewall para IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado IPv4 da WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Endereço IPv4"
"Prefixo <abbr title=\"Unique Local Address/Endereço Local Único\">ULA</abbr> "
"IPv6"
-msgid "IPv6 WAN Status"
-msgstr "Estado IPv6 da WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Endereço IPv6"
"\"Protocolo de Configuração Dinâmica de Hosts\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Realmente excluir esta interface? A exclusão não pode ser desfeita!\n"
" Você poderá perder o acesso a este dispositivo se você estiver conectado "
"através desta interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Realmente excluir esta interface Wireless? A exclusão não pode ser "
msgstr "Realmente limpar todas as mudanças?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Realmente desligar esta rede\"%s\" ?\n"
"através desta interface."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Realmente desligar esta interface\"%s\" ?\n"
msgid "bridged"
msgstr "em ponte"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "criar"
msgid "open"
msgstr "aberto"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "sobreposição"
msgid "« Back"
msgstr "« Voltar"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado IPv4 da WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado IPv6 da WAN"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga de 1 Minuto:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Estações Associadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Endereço IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estado WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Endereço IPv6"
"\"Protocolo de Configuração Dinâmica de Hosts\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Deseja mesmo apagar esta interface? A eliminação não poder desfeita!\n"
"Pode perde a ligação ao dispositivo, caso esta ligado através desta "
"interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Deseja mesmo apagar esta rede? A eliminação não poder desfeita!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Deseja mesmo desligar esta rede?\n"
"Pode perder o acesso ao dispositivo se estiver ligado através desta rede."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Deseja mesmo desligar a interface \"%s\" ?\n"
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "criar:"
msgid "open"
msgstr "abrir"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Voltar"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplicar"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Incarcarea in ultimul minut"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Statiile asociate"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Statusul IPv4 pe WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adresa IPv4"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Statusul IPv6 pe WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adresa IPv6"
"<abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>-"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Inapoi"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Statusul IPv4 pe WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Statusul IPv6 pe WAN"
+
#~ msgid "Apply"
#~ msgstr "Aplica"
msgid "-- match by uuid --"
msgstr "-- проверка по uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Загрузка за 1 минуту:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Подключенные клиенты"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Группа аутентификации"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Дополнительная информация о интерфейсах и партнерах WireGuard приведена в <a "
-"href=\"http://wireguard.io\">wireguard.io</a>."
+"href=\"http://wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "ГГц"
msgid "IPv4 Firewall"
msgstr "Межсетевой экран IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Состояние IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4-адрес"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-Prefix"
-msgid "IPv6 WAN Status"
-msgstr "Состояние IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6-адрес"
"динамической настройки узла\">DHCP</abbr>-сервера."
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Действительно удалить этот интерфейс? Удаление не может быть отменено!\\nВы "
"можете потерять доступ к этому устройству, если вы подключены через этот "
"интерфейс."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Действительно удалить эту беспроводную сеть? Удаление не может быть отменено!"
msgstr "Действительно сбросить все изменения?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Действительно отключить сеть? Вы можете потерять доступ к этому устройству, "
"если вы подключены через этот интерфейс."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"Действительно отключить интерфейс \"%s\" ?\\nВы можете потерять доступ к "
-"Ñ\8dÑ\82омÑ\83 Ñ\83Ñ\81Ñ\82Ñ\80ойÑ\81Ñ\82вÑ\83, еÑ\81ли вÑ\8b подклÑ\8eÑ\87енÑ\8b Ñ\87еÑ\80ез Ñ\8dÑ\82оÑ\82 инÑ\82еÑ\80Ñ\84ейÑ\81."
+"Действительно отключить интерфейс \"%s\"? Вы можете потерять доступ к этому "
+"устройству, если вы подключены через этот интерфейс."
msgid "Really switch protocol?"
msgstr "Вы действительно хотите изменить протокол?"
msgid "bridged"
msgstr "соед. мостом"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "создать:"
msgid "open"
msgstr "открыть"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "overlay"
msgid "« Back"
msgstr "« Назад"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Состояние IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Состояние IPv6 WAN"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr "-- matcha enligt uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Belastning senaste minuten:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "Associerade stationer"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Autentiseringsgrupp"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4-brandvägg"
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
"Configuration Protocol\">DHCP</abbr>-servern"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr "Verkligen återställa alla ändringar?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr "bryggad"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "skapa:"
msgid "open"
msgstr "öppen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« Bakåt"
-
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr "-- uuid'e göre eşleştir --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 Dakikalık Yük:"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr "köprülü"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "oluşturma:"
msgid "open"
msgstr "açık"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "bindirilmiş"
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-12-05 19:07+0200\n"
-"Last-Translator: Dmitri <4glitch@gmail.com>\n"
+"PO-Revision-Date: 2018-06-10 16:50+0200\n"
+"Last-Translator: Yurii <yuripet@gmail.com>\n"
"Language-Team: none\n"
"Language: uk\n"
"MIME-Version: 1.0\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.6\n"
+
+msgid ""
+msgstr ""Content-Type: text/plain; charset=UTF-8"
msgid "%.1f dB"
-msgstr ""
+msgstr "%.1f дБ"
msgid "%s is untagged in multiple VLANs!"
-msgstr ""
+msgstr "%s є непозначеним у декількох VLAN!"
msgid "(%d minute window, %d second interval)"
-msgstr "(%d-хвилинне вікно, %d-секундний інтервал)"
+msgstr "(вікно - %d хвилин, інтервал - %d секунд)"
msgid "(%s available)"
-msgstr "(%s доступно)"
+msgstr "(доступно %s)"
msgid "(empty)"
msgstr "(пусто)"
msgstr "-- Додаткові поля --"
msgid "-- Please choose --"
-msgstr "-- Ð\92иберіть --"
+msgstr "-- Ð\9eберіть --"
msgid "-- custom --"
msgstr "-- нетипово --"
msgid "-- match by device --"
-msgstr ""
+msgstr "-- відповідно пристрою --"
msgid "-- match by label --"
-msgstr ""
+msgstr "-- відповідно мітці --"
msgid "-- match by uuid --"
-msgstr ""
+msgstr "-- відповідно UUID --"
+
+msgid "-- please select --"
+msgstr "-- виберіть --"
msgid "1 Minute Load:"
msgstr "Навантаження за 1 хвилину:"
msgstr "Навантаження за 15 хвилин:"
msgid "4-character hexadecimal ID"
-msgstr ""
+msgstr "4-симв. шістнадцятковий ID"
msgid "464XLAT (CLAT)"
-msgstr ""
+msgstr "464XLAT (CLAT)"
msgid "5 Minute Load:"
msgstr "Навантаження за 5 хвилин:"
msgid "6-octet identifier as a hex string - no colons"
msgstr ""
+"6-октетний ідентифікатор у вигляді шістнадцяткового рядка – без двокрапок"
msgid "802.11r Fast Transition"
-msgstr ""
+msgstr "Швидкий перехід 802.11r"
msgid "802.11w Association SA Query maximum timeout"
-msgstr ""
+msgstr "Максимальний тайм-аут запиту асоціації 802.11w"
msgid "802.11w Association SA Query retry timeout"
-msgstr ""
+msgstr "Тайм-аут повторювання запиту асоціації 802.11w"
msgid "802.11w Management Frame Protection"
-msgstr ""
+msgstr "Захист кадрів управління 802.11w"
msgid "802.11w maximum timeout"
-msgstr ""
+msgstr "Максимальний тайм-аут 802.11w"
msgid "802.11w retry timeout"
-msgstr ""
+msgstr "Тайм-аут повторювання 802.11w"
msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
msgstr ""
"order of the resolvfile"
msgstr ""
"<abbr title=\"Domain Name System — система доменних імен\">DNS</abbr>-"
-"сервери будуть опитані у порядку, визначеному файлом resolvfile"
+"сервери буде опитано в порядку, визначеному файлом <em>resolvfile</em>"
msgid "<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
msgstr ""
msgstr "<abbr title=\"Інтернет-протокол версії 6\">IPv6</abbr>-шлюз"
msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
-msgstr ""
+msgstr "<abbr title=\"Інтернет-протокол версії 6\">IPv6</abbr>-суфікс (hex)"
msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
msgstr ""
-"Настроювання <abbr title=\"Light Emitting Diode — світлодіод\">LED</abbr>"
+"Налаштування <abbr title=\"Light Emitting Diode — світлодіод\">LED</abbr>"
msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Name"
msgstr "Назва <abbr title=\"Light Emitting Diode — світлодіод\">LED</abbr>"
"abbr>-адреса"
msgid "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"
-msgstr ""
+msgstr "<abbr title=\"Унікальний ідентифікатор DHCP\">DUID</abbr>"
msgid ""
"<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration "
"Protocol\">DHCP</abbr> leases"
msgstr ""
-"<abbr title=\"Максимум\">Max.</abbr> оренд <abbr title=\"Dynamic Host "
+"<abbr title=\"Максимум\">Макс.</abbr> оренд <abbr title=\"Dynamic Host "
"Configuration Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>"
msgid ""
"<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Extension Mechanisms for "
"Domain Name System\">EDNS0</abbr> packet size"
msgstr ""
-"<abbr title=\"Максимум\">Max.</abbr> розмір пакета <abbr title=\"Extension "
+"<abbr title=\"Максимальний\">Макс.</abbr> розмір пакета <abbr title=\"Extension "
"Mechanisms for Domain Name System — Механізми розширень для доменної системи "
"імен\">EDNS0</abbr>"
msgid "<abbr title=\"maximal\">Max.</abbr> concurrent queries"
-msgstr "<abbr title=\"Максимум\">Max.</abbr> одночасних запитів"
+msgstr "<abbr title=\"Максимум\">Макс.</abbr> одночасних запитів"
msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
-msgstr "<abbr title='Парний: %s / Груповий: %s'>%s - %s</abbr>"
+msgstr "<abbr title='Парний: %s / Груповий: %s'>%s – %s</abbr>"
msgid ""
"<br/>Note: you need to manually restart the cron service if the crontab file "
"was empty before editing."
msgstr ""
+"<br/>Примітка: якщо перед редагуванням, файл crontab був порожній, вам потрібно "
+"вручну перезапустити служби cron."
msgid "A43C + J43 + A43"
msgstr ""
"<abbr title=\"Access Point Name — символічна назва точки доступу\">APN</abbr>"
msgid "ARP retry threshold"
-msgstr "Ð\9fоÑ\80Ñ\96г повÑ\82оÑ\80Ñ\83 ARP"
+msgstr "Ð\9fоÑ\80Ñ\96г повÑ\82оÑ\80Ñ\8eваннÑ\8f ARP"
msgid "ATM (Asynchronous Transfer Mode)"
msgstr ""
+"<abbr title=\"Asynchronous Transfer Mode — асинхронний режим передавання"\">ATM</abbr>"
msgid "ATM Bridges"
msgstr "ATM-мости"
"Linux network interfaces which can be used in conjunction with DHCP or PPP "
"to dial into the provider network."
msgstr ""
-"ATM-мости виставляють інкапсульований Ethernet у з'єднаннях AAL5 як "
+"ATM-мости виставляють інкапсульований Ethernet у з’єднаннях AAL5 як "
"віртуальні мережеві інтерфейси Linux, котрі можуть використовуватися в "
"поєднанні з DHCP або PPP для підключення до мережі провайдера."
msgstr "Додаткові файли hosts"
msgid "Additional servers file"
-msgstr ""
+msgstr "Додаткові файли servers"
msgid "Address"
msgstr "Адреса"
msgstr "Додаткові параметри"
msgid "Aggregate Transmit Power(ACTATP)"
-msgstr ""
+msgstr "Сумарна потужність передавання"
msgid "Alert"
msgstr "Тривога"
"Allocate IP addresses sequentially, starting from the lowest available "
"address"
msgstr ""
+"Виділяти IP-адреси послідовно, починаючи з найнижчої доступної адреси"
msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "Виділяти IP послідовно"
msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
msgstr ""
msgstr "Дозволити всі, крім зазначених"
msgid "Allow legacy 802.11b rates"
-msgstr ""
+msgstr "Дозволити застарілі швидкості 802.11b"
msgid "Allow listed only"
msgstr "Дозволити тільки зазначені"
msgid "Allow remote hosts to connect to local SSH forwarded ports"
msgstr ""
-"Дозволити віддаленим вузлам підключення до локальних SSH-спрямованих портів"
+"Дозволити віддаленим вузлам підключення до локальних переспрямованих портів "
+"SSH"
msgid "Allow root logins with password"
msgstr "Дозволити root-вхід із паролем"
msgid ""
"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
msgstr ""
-"Дозволити відповіді від клієнта на сервер у діапазоні 127.0.0.0/8, "
+"Дозволити висхідні відповіді від клієнта на сервер у діапазоні 127.0.0.0/8, "
"наприклад, для RBL-послуг"
msgid "Allowed IPs"
-msgstr ""
+msgstr "Дозволено IP-адреси"
msgid "Always announce default router"
-msgstr ""
+msgstr "Завжди оголошувати типовим маршрутизатором"
msgid "Annex"
msgstr ""
msgstr ""
msgid "Announce as default router even if no public prefix is available."
-msgstr ""
+msgstr "Оголошувати типовим маршрутизатором, навіть якщо немає доступного "
+"спільного префікса."
msgid "Announced DNS domains"
-msgstr ""
+msgstr "Оголошено DNS-домени"
msgid "Announced DNS servers"
-msgstr ""
+msgstr "Оголошено DNS-сервери"
msgid "Anonymous Identity"
-msgstr ""
+msgstr "Анонімне посвідчення"
msgid "Anonymous Mount"
-msgstr ""
+msgstr "Анонімне монтування"
msgid "Anonymous Swap"
-msgstr ""
+msgstr "Анонімний своп"
msgid "Antenna 1"
msgstr "Антена 1"
msgstr "Будь-яка зона"
msgid "Apply request failed with status <code>%h</code>"
-msgstr ""
+msgstr "Сталася помилка запиту на застосування зі статусом <code>%h</code>"
msgid "Apply unchecked"
-msgstr ""
+msgstr "Застосування не позначено"
+
+msgid "Architecture"
+msgstr "Архітектура"
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
+"Призначати частину заданої довжини до кожного публічного IPv6-префікса "
+"цього інтерфейсу"
msgid "Assign interfaces..."
msgstr "Призначення інтерфейсів..."
msgid ""
"Assign prefix parts using this hexadecimal subprefix ID for this interface."
msgstr ""
+"Призначати для цього інтерфейсу частину префікса, використовуючи цей "
+"шістнадцятковий ID субпрефікса."
msgid "Associated Stations"
-msgstr "Приєднані станції"
+msgstr "Приєднано станції"
+
+msgid "Associations"
+msgstr "З’єднань"
msgid "Auth Group"
-msgstr ""
+msgstr "Група автентифікації"
msgid "Authentication"
msgstr "Автентифікація"
msgid "Authentication Type"
-msgstr ""
+msgstr "Тип автентифікації"
msgid "Authoritative"
msgstr "Надійний"
msgstr "Автоматичне оновлення"
msgid "Automatic"
-msgstr ""
+msgstr "Автоматично"
msgid "Automatic Homenet (HNCP)"
-msgstr ""
+msgstr "Автоматично Homenet (HNCP)"
msgid "Automatically check filesystem for errors before mounting"
msgstr ""
+"Автоматично перевіряти файлову систему на наявність помилок перед "
+"монтуванням"
msgid "Automatically mount filesystems on hotplug"
msgstr ""
+"Автоматично монтувати файлові системи при оперативниму підключенні"
msgid "Automatically mount swap on hotplug"
-msgstr ""
+msgstr "Автоматично монтувати своп при оперативниму підключенні"
msgid "Automount Filesystem"
-msgstr ""
+msgstr "Автомонтування ФС"
msgid "Automount Swap"
-msgstr ""
+msgstr "Автомонтування своп"
msgid "Available"
msgstr "Доступно"
msgstr "Повернутися до результатів сканування"
msgid "Backup / Flash Firmware"
-msgstr "РезеÑ\80вне копÑ\96Ñ\8eваннÑ\8f / Ð\9eновленнÑ\8f пÑ\80оÑ\88ивки"
+msgstr "РезеÑ\80вне копÑ\96Ñ\8eваннÑ\8f / Ð\9fÑ\80оÑ\88ивка мÑ\96кÑ\80опÑ\80огÑ\80ами"
msgid "Backup / Restore"
msgstr "Резервне копіювання/відновлення"
msgstr "Список файлів резервних копій"
msgid "Bad address specified!"
-msgstr "Ð\92казана непÑ\80авилÑ\8cна адÑ\80еÑ\81а!"
+msgstr "Ð\92казано непÑ\80авилÑ\8cнÑ\83 адÑ\80еÑ\81Ñ\83!"
msgid "Band"
-msgstr ""
+msgstr "Група"
msgid ""
"Below is the determined list of files to backup. It consists of changed "
"базових файлів, та файлів за користувацькими шаблонами резервного копіювання."
msgid "Bind interface"
-msgstr ""
+msgstr "Прив’язка інтерфейсу"
msgid "Bind only to specific interfaces rather than wildcard address."
-msgstr ""
+msgstr "Прив’язка тільки до певних інтерфейсів, а не шаблонної адреси."
msgid "Bind the tunnel to this interface (optional)."
-msgstr ""
+msgstr "Прив’язка тунелю до цього інтерфейсу (за бажання)."
msgid "Bitrate"
-msgstr "Швидкість передачі даних"
+msgstr "Швидкість передавання даних"
msgid "Bogus NX Domain Override"
msgstr "Відкидати підробки NX-домену"
msgstr "Міст"
msgid "Bridge interfaces"
-msgstr "Об'єднати інтерфейси в міст"
+msgstr "Об’єднати інтерфейси в міст"
msgid "Bridge unit number"
msgstr "Номер моста"
"Build/distribution specific feed definitions. This file will NOT be "
"preserved in any sysupgrade."
msgstr ""
+"Специфічні для збірки/поширення визначення каналів. Цей файл НЕ БУДЕ "
+"збережено при будь-якому оновленні системи."
msgid "CA certificate; if empty it will be saved after the first connection."
msgstr ""
+"Сертифікат CA; якщо порожньо, його буде збережено після першого підключення."
msgid "CPU usage (%)"
msgstr "Завантаження ЦП, %"
msgstr "Скасувати"
msgid "Category"
-msgstr ""
+msgstr "Категорія"
msgid "Chain"
msgstr "Ланцюжок"
msgstr "Зміни застосовано."
msgid "Changes have been reverted."
-msgstr ""
+msgstr "Зміни було скасовано."
msgid "Changes the administrator password for accessing the device"
msgstr "Зміна пароля адміністратора для доступу до пристрою"
"Channel %d is not available in the %s regulatory domain and has been auto-"
"adjusted to %d."
msgstr ""
+"Канал %d не доступний у %s регуляторному домені й був автоматично "
+"скоригований на %d."
msgid "Check"
msgstr "Перевірити"
msgid "Check filesystems before mount"
-msgstr ""
+msgstr "Перевірити файлову систему перед монтуванням"
msgid "Check this option to delete the existing networks from this radio."
-msgstr ""
+msgstr "Позначте цей параметр, щоб видалити існуючі мережі з цього радіо."
msgid "Checksum"
msgstr "Контрольна сума"
msgstr "Шифр"
msgid "Cisco UDP encapsulation"
-msgstr ""
+msgstr "Інкапсуляція UDP Cisco"
msgid ""
"Click \"Generate archive\" to download a tar archive of the current "
"\"Perform reset\" (only possible with squashfs images)."
msgstr ""
"Натисніть кнопку \"Створити архів\", щоб завантажити tar-архів поточних "
-"Ñ\84айлÑ\96в конÑ\84Ñ\96гÑ\83Ñ\80аÑ\86Ñ\96Ñ\97. Ð\94лÑ\8f вÑ\96дновленнÑ\8f пÑ\80оÑ\88ивки до Ñ\97Ñ\97 поÑ\87аÑ\82кового Ñ\81Ñ\82анÑ\83, "
-"натисніть кнопку \"Відновити\" (можливе тільки з образами SquashFS)."
+"Ñ\84айлÑ\96в конÑ\84Ñ\96гÑ\83Ñ\80аÑ\86Ñ\96Ñ\97. Ð\94лÑ\8f вÑ\96дновленнÑ\8f мÑ\96кÑ\80опÑ\80огÑ\80ами до Ñ\97Ñ\97 поÑ\87аÑ\82кового "
+"стану натисніть кнопку \"Відновити\" (можливо тільки з образами SquashFS)."
msgid "Client"
msgstr "Клієнт"
"Close inactive connection after the given amount of seconds, use 0 to "
"persist connection"
msgstr ""
-"Закривати неактивні з'єднання після певного інтервалу часу (секунди). Для "
-"утримання неактивних з'єднань використовуйте 0"
+"Закривати неактивні з’єднання після певного інтервалу часу (секунди). Для "
+"утримання неактивних з’єднань використовуйте 0"
msgid "Close list..."
msgstr "Згорнути список..."
"workaround might cause interoperability issues and reduced robustness of key "
"negotiation especially in environments with heavy traffic load."
msgstr ""
+"Ускладнює атаки перевстановлення ключа на стороні клієнта, відключаючи "
+"ретрансляцію кадрів EAPOL-Key, що використовуються для встановлення ключів. "
+"Може викликати проблеми сумісності та зниження стійкості узгодження ключа, "
+"особливо в середовищах з великою завантаженістю трафіку."
msgid "Configuration"
msgstr "Конфігурація"
msgid "Configuration files will be kept."
-msgstr "Конфігураційні файли будуть збережені."
+msgstr "Конфігураційні файли буде збережено."
msgid "Configuration has been applied."
-msgstr ""
+msgstr "Конфігурацію застосовано."
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "Конфігурацію було відкочено!"
msgid "Confirmation"
msgstr "Підтвердження"
msgstr "Підключити"
msgid "Connected"
-msgstr "Ð\9fÑ\96дклÑ\8eÑ\87ений"
+msgstr "Ð\9fÑ\96дклÑ\8eÑ\87ено"
msgid "Connection Limit"
msgstr "Гранична кількість підключень"
"changes. You might need to reconnect if you modified network related "
"settings such as the IP address or wireless security credentials."
msgstr ""
+"Після застосування змін конфігурації не вдалося відновити доступ до пристрою. "
+"Вам, можливо, знадобитися повторне підключення, якщо ви змінили налаштування "
+"мережі, такі як IP-адреса або облікові дані безпеки бездротової мережі."
msgid "Country"
msgstr "Країна"
msgstr "Інтерфейс користувача"
msgid "Custom delegated IPv6-prefix"
-msgstr ""
+msgstr "Користувацький делегований префікс IPv6"
msgid ""
"Custom feed definitions, e.g. private feeds. This file can be preserved in a "
"sysupgrade."
-msgstr ""
+msgstr "Користувацькі визначення каналів, наприклад, приватних. Цей файл може "
+"бути збережено при оновленні системи."
msgid "Custom feeds"
-msgstr ""
+msgstr "Користувацькі канали"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
+"Користувацькі файли (сертифікати, скрипти) можуть залишитися в системі. Щоб "
+"запобігти цьому, спочатку виконайте скидання до заводських налаштувань."
msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible."
msgstr ""
-"Настроювання поведінки <abbr title=\"Light Emitting Diode — світлодіод"
+"Налаштування поведінки <abbr title=\"Light Emitting Diode — світлодіод"
"\">LED</abbr>, якщо це можливо."
msgid "DHCP Leases"
msgstr "Оренди DHCPv6"
msgid "DHCPv6 client"
-msgstr ""
+msgstr "Клієнт DHCPv6"
msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "Режим DHCPv6"
msgid "DHCPv6-Service"
-msgstr ""
+msgstr "Служба DHCPv6"
msgid "DNS"
msgstr "DNS"
msgid "DNS forwardings"
-msgstr "СпÑ\80Ñ\8fмовÑ\83ваннÑ\8f DNS-запиÑ\82Ñ\96в"
+msgstr "Ð\9fеÑ\80еÑ\81пÑ\80Ñ\8fмовÑ\83ваннÑ\8f<br />запиÑ\82Ñ\96в DNS"
msgid "DNS-Label / FQDN"
-msgstr ""
+msgstr "DNS-мітка / FQDN"
msgid "DNSSEC"
msgstr ""
msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "перевірка непідписаного DNSSEC"
msgid "DPD Idle Timeout"
-msgstr ""
+msgstr "Тайм-аут простою DPD"
msgid "DS-Lite AFTR address"
-msgstr ""
+msgstr "AFTR-адреса DS-Lite"
msgid "DSL"
-msgstr ""
+msgstr "DSL"
msgid "DSL Status"
-msgstr ""
+msgstr "Стан DSL"
msgid "DSL line mode"
-msgstr ""
+msgstr "Режим лінії DSL"
msgid "DUID"
msgstr "DUID"
msgid "Data Rate"
-msgstr ""
+msgstr "Швидк. передавання"
msgid "Debug"
msgstr "Зневаджування"
msgstr "Типовий шлюз"
msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "Типовим є БЕЗ та ЗІ збереженням стану"
msgid "Default state"
msgstr "Типовий стан"
msgstr "Конфігурація пристрою"
msgid "Device is rebooting..."
-msgstr ""
+msgstr "Пристрій перезавантажується..."
msgid "Device unreachable"
-msgstr ""
+msgstr "Пристрій недосяжний"
msgid "Device unreachable!"
-msgstr ""
+msgstr "Пристрій недосяжний!"
msgid "Diagnostics"
msgstr "Діагностика"
msgid "Dial number"
-msgstr ""
+msgstr "Набір номера"
msgid "Directory"
msgstr "Каталог"
"динамічної конфігурації вузла\">DHCP</abbr> для цього інтерфейсу."
msgid "Disable DNS setup"
-msgstr "Вимкнути настроювання DNS"
+msgstr "Вимкнути налаштування DNS"
msgid "Disable Encryption"
-msgstr ""
+msgstr "Вимкнути шифрування"
msgid "Disabled"
msgstr "Вимкнено"
msgid "Disabled (default)"
-msgstr ""
+msgstr "Вимкнено (типово)"
msgid "Discard upstream RFC1918 responses"
-msgstr "Відкидати RFC1918-відповіді від клієнта на сервер"
+msgstr "Відкидати висхідні RFC1918-відповіді"
msgid "Dismiss"
-msgstr ""
+msgstr "Відхилити"
msgid "Displaying only packages containing"
-msgstr "Ð\9fоказанÑ\96 Ñ\82Ñ\96лÑ\8cки непоÑ\80ожнÑ\96 пакеÑ\82и"
+msgstr "Ð\92Ñ\96добÑ\80аженнÑ\8f лиÑ\88е непоÑ\80ожнÑ\96Ñ\85 пакеÑ\82Ñ\96в"
msgid "Distance Optimization"
msgstr "Оптимізація за відстанню"
msgstr "Відстань до найвіддаленішого вузла мережі в метрах."
msgid "Distribution feeds"
-msgstr ""
+msgstr "Канали поширення"
msgid "Diversity"
msgstr "Різновидність"
"Dnsmasq являє собою комбінований <abbr title=\"Dynamic Host Configuration "
"Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-сервер і "
"<abbr title=\"Domain Name System — система доменних імен\">DNS</abbr>-"
-"транспортер для брандмауерів <abbr title=\"Network Address Translation — "
+"проксі для брандмауерів <abbr title=\"Network Address Translation — "
"перетворення (трансляція) мережевих адрес\">NAT</abbr>"
msgid "Do not cache negative replies, e.g. for not existing domains"
msgid "Do not forward requests that cannot be answered by public name servers"
msgstr ""
-"Не спрямовувати запити, які не можуть бути оброблені публічними серверами "
+"Не переспрямовувати запити, які не може бути оброблено публічними серверами "
"імен"
msgid "Do not forward reverse lookups for local networks"
-msgstr "Не спрямовувати зворотний перегляд для локальних мереж"
+msgstr "Не переспрямовувати зворотні <abbr title=\"Domain Name System — "
+"система доменних імен\">DNS</abbr>-запити для локальних мереж"
msgid "Domain required"
msgstr "Потрібен домен"
msgstr "\"Білий список\" доменів"
msgid "Don't Fragment"
-msgstr ""
+msgstr "Не фрагментувати"
msgid ""
"Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
"<abbr title=\"Domain Name System\">DNS</abbr>-Name"
msgstr ""
-"Ð\9dе пеÑ\80еÑ\81илати <abbr title=\"Domain Name System — система доменних імен"
+"Ð\9dе пеÑ\80еÑ\81пÑ\80Ñ\8fмовÑ\83вати <abbr title=\"Domain Name System — система доменних імен"
"\">DNS</abbr>-запити без <abbr title=\"Domain Name System — система доменних "
"імен\">DNS</abbr>-імені"
msgstr "Завантажити резервну копію"
msgid "Downstream SNR offset"
-msgstr ""
+msgstr "Низхідний зсув SNR"
msgid "Dropbear Instance"
msgstr "Реалізація Dropbear"
"обслуговуватися тільки клієнти, які мають статичні оренди."
msgid "EA-bits length"
-msgstr ""
+msgstr "Довжина EA-бітів"
msgid "EAP-Method"
msgstr "EAP-Метод"
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""
+"Щоб виправити якусь помилку, відредагуйте вихідні дані конфігурації вище і "
+"натисніть \"Зберегти\", щоб перезавантажити сторінку."
msgid "Edit this interface"
msgstr "Редагувати цей інтерфейс"
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
+"Увімкнути відстеження <abbr title=\"Internet Group Management Protocol\">"
+"IGMP</abbr>"
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Увімкнути динамічне оновлення кінцевої точки HE.net"
msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "Увімкнути узгодження IPv6"
msgid "Enable IPv6 negotiation on the PPP link"
-msgstr "Увімкнути узгодження IPv6 для PPP-з'єднань"
+msgstr "Увімкнути узгодження IPv6 для PPP-з’єднань"
msgid "Enable Jumbo Frame passthrough"
msgstr "Пропускати Jumbo-фрейми"
msgid "Enable NTP client"
-msgstr "Увімкнути NTP-клієнт"
+msgstr "Увімкнути клієнта NTP"
msgid "Enable Single DES"
-msgstr ""
+msgstr "Увімкнути Single DES"
msgid "Enable TFTP server"
msgstr "Увімкнути TFTP-сервер"
msgstr "Увімкнути підтримку VLAN"
msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "Увімкнути кнопку WPS, потребує WPA(2)-PSK"
msgid "Enable key reinstallation (KRACK) countermeasures"
-msgstr ""
+msgstr "Увімкнути протидію<br />перевстановленню ключів (KRACK)"
msgid "Enable learning and aging"
msgstr "Увімкнути learning та aging"
msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "Увімкнути віддзеркалення вхідних пакетів"
msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "Увімкнути віддзеркалення вихідних пакетів"
msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "Увімкнути прапорець DF (Don't Fragment) для інкапсульованих пакетів"
msgid "Enable this mount"
msgstr "Увімкнути це монтування"
msgid "Enable this swap"
-msgstr "Увімкнути це довантаження"
+msgstr "Увімкнути цей своп"
msgid "Enable/Disable"
msgstr "Увімкнено/Вимкнено"
msgstr "Увімкнено"
msgid "Enables IGMP snooping on this bridge"
-msgstr ""
+msgstr "Вмикає відстеження IGMP на цьому мосту"
msgid ""
"Enables fast roaming among access points that belong to the same Mobility "
"Domain"
msgstr ""
+"Вмикає швидкий роумінг між точками доступу, що належать до одного і "
+"того ж домену мобільності"
msgid "Enables the Spanning Tree Protocol on this bridge"
msgstr ""
-"УвÑ\96мкнÑ\83Ñ\82и <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому мосту"
+"Ð\92микаÑ\94 <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому мосту"
msgid "Encapsulation mode"
msgstr "Режим інкапсуляції"
msgstr "Шифрування"
msgid "Endpoint Host"
-msgstr ""
+msgstr "Хост кінцевої точки"
msgid "Endpoint Port"
-msgstr ""
+msgstr "Порт кінцевої точки"
msgid "Erasing..."
msgstr "Видалення..."
msgstr "Помилка"
msgid "Errored seconds (ES)"
-msgstr ""
+msgstr "Секунд з помилками (<abbr title=\"Errored seconds\">ES</abbr>)"
msgid "Ethernet Adapter"
-msgstr "Адаптер Ethernet"
+msgstr "Ethernet-адаптер"
msgid "Ethernet Switch"
msgstr "Ethernet-комутатор"
msgid "Exclude interfaces"
-msgstr ""
+msgstr "Виключити інтерфейси"
msgid "Expand hosts"
msgstr "Розширення вузлів"
msgid "Expires"
-msgstr "Ð\94Ñ\96йÑ\81ний Ñ\89е"
+msgstr "Ð\97бÑ\96гаÑ\94 за"
#, fuzzy
msgid ""
msgstr "Термін оренди адрес, мінімум 2 хвилини (<code>2m</code>)."
msgid "External"
-msgstr ""
+msgstr "Зовнішнє"
msgid "External R0 Key Holder List"
-msgstr ""
+msgstr "Зовнішній список власників ключів R0"
msgid "External R1 Key Holder List"
-msgstr ""
+msgstr "Зовнішній список власників ключів R1"
msgid "External system log server"
msgstr "Зовнішній сервер системного журналу"
msgstr "Порт зовнішнього сервера системного журналу"
msgid "External system log server protocol"
-msgstr ""
+msgstr "Протокол зовнішнього сервера системного журналу"
msgid "Extra SSH command options"
-msgstr ""
+msgstr "Додаткові параметри команд SSH"
msgid "FT over DS"
-msgstr ""
+msgstr "FT через DS"
msgid "FT over the Air"
-msgstr ""
+msgstr "FT через повітря"
-msgid "FT protocol"
+msgid "Протокол FT"
msgstr ""
msgid "Failed to confirm apply within %ds, waiting for rollback…"
-msgstr ""
+msgstr "Не вдалося підтвердити застосування на протязі %d с, очікуємо відкату…"
msgid "File"
msgstr "Файл"
msgid "Filename of the boot image advertised to clients"
-msgstr "І'мя завантажувального образу, що оголошується клієнтам"
+msgstr "І’мя завантажувального образу, що оголошується клієнтам"
msgid "Filesystem"
msgstr "Файлова система"
"Find all currently attached filesystems and swap and replace configuration "
"with defaults based on what was detected"
msgstr ""
+"Знайти всі файлові системи та свопи, які наразі підключено і замінити "
+"конфігурацію типовою на підставі того, що було виявлено"
msgid "Find and join network"
msgstr "Знайти мережу й приєднатися"
msgstr "Брандмауер"
msgid "Firewall Mark"
-msgstr ""
+msgstr "Позначка брандмауера"
msgid "Firewall Settings"
-msgstr "Настройки брандмауера"
+msgstr "Налаштування брандмауера"
msgid "Firewall Status"
-msgstr "Статус брандмауера"
+msgstr "Стан брандмауера"
msgid "Firmware File"
-msgstr ""
+msgstr "Файл мікропрограми"
msgid "Firmware Version"
-msgstr "Ð\92еÑ\80Ñ\81Ñ\96Ñ\8f пÑ\80оÑ\88ивки"
+msgstr "Ð\92еÑ\80Ñ\81Ñ\96Ñ\8f мÑ\96кÑ\80опÑ\80огÑ\80ами"
msgid "Fixed source port for outbound DNS queries"
msgstr "Фіксований порт для вихідних DNS-запитів"
msgid "Flash Firmware"
-msgstr "Ð\97аливаÑ\94мо пÑ\80оÑ\88ивку"
+msgstr "Ð\9fÑ\80оÑ\88иваÑ\94мо мÑ\96кÑ\80опÑ\80огÑ\80аму"
msgid "Flash image..."
-msgstr "Ð\92Ñ\96дванÑ\82ажити образ..."
+msgstr "Ð\9fÑ\80оÑ\88ити образ..."
msgid "Flash new firmware image"
-msgstr "Ð\97алиÑ\82и новий обÑ\80аз пÑ\80оÑ\88ивки"
+msgstr "Ð\9fÑ\80оÑ\88иÑ\82и новий обÑ\80аз мÑ\96кÑ\80опÑ\80огÑ\80ами"
msgid "Flash operations"
-msgstr "Ð\9eпеÑ\80аÑ\86Ñ\96Ñ\97 заливання"
+msgstr "Ð\9eпеÑ\80аÑ\86Ñ\96Ñ\97 пÑ\80оÑ\88ивання"
msgid "Flashing..."
-msgstr "Ð\97аливаємо..."
+msgstr "Ð\9fÑ\80оÑ\88иваємо..."
msgid "Force"
msgstr "Примусово"
msgstr "Примусово TKIP та CCMP (AES)"
msgid "Force link"
-msgstr ""
+msgstr "Примусове з’єднання"
msgid "Force use of NAT-T"
-msgstr ""
+msgstr "Примусово використовувати NAT-T"
msgid "Form token mismatch"
-msgstr ""
+msgstr "Неузгодженість маркера форми"
msgid "Forward DHCP traffic"
-msgstr "Спрямовувати DHCP-трафік"
+msgstr "Ð\9fеÑ\80еÑ\81прямовувати DHCP-трафік"
msgid "Forward Error Correction Seconds (FECS)"
-msgstr ""
+msgstr "Секунди прямого коригування помилок (FECS)"
msgid "Forward broadcast traffic"
-msgstr "Спрямовувати широкомовний трафік"
+msgstr "Ð\9fеÑ\80еÑ\81прямовувати широкомовний трафік"
msgid "Forward mesh peer traffic"
-msgstr ""
+msgstr "Переспрямовувати одноранговий трафік"
msgid "Forwarding mode"
-msgstr "Режим спрямовування"
+msgstr "Режим переспрямовування"
msgid "Fragmentation Threshold"
msgstr "Поріг фрагментації"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgstr "Порти шлюзу"
msgid "General Settings"
-msgstr "Ð\97агалÑ\8cнÑ\96 наÑ\81Ñ\82Ñ\80ойки"
+msgstr "Ð\97агалÑ\8cнÑ\96 паÑ\80амеÑ\82Ñ\80и"
msgid "General Setup"
-msgstr "Загальні настройки"
+msgstr "Загальні налаштування"
msgid "General options for opkg"
-msgstr ""
+msgstr "Загальні параметри OPKG"
msgid "Generate Config"
-msgstr ""
+msgstr "Cтворити конфігурацію"
msgid "Generate PMK locally"
-msgstr ""
+msgstr "Генерувати PMK локально"
msgid "Generate archive"
msgstr "Cтворити архів"
msgstr "Оскільки пароль і підтвердження не співпадають, то пароль не змінено!"
msgid "Global Settings"
-msgstr ""
+msgstr "Загальні параметри"
msgid "Global network options"
-msgstr ""
+msgstr "Глобальні параметри мережі"
msgid "Go to password configuration..."
msgstr "Перейти до конфігурації пароля..."
msgstr "Перейти до відповідної сторінки конфігурації"
msgid "Group Password"
-msgstr ""
+msgstr "Пароль групи"
msgid "Guest"
-msgstr ""
+msgstr "Гість"
msgid "HE.net password"
msgstr "Пароль HE.net"
msgid "HE.net username"
-msgstr ""
+msgstr "Ім’я користувача HE.net"
msgid "HT mode (802.11n)"
-msgstr ""
+msgstr "Режим HT (802.11n)"
msgid "Hang Up"
msgstr "Призупинити"
"Here you can configure the basic aspects of your device like its hostname or "
"the timezone."
msgstr ""
-"Тут ви можете настроїти основні параметри вигляду вашого пристрою, такі як "
+"Тут ви можете налаштувати основні параметри вигляду вашого пристрою, такі як "
"назва (ім’я) вузла або часовий пояс."
msgid ""
"розширеної служби послуг\">ESSID</abbr>"
msgid "Host"
-msgstr ""
+msgstr "Вузол"
msgid "Host entries"
msgstr "Записи вузлів"
msgstr "<abbr title=\"Internet Protocol Address\">IP</abbr> вузла або мережа"
msgid "Hostname"
-msgstr "Назва (ім'я) вузла"
+msgstr "Назва (ім’я) вузла"
msgid "Hostname to send when requesting DHCP"
-msgstr "Ім'я вузла для надсилання при запиті DHCP"
+msgstr "Ім’я вузла для надсилання при запиті DHCP"
msgid "Hostnames"
msgstr "Імена вузлів"
msgstr ""
msgid "IP Addresses"
-msgstr ""
+msgstr "Адреси IP"
msgid "IP address"
msgstr "IP-адреса"
msgid "IPv4 Firewall"
msgstr "Брандмауер IPv4"
-msgid "IPv4 WAN Status"
-msgstr "СÑ\82аÑ\82Ñ\83Ñ\81 IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr "Ð\92иÑ\81Ñ\85Ñ\96дне зâ\80\99Ñ\94днаннÑ\8f IPv4"
msgid "IPv4 address"
msgstr "Адреса IPv4"
msgstr "IPv4 та IPv6"
msgid "IPv4 assignment length"
-msgstr ""
+msgstr "Довжина присвоювання IPv4"
msgid "IPv4 broadcast"
msgstr "Широкомовний IPv4"
msgstr "Брандмауер IPv6"
msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "Сусіди IPv6"
msgid "IPv6 Settings"
-msgstr ""
+msgstr "Налаштування IPv6"
msgid "IPv6 ULA-Prefix"
msgstr ""
+"<abbr title=\"Unique Local Address — унікальна локальна адреса\">ULA"
+"</abbr>-префікс IPv6"
-msgid "IPv6 WAN Status"
-msgstr "СÑ\82аÑ\82Ñ\83Ñ\81 IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr "Ð\92иÑ\81Ñ\85Ñ\96дне зâ\80\99Ñ\94днаннÑ\8f IPv6"
msgid "IPv6 address"
msgstr "Адреса IPv6"
msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "Натяк призначення IPv6"
msgid "IPv6 assignment length"
-msgstr ""
+msgstr "Довжина призначення IPv6"
msgid "IPv6 gateway"
msgstr "Шлюз IPv6"
msgstr "Довжина префікса IPv6"
msgid "IPv6 routed prefix"
-msgstr ""
+msgstr "Надісланий префікс IPv6"
msgid "IPv6 suffix"
-msgstr ""
+msgstr "Суфікс IPv6"
msgid "IPv6-Address"
msgstr "IPv6-адреса"
msgstr "IPv6 через IPv4 (6to4)"
msgid "Identity"
-msgstr "Ð\86денÑ\82иÑ\87нÑ\96Ñ\81Ñ\82Ñ\8c"
+msgstr "Ð\9fоÑ\81вÑ\96дÑ\87еннÑ\8f"
msgid "If checked, 1DES is enabled"
-msgstr ""
+msgstr "Якщо позначено, 1DES увімкнено"
msgid "If checked, encryption is disabled"
-msgstr ""
+msgstr "Якщо позначено, шифрування вимкнено"
msgid ""
"If specified, mount the device by its UUID instead of a fixed device node"
"If specified, mount the device by the partition label instead of a fixed "
"device node"
msgstr ""
-"ЯкÑ\89о обÑ\80ано, монÑ\82Ñ\83ваÑ\82и пÑ\80иÑ\81Ñ\82Ñ\80Ñ\96й за назвою його розділу замість фіксованого "
+"ЯкÑ\89о обÑ\80ано, монÑ\82Ñ\83ваÑ\82и пÑ\80иÑ\81Ñ\82Ñ\80Ñ\96й за мÑ\96Ñ\82кою його розділу замість фіксованого "
"вузла пристрою"
msgid "If unchecked, no default route is configured"
-msgstr "Якщо не позначено, типовий маршрут не настроєно"
+msgstr "Якщо не позначено, типовий маршрут не налаштовано"
msgid "If unchecked, the advertised DNS server addresses are ignored"
msgstr "Якщо не позначено, оголошувані адреси DNS-серверів ігноруються"
"slow process as the swap-device cannot be accessed with the high datarates "
"of the <abbr title=\"Random Access Memory\">RAM</abbr>."
msgstr ""
-"Якщо фізичної пам'яті недостатньо, невикористовувані дані можуть тимчасово "
+"Якщо фізичної пам’яті недостатньо, невикористовувані дані можуть тимчасово "
"витіснятися на своп-пристрій, у результаті чого збільшується кількість "
-"корисної оперативної пам'яті (<abbr title=\"Random Access Memory\">RAM</"
+"корисної оперативної пам’яті (<abbr title=\"Random Access Memory\">RAM</"
"abbr>). Майте на увазі, що свопінг даних є дуже повільним процесом, оскільки "
"своп-пристрої не можуть бути доступні з такою високою швидкістю, як <abbr "
"title=\"Random Access Memory\">RAM</abbr>."
msgid "Ignore <code>/etc/hosts</code>"
-msgstr ""
+msgstr "Ігнорувати<code>/etc/hosts</code>"
msgid "Ignore interface"
msgstr "Ігнорувати интерфейс"
"In order to prevent unauthorized access to the system, your request has been "
"blocked. Click \"Continue »\" below to return to the previous page."
msgstr ""
+"Щоб запобігти несанкціонованому доступу до системи, ваш запит було "
+"заблоковано. Натисніть \"Продовжити »\" нижче, щоб повернутися до "
+"попередньої сторінки."
msgid "Inactivity timeout"
msgstr "Тайм-аут бездіяльності"
msgstr "Інсталяція розширень протоколу..."
msgid "Installed packages"
-msgstr "Інстальовані пакети"
+msgstr "Інстальовано пакети"
msgid "Interface"
msgstr "Інтерфейс"
msgid "Interface %q device auto-migrated from %q to %q."
-msgstr ""
+msgstr "Пристрій інтерфейсу %q автоматичного мігрував із %q на %q."
msgid "Interface Configuration"
msgstr "Конфігурація інтерфейсу"
msgstr "Інтерфейс завершує роботу..."
msgid "Interface name"
-msgstr ""
+msgstr "Ім’я інтерфейсу"
msgid "Interface not present or not connected yet."
-msgstr "Інтерфейс відсутній або ще не підключений."
+msgstr "Інтерфейс відсутній або його ще не підключено."
msgid "Interface reconnected"
msgstr "Інтерфейс перепідключено"
msgstr "Неприпустиме ім’я користувача та/або пароль! Спробуйте ще раз."
msgid "Isolate Clients"
-msgstr ""
+msgstr "Ізолювати клієнтів"
-#, fuzzy
msgid ""
"It appears that you are trying to flash an image that does not fit into the "
"flash memory, please verify the image file!"
msgstr ""
-"СÑ\85оже, Ñ\89о ви намагаÑ\94Ñ\82еÑ\81Ñ\8f залиÑ\82и обÑ\80аз, Ñ\8fкий не вмÑ\96Ñ\89аÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ñ\83 Ñ\84леÑ\88-пам'Ñ\8fÑ\82Ñ\8c! "
+"СÑ\85оже, Ñ\89о ви намагаÑ\94Ñ\82еÑ\81Ñ\8f пÑ\80оÑ\88иÑ\82и обÑ\80аз, Ñ\8fкий не вмÑ\96Ñ\89аÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f до Ñ\84леÑ\88-памâ\80\99Ñ\8fÑ\82Ñ\96! "
"Перевірте файл образу!"
msgid "JavaScript required!"
msgstr "Підключення до мережі: Сканування бездротових мереж"
msgid "Joining Network: %q"
-msgstr ""
+msgstr "Приєднання до мережі: %q"
msgid "Keep settings"
-msgstr "Зберегти настройки"
+msgstr "Зберегти налаштування"
msgid "Kernel Log"
msgstr "Журнал ядра"
msgstr "Мова та стиль"
msgid "Latency"
-msgstr ""
+msgstr "Затримка"
msgid "Leaf"
-msgstr ""
+msgstr "Лист"
msgid "Lease time"
-msgstr ""
+msgstr "Час оренди"
msgid "Lease validity time"
msgstr "Час чинності оренди"
msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
msgstr ""
+"Обмежувати службу DNS інтерфейсами підмереж, на яких ми обслуговуємо DNS."
msgid "Limit listening to these interfaces, and loopback."
msgstr ""
+"Обмежитися прослуховуванням цих інтерфейсів і повернутися до початку циклу."
msgid "Line Attenuation (LATN)"
msgstr ""
msgstr ""
msgid "Link On"
-msgstr "Зв'язок встановлено"
+msgstr "Зв’язок встановлено"
msgid ""
"List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
"requests to"
msgstr ""
-"Список <abbr title=\"Domain Name System\">DNS</abbr>-серверів, до яких "
-"пеÑ\80еÑ\81илаÑ\82и запиÑ\82и"
+"Список <abbr title=\"Domain Name System\">DNS</abbr>-серверів для "
+"пеÑ\80еÑ\81пÑ\80Ñ\8fмовÑ\83ваннÑ\8f запиÑ\82Ñ\96в"
msgid ""
"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
"from the R0KH that the STA used during the Initial Mobility Domain "
"Association."
msgstr ""
+"Список власників ключів R0 у тому ж домені мобільності. <br />Формат: MAC-"
+"адреса,NAS-ідентифікатор,128-бітний ключ у вигляді шістнадцяткового рядка. "
+"<br />Цей список використовується для відображення <abbr title=\"ідентифікатор "
+"власника ключа R0\">R0KH-ID</abbr> (NAS-ідентифікатор) на MAC-адреси "
+"призначення при запиті ключа PMK-R1 від <abbr title=\"власник ключа R0\">R0KH"
+"</abbr>, як станції, що була використана під час початкової асоціації домену "
+"мобільності."
msgid ""
"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
"R0KH. This is also the list of authorized R1KHs in the MD that can request "
"PMK-R1 keys."
msgstr ""
+"Список власників ключів R1 у тому ж домені мобільності. <br />Формат: MAC-"
+"адреса,<abbr title=\"ідентифікатор власника ключа R1\">R1KH-ID</abbr> у формі "
+"6 октетів з двокрапками,128-бітний ключ у вигляді шістнадцяткового рядка. <br "
+"/>Цей список використовується для відображення <abbr title=\"ідентифікатор "
+"власника ключа R1\">R1KH-ID</abbr> на MAC-адреси призначення при передаванні "
+"ключа PMK-R1 від <abbr title=\"власник ключа R0\">R0KH</abbr>. Це також список "
+"авторизованих <abbr title=\"власник ключа R1\">R1KH</abbr> у формі <abbr title"
+"=\"Message Digest — дайджест повідомлення\">MD</abbr>, які можуть запитувати "
+"ключі PMK-R1."
msgid "List of SSH key files for auth"
msgstr ""
msgid "List of domains to allow RFC1918 responses for"
-msgstr "Список доменів, для яких дозволені RFC1918-відповіді"
+msgstr "Список доменів, для яких дозволено RFC1918-відповіді"
msgid "List of hosts that supply bogus NX domain results"
msgstr "Список доменів, які підтримують результати підробки NX-доменів"
msgid "Listen Interfaces"
-msgstr ""
+msgstr "Інтерфейси прослуховування"
msgid "Listen Port"
-msgstr ""
+msgstr "Порти прослуховування"
msgid "Listen only on the given interface or, if unspecified, on all"
msgstr ""
msgstr "Локальна адреса IPv6"
msgid "Local Service Only"
-msgstr ""
+msgstr "Тільки локальна служба"
msgid "Local Startup"
msgstr "Локальний запуск"
msgid "Local domain"
msgstr "Локальний домен"
-#, fuzzy
msgid ""
"Local domain specification. Names matching this domain are never forwarded "
"and are resolved from DHCP or hosts files only"
msgstr ""
-"Специфікація локальних доменів. Імена, зіставлені цьому домену, ніколи не "
-"спрямовуються і виділяються тільки через DHCP або файли hosts"
+"Специфікація локального домену. Імена, які зіставлено цьому домену, ніколи "
+"не пересилаються і вирізняються тільки з файлу DHCP (/etc/config/dhcp) або "
+"файлу hosts (/etc/hosts)"
msgid "Local domain suffix appended to DHCP names and hosts file entries"
msgstr ""
"Localise hostname depending on the requesting subnet if multiple IPs are "
"available"
msgstr ""
-"Локалізувати ім'я хоста залежно від запитуючої підмережі, якщо доступні "
+"Локалізувати ім’я хоста залежно від запитуючої підмережі, якщо доступно "
"кілька IP-адрес"
msgid "Localise queries"
msgstr "Мбіт/с"
msgid "Memory"
-msgstr "Пам'ять"
+msgstr "Пам’ять"
msgid "Memory usage (%)"
-msgstr "Використання пам'яті, %"
+msgstr "Використання пам’яті, %"
msgid "Mesh Id"
-msgstr ""
+msgstr "Mesh Id"
msgid "Metric"
msgstr "Метрика"
msgid "Mirror monitor port"
-msgstr ""
+msgstr "Дзеркало порту диспетчера"
msgid "Mirror source port"
-msgstr ""
+msgstr "Дзеркало вихідного порту"
msgid "Missing protocol extension for proto %q"
msgstr "Відсутні розширення для протоколу %q"
msgid "Mobility Domain"
-msgstr ""
+msgstr "Домен мобільності"
msgid "Mode"
msgstr "Режим"
msgid "Model"
-msgstr ""
+msgstr "Модель"
msgid "Modem device"
msgstr "Модем"
msgstr "Тайм-аут ініціалізації модему"
msgid "Monitor"
-msgstr "Ð\9cонÑ\96Ñ\82ор"
+msgstr "Ð\94иÑ\81пеÑ\82Ñ\87ер"
msgid "Mount Entry"
msgstr "Вхід монтування"
msgstr "Точки монтування"
msgid "Mount Points - Mount Entry"
-msgstr "Точки монтування - Записи монтування"
+msgstr "Точки монтування – Записи монтування"
msgid "Mount Points - Swap Entry"
-msgstr "Точки монтування - Вхід довантаження"
+msgstr "Точки монтування – Вхід свопу"
msgid ""
"Mount Points define at which point a memory device will be attached to the "
"filesystem"
msgstr ""
-"Точки монтування визначають, до якої точки пристрою пам'яті буде прикріплена "
-"файлова система"
+"Точки монтування визначають, до якої точки пристрою пам’яті буде прикріплено "
+"файлову систему"
msgid "Mount filesystems not specifically configured"
-msgstr ""
+msgstr "Монтувати не конкретно налаштовані файлові системи"
msgid "Mount options"
msgstr "Опції монтування"
msgstr "Точка монтування"
msgid "Mount swap not specifically configured"
-msgstr ""
+msgstr "Монтувати не конкретно налаштований своп"
msgid "Mounted file systems"
-msgstr "Змонтовані файлові системи"
+msgstr "Змонтовано файлові системи"
msgid "Move down"
msgstr "Вниз"
msgstr ""
msgid "NTP server candidates"
-msgstr "Кандидати для синхронізації NTP-сервера"
+msgstr "Кандидати для синхронізації сервера NTP"
msgid "Name"
-msgstr "Ім'я"
+msgstr "Ім’я"
msgid "Name of the new interface"
-msgstr "Ім'я нового інтерфейсу"
+msgstr "Ім’я нового інтерфейсу"
msgid "Name of the new network"
-msgstr "Назва (ім'я) нової мережі"
+msgstr "Назва (ім’я) нової мережі"
msgid "Navigation"
msgstr "Навігація"
msgstr "Наступний »"
msgid "No DHCP Server configured for this interface"
-msgstr "Немає DHCP-сервера, настроєного для цього інтерфейсу"
+msgstr "Немає DHCP-сервера, налаштованого для цього інтерфейсу"
msgid "No NAT-T"
msgstr ""
msgstr "Ніяких негативних кешувань"
msgid "No network configured on this device"
-msgstr "На цьому пристрої нема настроєної мережі"
+msgstr "На цьому пристрої немає налаштованої мережі"
msgid "No network name specified"
-msgstr "Ім'я мережі не визначене"
+msgstr "Ім’я мережі не визначено"
msgid "No package lists available"
msgstr "Немає доступних списків пакетів"
msgstr "У цьму ланцюжку нема правил"
msgid "No zone assigned"
-msgstr "Зона не призначена"
+msgstr "Зону не призначено"
msgid "Noise"
msgstr "Шум"
msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Співвідношення сигнал/шум"
msgid "Noise:"
msgstr "Шум:"
msgid "Non Pre-emtive CRC errors (CRC_P)"
-msgstr ""
+msgstr "Не запобіжні помилки CRC (CRC_P)"
msgid "Non-wildcard"
-msgstr ""
+msgstr "Без шаблону заміни"
msgid "None"
msgstr "Жоден"
msgstr "Не знайдено"
msgid "Not associated"
-msgstr "Не пов'язаний"
+msgstr "Не пов’язаний"
msgid "Not connected"
msgstr "Не підключено"
msgid "Note: Configuration files will be erased."
-msgstr "Примітка: конфігураційні файли будуть видалені."
+msgstr "Примітка: конфігураційні файли буде видалено."
msgid "Note: interface name length"
-msgstr ""
+msgstr "Примітка: довжина імені інтерфейсу"
msgid "Notice"
msgstr "Попередження"
msgstr "DNS-запит"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
-msgstr ""
+msgstr "Кількість кешованих записів DNS (макс. - 10000, 0 - без кешування)"
msgid "OK"
msgstr "OK"
msgstr "Конфігурація OPKG"
msgid "Obfuscated Group Password"
-msgstr ""
+msgstr "Обфусований груповий пароль"
msgid "Obfuscated Password"
-msgstr ""
+msgstr "Обфусований пароль"
msgid "Obtain IPv6-Address"
-msgstr ""
+msgstr "Отримати IPv6-адресу"
msgid "Off-State Delay"
msgstr "Затримка Off-State"
"<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: "
"<samp>eth0.1</samp>)."
msgstr ""
-"На цій сторінці ви можете настроїти мережеві інтерфейси. Ви можете "
-"об'єднатиати кілька інтерфейсів мостом, відзначивши поле \"Об'єднати "
-"інтерфейси в міст\" та ввівши імена кількох мережевих інтерфейсів, розділені "
-"пÑ\80обÑ\96лами. Також ви можеÑ\82е викоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и <abbr title=\"Virtual Local Area "
-"Network — віртуальна локальна комп'ютерна мережа\">VLAN</abbr>-позначення "
-"<samp>ІНТЕРФЕЙС.НОМЕР_VLAN</samp> (наприклад, <samp>eth0.1</samp>)."
+"На цій сторінці ви можете налаштувати мережеві інтерфейси. Ви можете "
+"об’єднати кілька інтерфейсів мостом, відзначивши поле \"Об’єднати інтерфейси "
+"в міст\" та ввівши імена кількох мережевих інтерфейсів, розділені пробілами. "
+"Також ви можеÑ\82е викоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и <abbr title=\"Virtual Local Area Network â\80\94 "
+"віртуальна локальна комп’ютерна мережа\">VLAN</abbr>-позначення <samp>"
+"ІНТЕРФЕЙС.НОМЕР_VLAN</samp> (наприклад, <samp>eth0.1</samp>)."
msgid "On-State Delay"
msgstr "Затримка On-State"
msgid "One of hostname or mac address must be specified!"
-msgstr "Ð\9cаÑ\94 бÑ\83Ñ\82и вказане одне з двоÑ\85 - Ñ\96м'я вузла або МАС-адреса!"
+msgstr "Ð\9cаÑ\94 бÑ\83Ñ\82и зазнаÑ\87ено одне з двоÑ\85 â\80\93 Ñ\96мâ\80\99я вузла або МАС-адреса!"
msgid "One or more fields contain invalid values!"
msgstr "Одне або декілька полів містять неприпустимі значення!"
msgstr ""
msgid "One or more required fields have no value!"
-msgstr "Одне або декілька обов'язкових полів не мають значень!"
+msgstr "Одне або декілька обов’язкових полів не мають значень!"
msgid "Open list..."
msgstr "Відкрити список..."
msgstr ""
msgid "Operating frequency"
-msgstr ""
+msgstr "Робоча частота"
msgid "Option changed"
msgstr "Опція змінена"
msgstr "Опція видалена"
msgid "Optional"
-msgstr ""
+msgstr "Необов’язково"
msgid ""
"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
"starting with <code>0x</code>."
msgstr ""
+"Необов’язково. 32-бітна мітка для вихідних зашифрованих пакетів. Введіть "
+"значення в шістнадцятковому форматі, починаючи з <code>0x</code>."
msgid ""
"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
"for the interface."
msgstr ""
+"Необов’язково. Припустимі значення: 'eui64', 'random' чи фіксоване значення, "
+"наприклад '::1' або '::1:2'. Якщо префікс IPv6 (наприклад, 'a:b:c:d::') "
+"отримано від сервера делегування, для формування IPv6-адреси інтерфейсу "
+"(наприклад, 'a:b:c:d::1') використовуйте суфікс ('::1')."
msgid ""
"Optional. Base64-encoded preshared key. Adds in an additional layer of "
"symmetric-key cryptography for post-quantum resistance."
msgstr ""
+"Необов’язково. Заздалегідь установлений Base64-кодований спільний ключ. "
+"Додавання додатково рівня шифрування із симетричним ключем для пост-квантової "
+"стійкості."
msgid "Optional. Create routes for Allowed IPs for this peer."
-msgstr ""
+msgstr "Необов’язково. Створити для цього вузла маршрути для дозволених IP"
msgid ""
"Optional. Host of peer. Names are resolved prior to bringing up the "
"interface."
msgstr ""
+"Необов’язково. Хост вузла. Імена буде виділено до підняття інтерфейсу"
msgid "Optional. Maximum Transmission Unit of tunnel interface."
msgstr ""
+"Необов’язково. Максимальний блок передаваних даних тунельного інтерфейсу."
msgid "Optional. Port of peer."
-msgstr ""
+msgstr "Необов’язково. Порт вузла."
msgid ""
"Optional. Seconds between keep alive messages. Default is 0 (disabled). "
msgid "Optional. UDP port used for outgoing and incoming packets."
msgstr ""
+"Необов’язково. UDP-порт, який використовується для вихідних та вхідних "
+"пакетів."
msgid "Options"
msgstr "Опції"
msgstr "Вихідний:"
msgid "Output Interface"
-msgstr ""
+msgstr "Вихідний інтерфейс"
msgid "Override MAC address"
msgstr "Перевизначити MAC-адресу"
msgstr "Перевизначити MTU"
msgid "Override TOS"
-msgstr ""
+msgstr "Перевизначити TOS"
msgid "Override TTL"
-msgstr ""
+msgstr "Перевизначити TTL"
msgid "Override default interface name"
-msgstr ""
+msgstr "Перевизначення типового імені інтерфейсу"
msgid "Override the gateway in DHCP responses"
msgstr "Перевизначення шлюзу у відповідях DHCP"
msgstr "Пароль PAP/CHAP"
msgid "PAP/CHAP username"
-msgstr "Ім'я користувача PAP/CHAP"
+msgstr "Ім’я користувача PAP/CHAP"
msgid "PID"
msgstr "<abbr title=\"Process Identifier — Ідентифікатор процесу\">PID</abbr>"
"номер\">>PIN</abbr>"
msgid "PMK R1 Push"
-msgstr ""
+msgstr "Проштовхуваня PMK R1"
msgid "PPP"
msgstr "PPP"
msgstr "Пароль закритого ключа"
msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Пароль внутрішнього закритого ключа"
msgid "Password successfully changed!"
msgstr "Пароль успішно змінено!"
msgid "Password2"
-msgstr ""
+msgstr "Пароль2"
msgid "Path to CA-Certificate"
msgstr "Шлях до центру сертифікції"
msgstr "Шлях до закритого ключа"
msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "Шлях до внутрішнього CA-сертифікату"
msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "Шлях до внутрішнього сертифікату клієнта"
msgid "Path to inner Private Key"
-msgstr ""
+msgstr "Шлях до внутрішнього закритого ключа"
msgid "Peak:"
msgstr "Пік:"
msgid "Peer IP address to assign"
-msgstr ""
+msgstr "Запит IP-адреси призначення"
msgid "Peers"
-msgstr ""
+msgstr "Піри"
msgid "Perfect Forward Secrecy"
-msgstr ""
+msgstr "Perfect Forward Secrecy"
msgid "Perform reboot"
msgstr "Виконати перезавантаження"
msgstr "Відновити"
msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "Завжди тримати ввімкненим"
msgid "Phy Rate:"
msgstr "Фізична швидкість:"
msgstr "пакетів"
msgid "Please enter your username and password."
-msgstr "Введіть ім'я користувача і пароль"
+msgstr "Введіть ім’я користувача і пароль"
msgid "Policy"
msgstr "Політика"
msgstr "Порт"
msgid "Port status:"
-msgstr "Статус порту:"
+msgstr "Стан порту:"
msgid "Power Management Mode"
-msgstr ""
+msgstr "Режим керування живленням"
msgid "Pre-emtive CRC errors (CRCP_P)"
-msgstr ""
+msgstr "Попереджувати помилки CRC (CRCP_P)"
msgid "Prefer LTE"
-msgstr ""
+msgstr "Переважно LTE"
msgid "Prefer UMTS"
-msgstr ""
+msgstr "Переважно UMTS"
msgid "Prefix Delegated"
-msgstr ""
+msgstr "Делеговано префікс"
msgid "Preshared Key"
-msgstr ""
+msgstr "Заздалегідь установлений спільний ключ"
msgid ""
"Presume peer to be dead after given amount of LCP echo failures, use 0 to "
"пакета LCP, використовуйте 0, щоб ігнорувати невдачі"
msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Перешкоджати прослуховуванню цих інтерфейсів"
msgid "Prevents client-to-client communication"
-msgstr "Ð\97апобÑ\96гаÑ\94 зв'Ñ\8fзкам клієнт-клієнт"
+msgstr "Ð\9fеÑ\80еÑ\88коджаÑ\82и Ñ\81пÑ\96лкÑ\83ваннÑ\8e клієнт-клієнт"
msgid "Prism2/2.5/3 802.11b Wireless Controller"
msgstr "Бездротовий 802.11b контролер Prism2/2.5/3"
msgstr "Підтримка протоколу не інстальована"
msgid "Provide NTP server"
-msgstr "Забезпечувати NTP-сервер"
+msgstr "Забезпечувати сервер NTP"
msgid "Provide new network"
-msgstr "Ð\9fоÑ\81Ñ\82аÑ\87иÑ\82и нову мережу"
+msgstr "УкажÑ\96Ñ\82Ñ\8c нову мережу"
msgid "Pseudo Ad-Hoc (ahdemo)"
msgstr "Псевдо Ad-Hoc (ahdemo)"
msgstr "Якість"
msgid "R0 Key Lifetime"
-msgstr ""
+msgstr "Тривалість життя ключа R0"
msgid "R1 Key Holder"
-msgstr ""
+msgstr "Власник ключа R1"
msgid "RFC3947 NAT-T mode"
msgstr ""
"Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host "
"Configuration Protocol\">DHCP</abbr>-Server"
msgstr ""
-"Читати <code>/etc/ethers</code> для настроювання <abbr title=\"Dynamic Host "
+"Читати <code>/etc/ethers</code> для налаштування <abbr title=\"Dynamic Host "
"Configuration Protocol — Протокол динамічної конфігурації вузла\">DHCP</"
"abbr>-сервера"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
-"Дійсно видалити цей інтерфейс? Скасувати видалення неможливо!\n"
-"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цей "
-"інтерфейс."
+"Дійсно видалити цей інтерфейс? Скасувати видалення неможливо! Ви можете "
+"втратити доступ до цього пристрою, якщо вас підключено через цей інтерфейс."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
-"Дійсно видалити цю бездротову мережу? Скасувати видалення неможливо!\n"
-"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цю "
-"мережу."
+"Дійсно видалити цю бездротову мережу? Скасувати видалення неможливо! Ви "
+"можете втратити доступ до цього пристрою, якщо вас підключено через цю мережу."
msgid "Really reset all changes?"
msgstr "Дійсно скинути всі зміни?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
-"Дійсно вимкнути мережу?\n"
-"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цю "
-"мережу."
+"Дійсно вимкнути мережу? Ви можете втратити доступ до цього пристрою, якщо вас "
+"підключено через цю мережу."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"Дійсно вимкнути інтерфейс \"%s\"?\n"
-"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цей "
-"інтерфейс."
+"Дійсно вимкнути інтерфейс \"%s\"? Ви можете втратити доступ до цього "
+"пристрою, якщо вас підключено через цей інтерфейс."
msgid "Really switch protocol?"
msgstr "Дійсно змінити протокол?"
msgstr "Бездротові мережі у реальному часі"
msgid "Reassociation Deadline"
-msgstr ""
+msgstr "Кінцевий термін реассоціації"
msgid "Rebind protection"
-msgstr "Захист від переприв'язки"
+msgstr "Захист від переприв’язки"
msgid "Reboot"
msgstr "Перезавантаження"
msgstr "Перезавантажити операційну систему вашого пристрою"
msgid "Receive"
-msgstr "Ð\9fÑ\80ийом"
+msgstr "Ð\9fÑ\80ийманнÑ\8f"
msgid "Receiver Antenna"
msgstr "Антена приймача"
msgstr "Замінити конфігурацію бездротової мережі"
msgid "Request IPv6-address"
-msgstr ""
+msgstr "Запит IPv6-адреси"
msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "Запит довжини IPv6-префіксу"
msgid "Required"
-msgstr ""
+msgstr "Потрібно"
msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
msgstr "Потрібно для деяких провайдерів, наприклад, Charter із DOCSIS 3"
msgid "Required. Base64-encoded private key for this interface."
-msgstr ""
+msgstr "Потрібно. Base64-закодований закритий ключ для цього інтерфейсу."
msgid "Required. Base64-encoded public key of peer."
-msgstr ""
+msgstr "Потрібно. Base64-закодований публічний ключ вузла"
msgid ""
"Required. IP addresses and prefixes that this peer is allowed to use inside "
"Requires the 'full' version of wpad/hostapd and support from the wifi driver "
"<br />(as of Feb 2017: ath9k and ath10k, in LEDE also mwlwifi and mt76)"
msgstr ""
+"Потребує \"повної\" версії wpad/hostapd та підтримки драйвером WiFi <br />"
+"(станом на лютий 2017 року: ath9k та ath10k, у LEDE також mwlwifi та mt76)"
msgid ""
"Requires upstream supports DNSSEC; verify unsigned domain responses really "
msgstr "Показати/приховати пароль"
msgid "Revert"
-msgstr "Скасувати зміни"
+msgstr "Скасувати"
msgid "Revert changes"
-msgstr ""
+msgstr "Скасувати зміни"
msgid "Revert request failed with status <code>%h</code>"
-msgstr ""
+msgstr "Сталася помилка запиту на скасування зі статусом <code>%h</code>"
msgid "Reverting configuration…"
-msgstr ""
+msgstr "Відкат конфігурації…"
msgid "Root"
msgstr "Корінь"
msgstr "Кореневий каталог для файлів TFTP"
msgid "Root preparation"
-msgstr ""
+msgstr "Підготовка Root"
msgid "Route Allowed IPs"
-msgstr ""
+msgstr "Маршрутизація дозволених IP-адрес"
msgid "Route type"
-msgstr ""
+msgstr "Тип маршруту"
msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Служба оголошень маршрутизатора"
msgid "Router Password"
msgstr "Пароль маршрутизатора"
msgstr "Розділяти клієнтів"
msgid "Server Settings"
-msgstr "Настройки сервера"
+msgstr "Налаштування сервера"
msgid "Service Name"
-msgstr "Назва (ім'я) сервісу"
+msgstr "Назва (ім’я) сервісу"
msgid "Service Type"
msgstr "Тип сервісу"
"Set interface properties regardless of the link carrier (If set, carrier "
"sense events do not invoke hotplug handlers)."
msgstr ""
+"Властивості інтерфейсу встановлюються незалежно від каналу зв’язку (якщо "
+"позначено, обробник автовизначення не викликається при змінах)."
-#, fuzzy
msgid "Set up Time Synchronization"
-msgstr "Настройки синхронізації часу"
+msgstr "Налаштування синхронізації часу"
msgid "Setup DHCP Server"
-msgstr "Настройки DHCP-сервера"
+msgstr "Налаштування DHCP-сервера"
msgid "Severely Errored Seconds (SES)"
msgstr ""
msgstr ""
msgid "Size of DNS query cache"
-msgstr ""
+msgstr "Розмір кешу запитів DNS"
msgid "Skip"
msgstr "Пропустити"
msgstr "Деякі поля є неприпустимими, неможливо зберегти значення!"
msgid "Sorry, the object you requested was not found."
-msgstr "На жаль, об'єкт, який ви просили, не знайдено."
+msgstr "На жаль, об’єкт, який ви просили, не знайдено."
msgid "Sorry, the server encountered an unexpected error."
msgstr "На жаль, на сервері сталася неочікувана помилка."
"flashed manually. Please refer to the wiki for device specific install "
"instructions."
msgstr ""
-"Ð\9dа жалÑ\8c, авÑ\82омаÑ\82иÑ\87не оновленнÑ\8f Ñ\81иÑ\81Ñ\82еми не пÑ\96дÑ\82Ñ\80имÑ\83Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f. Ð\9dовий обÑ\80аз "
-"прошивки повинен бути залитий вручну. Зверніться до Wiki за інструкцією з "
-"інсталяції для конкретного пристрою."
+"Ð\9dа жалÑ\8c, оновленнÑ\8f Ñ\81иÑ\81Ñ\82еми не пÑ\96дÑ\82Ñ\80имÑ\83Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f. Ð\9dовий обÑ\80аз мÑ\96кÑ\80опÑ\80огÑ\80ами "
+"слід прошити вручну. Зверніться до Wiki за інструкцією з інсталяції "
+"для конкретного пристрою."
msgid "Sort"
msgstr "Сортування"
msgstr "Стартовий пріоритет"
msgid "Starting configuration apply…"
-msgstr ""
+msgstr "Застосовується стартова конфігурація…"
msgid "Startup"
msgstr "Запуск"
msgstr "Статичні маршрути"
msgid "Static address"
-msgstr "Статичні адреси"
+msgstr "Статична адреса"
msgid ""
"Static leases are used to assign fixed IP addresses and symbolic hostnames "
"орендою."
msgid "Status"
-msgstr "Статус"
+msgstr "Стан"
msgid "Stop"
msgstr "Зупинити"
msgstr "Надіслати"
msgid "Suppress logging"
-msgstr ""
+msgstr "Блокувати журналювання"
msgid "Suppress logging of the routine operation of these protocols"
-msgstr ""
+msgstr "Блокувати ведення журналу звичайної роботи цих протоколів"
msgid "Swap"
-msgstr ""
+msgstr "Своп"
msgid "Swap Entry"
-msgstr "Вхід довантаження"
+msgstr "Вхід своп"
msgid "Switch"
msgstr "Комутатор"
msgid ""
"Switch %q has an unknown topology - the VLAN settings might not be accurate."
msgstr ""
+"Комутатор %q має невідому топологію – параметри VLAN можуть бути неправильними"
msgid "Switch Port Mask"
-msgstr ""
+msgstr "Маска портів комутатора"
msgid "Switch VLAN"
-msgstr ""
+msgstr "VLAN комутатора"
msgid "Switch protocol"
msgstr "Протокол комутатора"
msgstr "TCP:"
msgid "TFTP Settings"
-msgstr "Настройки TFTP"
+msgstr "Налаштування TFTP"
msgid "TFTP server root"
msgstr "Корінь TFTP-сервера"
"multi-SSID capable). Per network settings like encryption or operation mode "
"are grouped in the <em>Interface Configuration</em>."
msgstr ""
-"Розділ <em>Конфігурація пристрою</em> охоплює фізичні параметри радіо-"
-"апаратних засобів, такі, як канал, потужність передавача або вибір антени, "
-"які є спільними для всіх визначених бездротових мереж (якщо радіо-апаратні "
+"Розділ <em>Конфігурація пристрою</em> охоплює фізичні параметри апаратних "
+"радіо-засобів, такі, як канал, потужність передавача або вибір антени, "
+"які є спільними для всіх визначених бездротових мереж (якщо апаратні радіо-"
"засоби здатні підтримувати кілька SSID). Параметри окремих мереж, такі, як "
-"шифрування або режим роботи, згруповані в розділі <em>Конфігурація "
+"шифрування або режим роботи, згруповано в розділі <em>Конфігурація "
"інтерфейсу</em>."
msgid ""
"component for working wireless configuration!"
msgstr ""
"Пакет <em>libiwinfo-lua</em> не інстальований. Щоб мати можливість "
-"настроювати безпровідні мережі, слід інсталювати цей компонент!"
+"налаштувати безпровідні мережі, слід інсталювати цей компонент!"
msgid ""
"The HE.net endpoint update configuration changed, you must now use the plain "
msgid ""
"The IPv6 prefix assigned to the provider, usually ends with <code>::</code>"
msgstr ""
-"Призначений провайдеру IPv6-префікс, зазвичай закінчується на <code>::</code>"
+"Призначений провайдером IPv6-префікс, зазвичай закінчується на <code>::</code>"
msgid ""
"The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
"code> and <code>_</code>"
msgstr ""
-"Дозволені символи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та "
+"Дозволено символи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та "
"<code>_</code>"
msgid "The configuration file could not be loaded due to the following error:"
"or revert all pending changes to keep the currently working configuration "
"state."
msgstr ""
+"Пристрій недосяжний протягом %d секунд після застосування очікуючих змін, що "
+"призвело до відкочування конфигурації з міркувань безпеки. Проте, якщо ви "
+"впевнені, що зміни конфігурації є правильними, застосуйте неперевірену "
+"конфігурацію. Крім того, ви можете відхилити це попередження та відредагувати "
+"зміни, перш ніж намагатись застосувати їх знову, або ж скасувати всі очікуючі "
+"зміни, щоб зберегти поточну робочу конфігурацію."
msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
-msgstr "Файл пристрою пам'яті або розділу (наприклад, <code>/dev/sda1</code>)"
+msgstr "Файл пристрою пам’яті або розділу (наприклад, <code>/dev/sda1</code>)"
msgid ""
"The filesystem that was used to format the memory (<abbr title=\"for example"
"\">e.g.</abbr> <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></"
"samp>)"
msgstr ""
-"Файлова система, яка використовуватиметься для форматування пам'яті "
+"Файлова система, яка використовуватиметься для форматування пам’яті "
"(наприклад, <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></"
"samp>)"
"compare them with the original file to ensure data integrity.<br /> Click "
"\"Proceed\" below to start the flash procedure."
msgstr ""
-"Ð\9eбÑ\80аз заванÑ\82ажено. Ð\9dижÑ\87е наведено конÑ\82Ñ\80олÑ\8cнÑ\83 Ñ\81Ñ\83мÑ\83 Ñ\96 розмір файлу. Порівняйте "
-"їх з вихідним файлом для забезпечення цілісності даних.<br /> Натисніть "
-"\"Ð\9fÑ\80одовжиÑ\82и\", Ñ\89об Ñ\80озпоÑ\87аÑ\82и пÑ\80оÑ\86едÑ\83Ñ\80Ñ\83 оновленнÑ\8f пÑ\80оÑ\88ивки."
+"Ð\9eбÑ\80аз заванÑ\82ажено. Ð\9dижÑ\87е наведено конÑ\82Ñ\80олÑ\8cнÑ\83 Ñ\81Ñ\83мÑ\83 Ñ\82а розмір файлу. Порівняйте "
+"їх з вихідним файлом, шоб переконатися в цілісності даних.<br /> Натисніть "
+"\"Ð\9fÑ\80одовжиÑ\82и\", Ñ\89об Ñ\80озпоÑ\87аÑ\82и пÑ\80оÑ\86едÑ\83Ñ\80Ñ\83 пÑ\80оÑ\88иваннÑ\8f."
msgid "The following changes have been reverted"
-msgstr "Ð\9dижÑ\87е наведенÑ\96 змÑ\96ни бÑ\83ли Ñ\81каÑ\81ованÑ\96"
+msgstr "Ð\9dаведенÑ\96 нижÑ\87е змÑ\96ни бÑ\83ло Ñ\81каÑ\81овано"
msgid "The following rules are currently active on this system."
-msgstr "У даний Ñ\87аÑ\81 Ñ\83 цій системі активні такі правила."
+msgstr "Ð\9dаÑ\80азÑ\96 в цій системі активні такі правила."
msgid "The given network name is not unique"
-msgstr "Задане мережеве ім'я не є унікальним"
+msgstr "Задане мережеве ім’я не є унікальним"
#, fuzzy
msgid ""
"segments. Often there is by default one Uplink port for a connection to the "
"next greater network like the internet and other ports for a local network."
msgstr ""
-"Мережеві порти вашого пристрою можуть бути об'єднані у декілька <abbr title="
-"\"Virtual Local Area Network — віртуальна локальна комп'ютерна мережа"
-"\">VLAN</abbr>, у яких комп'ютери можуть напряму спілкуватися один з одним. "
-"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп'ютерна "
+"Мережеві порти вашого пристрою може бути об’єднано у декілька <abbr title="
+"\"Virtual Local Area Network — віртуальна локальна комп’ютерна мережа"
+"\">VLAN</abbr>, у яких комп’ютери можуть напряму спілкуватися один з одним. "
+"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп’ютерна "
"мережа\">VLAN</abbr> часто використовуються для розділення мережі на окремі "
-"сегменти. Зазвичай один виcхідний порт використовується для з'єднання з "
+"сегменти. Зазвичай один виcхідний порт використовується для з’єднання з "
"більшою мережею, такою наприклад, як Інтернет, а інші порти — для локальної "
"мережі."
msgstr ""
"Система перепрошивається.<br /> <strong>НЕ ВИМИКАЙТЕ ЖИВЛЕННЯ ПРИСТРОЮ!</"
"strong><br /> Зачекайте кілька хвилин перед тим, як пробувати знову "
-"з'Ñ\94днаÑ\82иÑ\81Ñ\8f. Ð\97алежно вÑ\96д ваÑ\88иÑ\85 наÑ\81Ñ\82Ñ\80ойок, можливо, вам треба буде оновити "
-"адресу вашого комп'ютера, щоб знову отримати доступ до пристрою."
+"пÑ\96дâ\80\99Ñ\94днаÑ\82иÑ\81Ñ\8f. Ð\97алежно вÑ\96д налаÑ\88Ñ\82Ñ\83ванÑ\8c, можливо, треба буде оновити "
+"адресу вашого комп’ютера, щоб знову отримати доступ до пристрою."
msgid ""
"The uploaded image file does not contain a supported format. Make sure that "
msgstr "Активних оренд немає."
msgid "There are no changes to apply."
-msgstr ""
+msgstr "Немає жодних змін до застосування!"
msgid "There are no pending changes to revert!"
-msgstr "Немає жодних змін до скасування!"
+msgstr "Ð\9dемаÑ\94 жодниÑ\85 оÑ\87Ñ\96кÑ\83Ñ\8eÑ\87иÑ\85 змÑ\96н до Ñ\81каÑ\81Ñ\83ваннÑ\8f!"
msgid "There are no pending changes!"
msgstr "Немає жодних очікуючих змін!"
"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
"Name System\">DNS</abbr> servers."
msgstr ""
+"Цей файл може містити такі рядки, як 'server=/domain/1.2.3.4' або 'server="
+"1.2.3.4' для домен-орієнтованих або повних висхідних <abbr title=\"Domain "
+"Name System\">DNS</abbr>-серверів."
msgid ""
"This is a list of shell glob patterns for matching files and directories to "
"This is either the \"Update Key\" configured for the tunnel or the account "
"password if no update key has been configured"
msgstr ""
+"Це або \"Update Key\", сконфігурований для тунелю, або пароль облікового "
+"запису, якщо ключ оновлення не налаштовано"
msgid ""
"This is the content of /etc/rc.local. Insert your own commands here (in "
"This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>...:2/64</code>"
msgstr ""
-"Це локальна адреса кінцевої точки, присвоєна тунельним брокером, зазвичай "
-"закÑ\96нÑ\87Ñ\83Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f на <code>...:2/64</code>"
+"Це локальна адреса кінцевої точки, яку присвоєно тунельним брокером, "
+"вона зазвиÑ\87ай закÑ\96нÑ\87Ñ\83Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f на <code>â\80¦:2/64</code>"
msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
"динамічної конфігурації вузла\">DHCP</abbr> у локальній мережі"
msgid "This is the plain username for logging into the account"
-msgstr ""
+msgstr "Це звичайне ім’я користувача для входу до облікового запису"
msgid ""
"This is the prefix routed to you by the tunnel broker for use by clients"
msgstr ""
+"Це префікс, що надсилається до вас тунельним брокером для використання "
+"клієнтами"
msgid "This is the system crontab in which scheduled tasks can be defined."
msgstr ""
msgid ""
"This is usually the address of the nearest PoP operated by the tunnel broker"
msgstr ""
-"Зазвичай, це адреса найближчої точки присутності, що управляється тунелним "
+"Зазвичай, це адреса найближчої точки присутності, що управляється тунельним "
"брокером"
msgid ""
"This list gives an overview over currently running system processes and "
"their status."
msgstr ""
-"У цьому списку наведені працюючі на даний момент системні процеси та їх "
-"статус."
+"У цьому списку наведено працюючі наразі системні процеси та їх стан."
msgid "This page gives an overview over currently active network connections."
msgstr "Ця сторінка надає огляд поточних активних мережних підключень."
msgstr "Синхронізація часу"
msgid "Time Synchronization is not configured yet."
-msgstr "СинÑ\85Ñ\80онÑ\96заÑ\86Ñ\96Ñ\8f Ñ\87аÑ\81Ñ\83 не наÑ\81Ñ\82Ñ\80оÑ\94на."
+msgstr "СинÑ\85Ñ\80онÑ\96заÑ\86Ñ\96Ñ\8e Ñ\87аÑ\81Ñ\83 не налаÑ\88Ñ\82овано."
msgid "Timezone"
msgstr "Часовий пояс"
"архів резервної копії."
msgid "Tone"
-msgstr ""
+msgstr "Тоновий"
msgid "Total Available"
msgstr "Усього доступно"
msgstr "Швидкість передавання"
msgid "Transmit"
-msgstr "Передача"
+msgstr "Передавання"
msgid "Transmit Power"
msgstr "Потужність передавача"
msgstr "Інтерфейс тунелю"
msgid "Tunnel Link"
-msgstr ""
+msgstr "Посилання тунелю"
msgid "Tx-Power"
msgstr "Потужність передавача"
msgstr "USB-пристрій"
msgid "USB Ports"
-msgstr ""
+msgstr "USB-порт"
msgid "UUID"
msgstr "UUID"
msgstr "Не вдалося опрацювати запит"
msgid "Unavailable Seconds (UAS)"
-msgstr ""
+msgstr "Недоступні секунди (<abbr title=\"Unavailable Seconds\">UAS</abbr>)"
msgid "Unknown"
msgstr "Невідомо"
msgstr "Некерований"
msgid "Unmount"
-msgstr ""
+msgstr "Демонтувати"
msgid "Unsaved Changes"
msgstr "Незбережені зміни"
"Check \"Keep settings\" to retain the current configuration (requires a "
"compatible firmware image)."
msgstr ""
-"Ð\92Ñ\96дванÑ\82ажиÑ\82и sysupgrade-Ñ\81Ñ\83мÑ\96Ñ\81ний обÑ\80аз, Ñ\89об замÑ\96ниÑ\82и поÑ\82оÑ\87нÑ\83 пÑ\80оÑ\88ивкÑ\83. Ð\94лÑ\8f "
-"збеÑ\80еженнÑ\8f поÑ\82оÑ\87ноÑ\97 конÑ\84Ñ\96гÑ\83Ñ\80аÑ\86Ñ\96Ñ\97 вÑ\81Ñ\82ановÑ\96Ñ\82Ñ\8c пÑ\80апоÑ\80еÑ\86Ñ\8c \"Ð\97беÑ\80егÑ\82и наÑ\81Ñ\82Ñ\80ойки"
-"\" (потрібен сумісний образ прошивки)."
+"Ð\92Ñ\96дванÑ\82ажиÑ\82и sysupgrade-Ñ\81Ñ\83мÑ\96Ñ\81ний обÑ\80аз, Ñ\89об замÑ\96ниÑ\82и поÑ\82оÑ\87нÑ\83 мÑ\96кÑ\80опÑ\80огÑ\80амÑ\83. "
+"Ð\94лÑ\8f збеÑ\80еженнÑ\8f поÑ\82оÑ\87ноÑ\97 конÑ\84Ñ\96гÑ\83Ñ\80аÑ\86Ñ\96Ñ\97 вÑ\81Ñ\82ановÑ\96Ñ\82Ñ\8c пÑ\80апоÑ\80еÑ\86Ñ\8c \"Ð\97беÑ\80егÑ\82и "
+"налаштування\" (потрібен сумісний образ мікропрограми)."
msgid "Upload archive..."
msgstr "Відвантажити архів..."
msgstr "Використовувати на тунельному інтерфейсі TTL"
msgid "Use as external overlay (/overlay)"
-msgstr ""
+msgstr "Використовувати як зовнішній оверлей (/overlay)"
msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "Використовувати як кореневу файлову систему (/)"
msgid "Use broadcast flag"
msgstr "Використовувати прапорець широкомовності"
msgid "Use builtin IPv6-management"
-msgstr ""
+msgstr "Використовувати вбудоване керування IPv6"
msgid "Use custom DNS servers"
msgstr "Використовувати особливі DNS-сервери"
msgstr ""
"Використовуйте кнопку <em>Додати</em>, щоб додати новий запис оренди. "
"<em>MAC-адреса</em> ідентифікує вузол, <em>IPv4-адреса</em> визначає "
-"фіксовану адресу, яка буде використовуватися, а <em>Назва (ім'я) вузла</em> "
-"призначає символічне ім'я вузла."
+"фіксовану адресу, яка буде використовуватися, а <em>Назва (ім’я) вузла</em> "
+"призначає символічне ім’я вузла."
msgid "Used"
msgstr "Використано"
"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
"needed with normal WPA(2)-PSK."
msgstr ""
+"Використовується для двох різних цілей: RADIUS NAS ID і 802.11r <abbr "
+"title=\"ідентифікатор власника ключа R0\">R0KH-ID</abbr>. Не потрібно за "
+"звичайного WPA(2)-PSK."
msgid "User certificate (PEM encoded)"
-msgstr ""
+msgstr "Сертифікат користувача (PEM-кодований)"
msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "Ключ користувача (PEM-кодований)"
msgid "Username"
-msgstr "Ім'я користувача"
+msgstr "Ім’я користувача"
msgid "VC-Mux"
msgstr "VC-Mux"
msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
msgid "VLANs on %q"
msgstr "VLAN на %q"
msgstr "VLAN на %q (%s)"
msgid "VPN Local address"
-msgstr ""
+msgstr "Локальна адреса VPN"
msgid "VPN Local port"
-msgstr ""
+msgstr "Локальний порт VPN"
msgid "VPN Server"
msgstr "VPN-сервер"
msgid "VPN Server port"
-msgstr ""
+msgstr "Порт VPN-сервера"
msgid "VPN Server's certificate SHA1 hash"
-msgstr ""
+msgstr "SHA1-геш сертифіката VPN-сервера"
msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr ""
+msgstr "VPNC (CISCO 3000 (та інш.) VPN)"
msgid "Vendor"
-msgstr ""
+msgstr "Постачальник"
msgid "Vendor Class to send when requesting DHCP"
msgstr "Клас постачальника для відправки при запиті DHCP"
msgstr "Парольна фраза WEP"
msgid "WMM Mode"
-msgstr "Режим WMM"
+msgstr "Режим <abbr title=\"Wi-Fi Multimedia\">WMM</abbr>"
msgid "WPA passphrase"
msgstr "Парольна фраза WPA"
msgstr "Очікуємо завершення виконання команди..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "Чекаємо на застосування конфігурації… %d c"
msgid "Waiting for device..."
-msgstr ""
+msgstr "Очікуємо пристрій..."
msgid "Warning"
msgstr "Застереження"
msgid "Warning: There are unsaved changes that will get lost on reboot!"
msgstr ""
+"Застереження: Є незбережені зміни, які буде втрачено при перезавантаженні!"
msgid ""
"When using a PSK, the PMK can be generated locally without inter AP "
"communications"
msgstr ""
+"При використанні PSK, PMK може бути створений локально без взаємодії між AP"
msgid "Width"
-msgstr ""
+msgstr "Ширина"
msgid "WireGuard VPN"
-msgstr ""
+msgstr "WireGuard VPN"
msgid "Wireless"
msgstr "Бездротові мережі"
msgstr "Безпека бездротової мережі"
msgid "Wireless is disabled or not associated"
-msgstr "Бездротову мережу вимкнено або не пов'язано"
+msgstr "Бездротову мережу вимкнено або не пов’язано"
msgid "Wireless is restarting..."
msgstr "Бездротова мережа перезапускається..."
msgid "Wireless network is disabled"
-msgstr "Бездротова мережа вимкнена"
+msgstr "Бездротову мережу вимкнено"
msgid "Wireless network is enabled"
-msgstr "Бездротова мережа ввімкнена"
+msgstr "Бездротову мережу ввімкнено"
msgid "Wireless restarted"
-msgstr "Бездротова мережа перезапущена"
+msgstr "Бездротову мережу перезапущено"
msgid "Wireless shut down"
msgstr "Бездротова мережа припинила роботу"
msgstr "Записувати отримані DNS-запити до системного журналу"
msgid "Write system log to file"
-msgstr ""
+msgstr "Записувати cистемний журнал до файлу"
msgid ""
"You can enable or disable installed init scripts here. Changes will applied "
msgid ""
"You must enable JavaScript in your browser or LuCI will not work properly."
msgstr ""
-"Ð\92и повиннÑ\96 Ñ\83вÑ\96мкнÑ\83Ñ\82и JavaScript Ñ\83 ваÑ\88омÑ\83 бÑ\80аÑ\83зеÑ\80Ñ\96, або LuCI не бÑ\83де "
-"пÑ\80аÑ\86Ñ\8eваÑ\82и належним Ñ\87ином."
+"Ð\92ам Ñ\81лÑ\96д Ñ\83вÑ\96мкнÑ\83Ñ\82и JavaScript Ñ\83 ваÑ\88омÑ\83 бÑ\80аÑ\83зеÑ\80Ñ\96, або LuCI не бÑ\83де пÑ\80аÑ\86Ñ\8eваÑ\82и "
+"належним чином."
msgid ""
"Your Internet Explorer is too old to display this page correctly. Please "
"upgrade it to at least version 7 or use another browser like Firefox, Opera "
"or Safari."
msgstr ""
+"Ваш Internet Explorer занадто старий, щоб правильно відобразити цю сторінку. "
+"Поновіть його, принаймні, до версії 7 або скористайтесь іншим браузером, "
+"таким як Firefox, Opera або Safari."
msgid "any"
msgstr "будь-який"
msgstr "baseT"
msgid "bridged"
-msgstr "зв'язано"
+msgstr "зв’язано"
+
+msgid "create"
+msgstr "створити"
msgid "create:"
msgstr "створити:"
msgid "creates a bridge over specified interface(s)"
-msgstr "Створити міст через вказаний інтерфейс(и)"
+msgstr "Створює міст через зазначені інтерфейси"
msgid "dB"
msgstr "дБ"
msgstr "вимкнено"
msgid "disabled"
-msgstr ""
+msgstr "вимкнено"
msgid "expired"
msgstr "минув"
"Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-оренди"
msgid "forward"
-msgstr "пеÑ\80еÑ\81лати"
+msgstr "пеÑ\80еÑ\81пÑ\80Ñ\8fмÑ\83вати"
msgid "full-duplex"
msgstr "повний дуплекс"
msgstr "прихований"
msgid "hybrid mode"
-msgstr ""
+msgstr "гібридний режим"
msgid "if target is a network"
msgstr "якщо мета — мережа"
"abbr>-файл"
msgid "minutes"
-msgstr ""
+msgstr "хв."
msgid "no"
msgstr "ні"
msgid "no link"
-msgstr "нема з'єднання"
+msgstr "нема з’єднання"
msgid "none"
msgstr "нема нічого"
msgid "not present"
-msgstr ""
+msgstr "не присутній"
msgid "off"
msgstr "вимкнено"
msgid "open"
msgstr "відкрита"
+msgid "output"
+msgstr "вихід"
+
msgid "overlay"
-msgstr ""
+msgstr "оверлей"
msgid "random"
-msgstr ""
+msgstr "випадковий"
msgid "relay mode"
-msgstr ""
+msgstr "режим реле"
msgid "routed"
msgstr "спрямовано"
msgid "server mode"
-msgstr ""
+msgstr "режим сервера"
msgid "stateful-only"
-msgstr ""
+msgstr "тільки ЗІ збереженням стану"
msgid "stateless"
-msgstr ""
+msgstr "БЕЗ збереження стану"
msgid "stateless + stateful"
-msgstr ""
+msgstr "БЕЗ та ЗІ збереженням стану"
msgid "tagged"
-msgstr "з познаÑ\87коÑ\8e"
+msgstr "познаÑ\87ено"
msgid "time units (TUs / 1.024 ms) [1000-65535]"
-msgstr ""
+msgstr "одиниці часу (TUs / 1.024 ms) [1000-65535]"
msgid "unknown"
msgstr "невідомий"
msgstr "не визначено -або- створити"
msgid "untagged"
-msgstr "без познаÑ\87ки"
+msgstr "не познаÑ\87ено"
msgid "yes"
msgstr "так"
msgid "« Back"
msgstr "« Назад"
-
-#~ msgid "Apply"
-#~ msgstr "Застосувати"
-
-#~ msgid "Applying changes"
-#~ msgstr "Застосування змін"
-
-#~ msgid "Configuration applied."
-#~ msgstr "Конфігурація застосована."
-
-#~ msgid "Save & Apply"
-#~ msgstr "Зберегти і застосувати"
-
-#~ msgid "The following changes have been committed"
-#~ msgstr "Нижче наведені зміни були застосовані"
-
-#~ msgid "There are no pending changes to apply!"
-#~ msgstr "Немає жодних змін до застосування!"
-
-#~ msgid "Action"
-#~ msgstr "Дія"
-
-#~ msgid "Buttons"
-#~ msgstr "Кнопки"
-
-#~ msgid "Handler"
-#~ msgstr "Обробник"
-
-#~ msgid "Maximum hold time"
-#~ msgstr "Максимальний час утримування"
-
-#~ msgid "Minimum hold time"
-#~ msgstr "Мінімальний час утримування"
-
-#~ msgid "Path to executable which handles the button event"
-#~ msgstr "Шлях до програми, яка обробляє натискання кнопки"
-
-#~ msgid "Specifies the button state to handle"
-#~ msgstr "Визначає стан кнопки для обробки"
-
-#~ msgid "This page allows the configuration of custom button actions"
-#~ msgstr "Ця сторінка дозволяє настроїти нетипові дії кнопки"
-
-#~ msgid "Leasetime"
-#~ msgstr "Час оренди"
-
-#~ msgid "AR Support"
-#~ msgstr "Підтримка AR"
-
-#~ msgid "Atheros 802.11%s Wireless Controller"
-#~ msgstr "Бездротовий 802.11%s контролер Atheros"
-
-#~ msgid "Background Scan"
-#~ msgstr "Сканування у фоновому режимі"
-
-#~ msgid "Compression"
-#~ msgstr "Стиснення"
-
-#~ msgid "Disable HW-Beacon timer"
-#~ msgstr "Вимкнути таймер HW-Beacon"
-
-#~ msgid "Do not send probe responses"
-#~ msgstr "Не надсилати відповіді на зондування"
-
-#~ msgid "Fast Frames"
-#~ msgstr "Швидкі фрейми"
-
-#~ msgid "Maximum Rate"
-#~ msgstr "Максимальна швидкість"
-
-#~ msgid "Minimum Rate"
-#~ msgstr "Мінімальна швидкість"
-
-#~ msgid "Multicast Rate"
-#~ msgstr "Швидкість багатоадресного потоку"
-
-#~ msgid "Outdoor Channels"
-#~ msgstr "Зовнішні канали"
-
-#~ msgid "Regulatory Domain"
-#~ msgstr "Регулятивний домен"
-
-#~ msgid "Separate WDS"
-#~ msgstr "Розділяти WDS"
-
-#~ msgid "Static WDS"
-#~ msgstr "Статичний WDS"
-
-#~ msgid "Turbo Mode"
-#~ msgstr "Режим Turbo"
-
-#~ msgid "XR Support"
-#~ msgstr "Підтримка XR"
-
-#~ msgid "An additional network will be created if you leave this unchecked."
-#~ msgstr "Якщо ви залишите це невибраним, буде створена додаткова мережа."
-
-#~ msgid "Join Network: Settings"
-#~ msgstr "Підключення до мережі: Настройки"
-
-#~ msgid "CPU"
-#~ msgstr "ЦП"
-
-#~ msgid "Port %d"
-#~ msgstr "Порт %d"
-
-#~ msgid "Port %d is untagged in multiple VLANs!"
-#~ msgstr "Порт %d нетегований у кількох VLAN-ах!"
-
-#~ msgid "VLAN Interface"
-#~ msgstr "VLAN-інтерфейс"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "-- match by uuid --"
msgstr "-- 根据 UUID 匹配 --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 分钟负载:"
msgstr "任意区域"
msgid "Apply request failed with status <code>%h</code>"
-msgstr ""
+msgstr "应用请求失败,状态 <code>%h</code>"
msgid "Apply unchecked"
-msgstr ""
+msgstr "应用未选中"
+
+msgid "Architecture"
+msgstr "架构"
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgid "Associated Stations"
msgstr "已连接站点"
+msgid "Associations"
+msgstr "关联数"
+
msgid "Auth Group"
msgstr "认证组"
msgstr "修改数"
msgid "Changes applied."
-msgstr "更改已应用"
+msgstr "更改已应用。"
msgid "Changes have been reverted."
-msgstr ""
+msgstr "更改已取消。"
msgid "Changes the administrator password for accessing the device"
msgstr "修改访问设备的管理员密码"
msgid ""
"Channel %d is not available in the %s regulatory domain and has been auto-"
"adjusted to %d."
-msgstr ""
+msgstr "信道 %d 在 %s 监管区域内不可用并已自动调整到 %d。"
msgid "Check"
msgstr "检查"
msgstr "配置文件将被保留。"
msgid "Configuration has been applied."
-msgstr ""
+msgstr "配置已应用。"
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "配置已回滚!"
msgid "Confirmation"
msgstr "确认密码"
"changes. You might need to reconnect if you modified network related "
"settings such as the IP address or wireless security credentials."
msgstr ""
+"应用配置更改后,无法重新获得对设备的访问权限。如果您修改了网络相关设置"
+"如 IP 地址或无线安全证书,则可能需要重新连接。"
msgid "Country"
msgstr "国家"
msgstr "无法连接到设备"
msgid "Device unreachable!"
-msgstr ""
+msgstr "无法连接到设备!"
msgid "Diagnostics"
msgstr "网络诊断"
msgstr "丢弃 RFC1918 上行响应数据"
msgid "Dismiss"
-msgstr ""
+msgstr "解除"
msgid "Displaying only packages containing"
msgstr "只显示有内容的软件包"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
-msgstr ""
+msgstr "启用 <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> 窥探"
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "开启 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "启用"
msgid "Enables IGMP snooping on this bridge"
-msgstr ""
+msgstr "在此桥接上启用 IGMP 窥探"
msgid ""
"Enables fast roaming among access points that belong to the same Mobility "
msgstr "FT 协议"
msgid "Failed to confirm apply within %ds, waiting for rollback…"
-msgstr ""
+msgstr "在 %d 秒内确认应用失败,等待回滚..."
msgid "File"
msgstr "文件"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
-"有关 WireGuard 接口和 Peer 的更多信息:<a href=\"http://wireguard.io"
-"\">wireguard.io</a>。"
+"有关 WireGuard 接口和 Peer 的更多信息:<a href=\"http://wireguard.com"
+"\">wireguard.com</a>。"
msgid "GHz"
msgstr "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4 防火墙"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN 状态"
+msgid "IPv4 Upstream"
+msgstr "IPv4 上游"
msgid "IPv4 address"
msgstr "IPv4 地址"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA 前缀"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN 状态"
+msgid "IPv6 Upstream"
+msgstr "IPv6 上游"
msgid "IPv6 address"
msgstr "IPv6 地址"
msgstr "混淆密码"
msgid "Obtain IPv6-Address"
-msgstr ""
+msgstr "获取 IPv6 地址"
msgid "Off-State Delay"
msgstr "关闭时间"
"Configuration Protocol\">DHCP</abbr> 服务器"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"确定要删除此接口?删除操作无法撤销!\\n删除此接口,可能导致无法再访问路由器!"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"确定要删除此无线网络?删除操作无法撤销!\\n删除此无线网络,可能导致无法再访问"
msgstr "确定要放弃所有更改?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"确定要关闭此网络?\\n如果您正在使用此接口连接路由器,关闭此网络可能导致连接断"
"开!"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"确定要关闭接口 \"%s\"?\\n如果您正在使用此接口连接路由器,关闭此网络可能导致"
msgstr "显示/隐藏 密码"
msgid "Revert"
-msgstr "æ\94¾å¼\83"
+msgstr "æ\81¢å¤\8d"
msgid "Revert changes"
-msgstr ""
+msgstr "恢复更改"
msgid "Revert request failed with status <code>%h</code>"
-msgstr ""
+msgstr "恢复请求失败,状态 <code>%h</code>"
msgid "Reverting configuration…"
-msgstr ""
+msgstr "正在恢复配置..."
msgid "Root"
msgstr "Root"
msgstr "保存"
msgid "Save & Apply"
-msgstr "保存&应用"
+msgstr "保存并应用"
msgid "Scan"
msgstr "扫描"
msgstr "启动优先级"
msgid "Starting configuration apply…"
-msgstr ""
+msgstr "开始应用配置..."
msgid "Startup"
msgstr "启动项"
"or revert all pending changes to keep the currently working configuration "
"state."
msgstr ""
+"在应用挂起的更改后 %d 秒内无法到达该设备,出于安全原因导致配置回滚。如果您认为配置更改仍"
+"然正确,请执行未选中的配置应用。或者您可以在尝试再次应用之前解除此警告并编辑更改,或者还原"
+"所有未完成的更改以保持当前正在工作的配置状态。"
msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
msgstr "没有已分配的租约。"
msgid "There are no changes to apply."
-msgstr ""
+msgstr "没有待生效的更改。"
msgid "There are no pending changes to revert!"
msgstr "没有可放弃的更改!"
msgstr "等待命令执行完成..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "等待应用配置... %d 秒"
msgid "Waiting for device..."
msgstr "等待设备..."
msgid "bridged"
msgstr "桥接的"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "创建:"
msgid "open"
msgstr "开放式"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "覆盖"
msgid "random"
-msgstr ""
+msgstr "随机"
msgid "relay mode"
msgstr "中继模式"
msgid "« Back"
msgstr "« 后退"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN 状态"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN 状态"
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1分鐘負載"
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
msgid "Associated Stations"
msgstr "已連接站點"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
msgid "IPv4 Firewall"
msgstr "IPv4防火牆"
-msgid "IPv4 WAN Status"
-msgstr "IPv4寬頻連線狀態"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4位址"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6寬頻連線狀態"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6位址"
"Configuration Protocol\">DHCP</abbr>-伺服器"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"真的要刪除這介面?無法復元刪除!\n"
"假如您要透過這個介面連線您可能會無法存取這個設備."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"真的要刪除這個無線網路?無法復元的刪除!\n"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"真的要刪除這個網路 ?\n"
"假如您是透過這個介面連線您可能會無法存取這個設備."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"真的要關閉這個介面 \"%s\" ?!\n"
msgid "bridged"
msgstr "已橋接"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "建立:"
msgid "open"
msgstr "打開"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
msgid "« Back"
msgstr "« 倒退"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4寬頻連線狀態"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6寬頻連線狀態"
+
#~ msgid "Apply"
#~ msgstr "套用"
fwzone.template = "cbi/firewall_zonelist"
fwzone.network = arg[1]
- fwzone.rmempty = false
function fwzone.cfgvalue(self, section)
self.iface = section
end
function fwzone.write(self, section, value)
- local zone = fw:get_zone(value)
-
- if not zone and value == '-' then
- value = m:formvalue(self:cbid(section) .. ".newzone")
- if value and #value > 0 then
- zone = fw:add_zone(value)
- else
- fw:del_network(section)
- end
- end
-
+ local zone = fw:get_zone(value) or fw:add_zone(value)
if zone then
fw:del_network(section)
zone:add_network(section)
end
end
+
+ function fwzone.remove(self, section)
+ fw:del_network(section)
+ end
end
function network.write(self, section, value)
local i = nw:get_interface(section)
if i then
- if value == '-' then
- value = m:formvalue(self:cbid(section) .. ".newnet")
- if value and #value > 0 then
- local n = nw:add_network(value, {proto="none"})
- if n then n:add_interface(i) end
- else
- local n = i:get_network()
- if n then n:del_interface(i) end
- end
- else
- local v
- for _, v in ipairs(i:get_networks()) do
- v:del_interface(i)
- end
- for v in ut.imatch(value) do
- local n = nw:get_network(v)
+ local _, net, old, new = nil, nil, {}, {}
+
+ for _, net in ipairs(i:get_networks()) do
+ old[net:name()] = true
+ end
+
+ for net in ut.imatch(value) do
+ new[net] = true
+ if not old[net] then
+ local n = nw:get_network(net) or nw:add_network(net, { proto = "none" })
if n then
if not n:is_empty() then
n:set("type", "bridge")
end
end
end
+
+ for net, _ in pairs(old) do
+ if not new[net] then
+ local n = nw:get_network(net)
+ if n then
+ n:del_interface(i)
+ end
+ end
+ end
end
end
local net, zone
if has_firewall then
- local zval = fwzone:formvalue(section)
- zone = fw:get_zone(zval)
-
- if not zone and zval == '-' then
- zval = m:formvalue(fwzone:cbid(section) .. ".newzone")
- if zval and #zval > 0 then
- zone = fw:add_zone(zval)
- end
+ local value = fwzone:formvalue(section)
+ if value and #value > 0 then
+ zone = fw:get_zone(value) or fw:add_zone(value)
end
end
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
<script type="text/javascript">//<![CDATA[
function iface_shutdown(id, reconnect) {
- if (!reconnect && !confirm(String.format('<%_Really shutdown interface "%s" ?\nYou might lose access to this device if you are connected via this interface.%>', id)))
+ if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shutdown interface "%s"? You might lose access to this device if you are connected via this interface.'))%>.format(id)))
return;
var d = document.getElementById(id + '-ifc-description');
}
function iface_delete(id) {
- if (!confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>'))
+ if (!confirm(<%=luci.http.write_json(translate('Really delete this interface? The deletion cannot be undone! You might lose access to this device if you are connected via this interface.'))%>))
return;
(new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' },
<%+header%>
<% if not has_iwinfo then %>
- <div class="errorbox">
- <strong><%:Package libiwinfo required!%></strong><br />
- <%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%>
+ <div class="alert-message warning">
+ <h4><%:Package libiwinfo required!%></h4>
+ <p><%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%></p>
</div>
<% end %>
function wifi_shutdown(id, toggle) {
var reconnect = (toggle.getAttribute('active') == 'false');
- if (!reconnect && !confirm(String.format('<%:Really shut down network?\nYou might lose access to this device if you are connected via this interface.%>')))
+ if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shut down network? You might lose access to this device if you are connected via this interface.'))%>))
return;
is_reconnecting = true;
}
function wifi_delete(id) {
- if (!confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>'))
+ if (!confirm(<%=luci.http.write_json(translate('Really delete this wireless network? The deletion cannot be undone! You might lose access to this device if you are connected via this network.'))%>))
return;
(new XHR()).post('<%=url('admin/network/wireless_delete')%>/' + id, { token: '<%=token%>' },
<h2><%:Wireless Overview%></h2>
<% if not has_iwinfo then %>
- <div class="errorbox">
- <strong><%:Package libiwinfo required!%></strong><br />
- <%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%>
+ <div class="alert-message warning">
+ <h4><%:Package libiwinfo required!%></h4>
+ <p><%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%></p>
</div>
<% end %>
"wireguard_" .. ifname,
translate("Peers"),
translate("Further information about WireGuard interfaces and peers " ..
- "at <a href=\"http://wireguard.io\">wireguard.io</a>.")
+ "at <a href=\"http://wireguard.com\">wireguard.com</a>.")
)
peers.template = "cbi/tsection"
peers.anonymous = true
form .cbi-value {
margin-bottom: 18px;
zoom: 1;
- overflow: hidden;
}
form .clearfix:before, form .clearfix:after,
input,
textarea,
select,
+.cbi-dropdown,
.uneditable-input {
display: inline-block;
width: 210px;
color: #808080;
border: 1px solid #ccc;
border-radius: 3px;
+ box-sizing: border-box;
+}
+
+.cbi-dropdown {
+ min-width: 210px;
+ max-width: 400px;
+ width: auto;
}
select {
background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
}
+.cbi-dropdown {
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ display: inline-flex;
+ padding: 0;
+ cursor: pointer;
+ height: auto;
+ background: linear-gradient(#fff 0%, #e9e8e6 100%);
+ position: relative;
+ color: #404040;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ color: #404040;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
.btn.active, .btn:active {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
}
opacity: 0.4;
}
-.alert-message, .errorbox {
+.alert-message {
position: relative;
padding: 7px 15px;
margin-bottom: 18px;
background-color: #FFFFFF;
border: 1px solid #CCCCCC;
padding: 2px;
- margin-left: 2px;
background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
border-radius: 4px;
.zonebadge > em,
.zonebadge > strong {
- margin: 5px;
+ margin: 0 2px;
display: inline-block;
}
width: 6em;
}
+.zonebadge > .ifacebadge {
+ margin-left: 2px;
+}
+
.zonebadge-empty {
border: 1px dashed #AAAAAA;
color: #AAAAAA;
line-height: 6px;
border: none;
}
+
+html body.apply-overlay-active {
+ height: calc(100vh - 63px);
+}
</div>
</header>
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
- <div class="container">
+ <div id="maincontent" class="container">
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
<div class="alert-message warning">
<h4><%:No password set!%></h4>
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br>
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
</div>
- </div>
- <%- end -%>
+ <%- end -%>
- <noscript>
- <div class="alert-message warning">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
- </div>
- </noscript>
+ <noscript>
+ <div class="alert-message warning">
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
+ </div>
+ </noscript>
- <div id="maincontent" class="container">
<% if category then render_tabmenu(category, cattree) end %>
}
select,
-input {
+input,
+.cbi-dropdown {
background-color: transparent;
color: rgba(0, 0, 0, .87);
border: none;
transition: box-shadow .2s;
float: left;
position: fixed;
- z-index: 101;
+ z-index: 2000;
}
footer {
color: black;
}
-.errorbox,
.alert-message {
margin: 2rem 0 0 0;
- padding: 2rem;
+ padding: 1rem;
border: 0;
font-weight: normal;
font-style: normal;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
}
-.errorbox {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-
.error {
color: red;
}
+.alert-message > h4 {
+ font-weight: bold;
+ font-size: 110%;
+}
+
+.alert-message > * {
+ margin: .5rem 0;
+}
+
#maincontent > .container > div:nth-child(1).alert-message.warning > a {
font: inherit;
overflow: visible;
font-style: normal;
line-height: 1;
font-family: inherit;
-
min-width: inherit;
- overflow-x: auto;
- overflow-y: hidden;
-
border-radius: 0;
background-color: #FFF;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
/* button style */
-.cbi-button {
+.btn, .cbi-button {
-webkit-appearance: none;
text-transform: uppercase;
color: rgba(0, 0, 0, 0.87);
user-select: none;
font-size: 0.8rem;
width: auto !important;
+ display: inline-block;
+ text-decoration: none;
}
+.btn:hover,
+.btn:focus,
+.btn:active,
.cbi-button:hover,
.cbi-button:focus,
.cbi-button:active {
color: rgba(0, 0, 0, 0.87);
}
+.btn:hover,
+.btn:focus,
.cbi-button:hover,
.cbi-button:focus {
box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
}
+.btn:active,
.cbi-button:active {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
+.btn:disabled,
.cbi-button:disabled {
cursor: not-allowed;
pointer-events: none;
box-shadow: none;
}
+.btn + .btn,
form.inline + form.inline,
.cbi-button + .cbi-button {
margin-left: 0.6rem;
font-size: small;
}
+
+.cbi-dropdown {
+ display: inline-flex;
+ cursor: pointer;
+ position: relative;
+ padding: 0;
+ height: auto;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open {
+ border: 2px outset #eee;
+ flex-basis: 15px;
+ background: #eee;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+ height: auto;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+ align-items: center;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
+.cbi-dropdown .zonebadge {
+ width: 100%;
+}
+
+.cbi-dropdown[open] .zonebadge {
+ width: auto;
+}
+
+
/* luci */
.hidden {
}
/* select */
-.cbi-value-field .cbi-input-select {
+.cbi-value-field .cbi-dropdown {
min-width: 15rem;
}
+.cbi-value-field .cbi-input-select {
+ width: 15rem;
+}
+
.ifacebadge {
display: inline-flex;
border-bottom: 1px solid #CCCCCC;
padding: 0.5rem 1rem;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ background: #fff;
}
td > .ifacebadge,
font-size: 0.9rem;
}
+.ifacebadge > em,
.ifacebadge > img {
- float: right;
- margin: 0 0.3rem;
+ display: inline-block;
+ margin: 0 .2rem;
align-self: start;
}
+.ifacebadge > img + img {
+ margin: 0 .2rem 0 0;
+}
+
.network-status-table {
display: flex;
flex-wrap: wrap;
}
.zonebadge > .ifacebadge {
- padding: 0.2rem 1rem;
- margin: 0.3rem;
+ padding: .2rem .3rem;
+ margin: 0.1rem 0.2rem;
border: 1px solid #6C6C6C;
}
margin-top: 0.3rem;
}
+.zonebadge > em,
+.zonebadge > strong {
+ margin: 0 0.2rem;
+ display: inline-block;
+}
+
.cbi-value-field .cbi-input-checkbox,
.cbi-value-field .cbi-input-radio {
margin-top: 0.5rem;
margin-top: -0.5rem;
}
-.cbi-section-table-row > .cbi-value-field .cbi-input-select {
+.cbi-section-table-row > .cbi-value-field .cbi-dropdown {
min-width: 7rem;
}
+.cbi-section-table-row > .cbi-value-field .cbi-input-select {
+ width: 7rem;
+}
+
.cbi-section-create > .cbi-button-add {
margin: 0.5rem;
}
width: calc(100% - 13rem);
}
+ .btn,
.cbi-button {
padding: 0.3rem 0.6rem;
font-size: 0.8rem;
line-height: 1;
font-family: inherit;
min-width: inherit;
- overflow-x: auto;
- overflow-y: hidden;
border-radius: 0;
background-color: #FFF;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
@media screen and (min-width: 992px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 20rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 20rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 20rem;
}
}
@media screen and (min-width: 1280px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 22rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 22rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 22rem;
}
}
@media screen and (min-width: 1600px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 25rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 25rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 25rem;
}
}
<!DOCTYPE html>
<html lang="<%=luci.i18n.context.lang%>">
<head>
- <meta charset="utf-8">
- <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
- <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
- <meta name="format-detection" content="telephone=no, email=no"/>
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="mobile-web-app-capable" content="yes">
- <meta name="x5-fullscreen" content="true">
- <meta name="full-screen" content="yes">
- <meta name="x5-page-mode" content="app">
- <meta name="browsermode" content="application">
- <meta name="theme-color" content="#0099CC">
- <meta name="msapplication-tap-highlight" content="no">
- <meta name="msapplication-TileColor" content="#0099CC">
-
- <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
- <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
- <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/>
- <link rel="icon" href="<%=media%>/logo.png" sizes="144x144">
- <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144">
-
- <link rel="stylesheet" href="<%=media%>/css/style.css">
- <link rel="shortcut icon" href="<%=media%>/favicon.ico">
- <% if node and node.css then %>
- <link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
- <% end -%>
- <% if css then %>
- <style title="text/css"><%= css %></style>
- <% end -%>
- <script src="<%=resource%>/xhr.js"></script>
+ <meta charset="utf-8">
+ <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
+ <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
+ <meta name="format-detection" content="telephone=no, email=no"/>
+ <meta name="apple-mobile-web-app-capable" content="yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="x5-fullscreen" content="true">
+ <meta name="full-screen" content="yes">
+ <meta name="x5-page-mode" content="app">
+ <meta name="browsermode" content="application">
+ <meta name="theme-color" content="#0099CC">
+ <meta name="msapplication-tap-highlight" content="no">
+ <meta name="msapplication-TileColor" content="#0099CC">
+
+ <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
+ <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
+ <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/>
+ <link rel="icon" href="<%=media%>/logo.png" sizes="144x144">
+ <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144">
+
+ <link rel="stylesheet" href="<%=media%>/css/style.css">
+ <link rel="shortcut icon" href="<%=media%>/favicon.ico">
+ <% if node and node.css then %>
+ <link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
+ <% end -%>
+ <% if css then %>
+ <style title="text/css"><%= css %></style>
+ <% end -%>
+ <script src="<%=resource%>/xhr.js"></script>
</head>
<body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>">
<header>
</div>
</header>
<div class="main">
- <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
- <div class="main-left">
+ <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
+ <div class="main-left">
<% render_topmenu() %>
- </div>
+ </div>
<div class="main-right">
- <div class="darkMask"></div>
- <div id="maincontent">
- <div class="container">
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
- <div class="alert-message warning">
- <h4><%:No password set!%></h4>
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br>
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
- </div>
- <%- end -%>
- <% if category then render_tabmenu(category, cattree) end %>
+ <div class="darkMask"></div>
+ <div id="maincontent">
+ <div class="container">
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
+ <div class="alert-message warning">
+ <h4><%:No password set!%></h4>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ </div>
+ <%- end -%>
<noscript>
<div class="alert-message warning">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
</div>
- </noscript>
+ </noscript>
+
+ <% if category then render_tabmenu(category, cattree) end %>
* {
margin: 0;
padding: 0;
+ box-sizing: border-box;
}
.table { display: table; }
background-color: white;
}
+.alert-message {
+ font-size: 9pt;
+ font-weight: normal;
+ padding: .5em;
+ border-radius: 3px;
+ color: #000;
+}
+
+.alert-message.notice {
+ background: linear-gradient(#ccc 0%, #eee 100%);
+ color: #4a6b7c;
+}
+
+.alert-message.warning {
+ background: linear-gradient(#dda 0%, #dd8 100%);
+ color: #c00;
+}
+
+.alert-message > * {
+ margin: .5em;
+}
+
+.alert-message > h4 {
+ font-weight: bold;
+ font-size: 10pt;
+}
+
div.hostinfo {
float: left;
margin: 0;
color: #000000;
}
+input[type=text],
+input[type=password] {
+ padding: 1px 3px;
+}
+
select,
input[type=text],
input[type=password] {
+ font-size: inherit;
width: 20em;
}
.td select,
+.td .cbi-dropdown,
.td input[type=text],
.td input[type=password] {
width: 99%;
vertical-align: middle;
}
-.cbi-button {
+.btn, .cbi-button {
padding: 2px;
border-radius: 3px;
border: 1px solid #aaa;
background: #eee 1px center no-repeat;
+ text-decoration: none;
+ color: #000;
+ display: inline-block;
}
-.cbi-button:hover {
+.btn:hover, .cbi-button:hover {
border-color: #4a6b7c;
background-color: #fff;
}
+.btn[disabled],
+.btn[disabled]:hover,
.cbi-button[disabled],
.cbi-button[disabled]:hover {
opacity: .6;
vertical-align: top;
}
+div.cbi-section-create .btn,
div.cbi-section-create .cbi-button {
margin: 0.25em;
}
vertical-align: bottom;
}
-div.cbi-error {
- font-size: 95%;
- font-weight: bold;
- color: #ff0000;
- background-color: #ffffff;
-}
-
.td.cbi-value-error {
border-color: red;
}
padding: 0.5em 0.5em 0.5em 2em;
}
+
+.cbi-dropdown {
+ border: 1px inset #000;
+ display: inline-flex;
+ cursor: pointer;
+ background: #eee;
+ position: relative;
+ padding: 0;
+ color: #000;
+ min-width: 20em;
+}
+
+.cbi-dropdown:hover {
+ background: #fff;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open {
+ border: 2px outset #eee;
+ flex-basis: 15px;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+ align-items: center;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
+
.left {
text-align: left !important;
}
padding: 0.5em;
}
-.errorbox {
- border: 1px solid #FF0000;
- background-color: #FFCCCC;
- padding: 5px;
- margin-bottom: 5px;
-}
-
-.errorbox a {
- color: #000000 !important;
-}
-
.ifacebadge, .ifacebox {
display: inline-flex;
background: #90c0e0;
}
-.ifacebadge > img {
+.ifacebadge, .zonebadge {
+ align-items: center;
+}
+
+.ifacebadge > img,
+.ifacebadge > em {
margin-right: 5px;
align-self: start;
+ display: inline-block;
+ height: 16px;
}
.ifacebadge-active {
.network-status-table .ifacebox-body {
display: flex;
flex-direction: column;
- height: 100%;
+ flex: 1 0;
}
.network-status-table .ifacebox-body > span {
display: inline-block;
white-space: nowrap;
cursor: pointer;
+ border-radius: 3px;
}
-.zonebadge em,
-.zonebadge strong {
+.zonebadge > em,
+.zonebadge > strong {
margin: 3px;
- display: inline-block;
}
.zonebadge input {
height: 1.5em;
}
+.zonebadge .ifacebadge,
+.cbi-dropdown .ifacebadge {
+ margin: 0 .125em;
+}
+
+.zonebadge .ifacebadge img,
+.zonebadge .ifacebadge em,
+.cbi-dropdown .ifacebadge img,
+.cbi-dropdown .ifacebadge em {
+ margin: 0 1px;
+}
+
.zonebadge-empty {
border: 1px dashed #AAAAAA;
color: #AAAAAA;
<div id="maincontent">
<noscript>
- <div class="errorbox">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+ <div class="alert-message warning">
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
</div>
</noscript>
<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") and category ~= "failsafe" then -%>
- <div class="errorbox">
- <strong><%:No password set!%></strong><br />
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br />
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
+ <div class="alert-message warning">
+ <h4><%:No password set!%></h4>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
</div>
<%- end -%>