msgid "running"
msgstr ""
-#~ msgid ""
-#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
-#~ "'libustream-ssl' or the wget 'built-in'."
-#~ msgstr ""
-#~ "对于 SSL 保护的 blocklist 源,您需要一个合适的 SSL 库,例如'libustream-"
-#~ "ssl'或 wget'built-in'。"
-
-#~ msgid ""
-#~ "Caution: Please don't select big lists or many lists at once on low "
-#~ "memory devices to prevent OOM exceptions!"
-#~ msgstr ""
-#~ "注意:请勿在内存较小的设备上选择过长的列表或同时选择多个列表,以防止 OOM "
-#~ "异常!"
-
-#~ msgid ""
-#~ "Create compressed blocklist backups, they will be used in case of "
-#~ "download errors or during startup in manual mode."
-#~ msgstr "创建压缩的 blocklist 备份,它们将在下载错误或手动模式下启动时使用。"
-
-#~ msgid ""
-#~ "Enable memory intense overall sort / duplicate removal on low memory "
-#~ "devices (< 64 MB RAM)"
-#~ msgstr "在低内存设备上启用耗用内存的整体排序/重复规则删除(<64 MB RAM)"
-
-#~ msgid ""
-#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
-#~ "documentation</a>"
-#~ msgstr "有关更多信息,请<a href=\"%s\" target=\"_blank\">参阅在线文档</a>"
-
-#~ msgid ""
-#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
-#~ "config file or download a fresh default config from <a href=\"%s\" target="
-#~ "\"_blank\">here</a>"
-#~ msgstr ""
-#~ "在 OPKG 中,使用“--force-maintainer”选项覆盖预先存在的配置文件,或从<a "
-#~ "href=\"%s\" target=\"_blank\">此处</a>下载新的默认配置"
-
-#~ msgid ""
-#~ "List of available network interfaces. By default the startup will be "
-#~ "triggered by the 'wan' interface.<br />"
-#~ msgstr "可用网络接口列表。默认情况下,将由“wan”界面触发启动。<br />"
-
-#~ msgid "Manual / Backup mode"
-#~ msgstr "手动/备份模式"
-
-#~ msgid "Overall Blocked Domains"
-#~ msgstr "整体封锁域名"
-
-#~ msgid "Please update your adblock config file to use this package."
-#~ msgstr "请更新您的 adblock 配置文件以使用此软件包。"
-
-#~ msgid ""
-#~ "Target directory for adblock backups. Please use only non-volatile disks, "
-#~ "no ram/tmpfs drives."
-#~ msgstr ""
-#~ "adblock 备份的目标目录。请仅使用非易失性磁盘,不使用 ram/tmpfs 驱动器。"
-
-#~ msgid "DNS backend"
-#~ msgstr "DNS 后端"
-
-#~ msgid "Enable verbose debug logging"
-#~ msgstr "启用详细调试输出"
-
-#~ msgid "Resume adblock"
-#~ msgstr "恢复 Adblock"
-
-#~ msgid "Status"
-#~ msgstr "状态"
-
-#~ msgid "Suspend adblock"
-#~ msgstr "暂停 Adblock"
-
-#~ msgid "active"
-#~ msgstr "已启用"
-
-#~ msgid "no domains blocked"
-#~ msgstr "没有被拦截的域名"
-
-#~ msgid "suspended"
-#~ msgstr "已暂停"
-
-#~ msgid "."
-#~ msgstr "."
-
-#~ msgid "For further information"
-#~ msgstr "更多信息"
-
-#~ msgid "see online documentation"
-#~ msgstr "查看在线文档"
-
-#~ msgid "Backup options"
-#~ msgstr "备份选项"
-
-#~ msgid ""
-#~ "). Note that list URLs and Shallalist category selections are not "
-#~ "configurable via Luci."
-#~ msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。"
-
-#~ msgid "Available blocklist sources ("
-#~ msgstr "可用拦截列表来源("
-
-#~ msgid ""
-#~ "File with whitelisted hosts/domains that are allowed despite being on a "
-#~ "blocklist."
-#~ msgstr "允许的主机/域名列表"
-
-#~ msgid "Global options"
-#~ msgstr "全局选项"
-
-#~ msgid "Whitelist file"
-#~ msgstr "白名单文件"
-
-#~ msgid "see list details"
-#~ msgstr "查看列表详情"
-
-#~ msgid "Count"
-#~ msgstr "数量"
-
-#~ msgid "IPv4 blackhole ip address"
-#~ msgstr "IPv4禁止列表"
-
-#~ msgid "IPv6 blackhole ip address"
-#~ msgstr "IPv6禁止列表"
-
-#~ msgid "List date/state"
-#~ msgstr "列表日期/状态"
-
-#~ msgid "Name of the logical lan interface"
-#~ msgstr "LAN接口名称"
-
-#~ msgid "Port of the adblock uhttpd instance"
-#~ msgstr "Adblock uhttpd端口"
-
-#~ msgid "Redirect all DNS queries to the local resolver"
-#~ msgstr "将所有DNS查询都重定向到本地解析器"
-
-#~ msgid "Timeout for blocklist fetch (seconds)"
-#~ msgstr "列表查询超时时间(秒)"
-
-#~ msgid "Total count of blocked domains"
-#~ msgstr "阻止域名总数"
-
-#~ msgid ""
-#~ "When adblock is active, all DNS queries are redirected to the local "
-#~ "resolver in this server by default. You can disable that to allow queries "
-#~ "to external DNS servers."
-#~ msgstr ""
-#~ "当Adblock处于活动状态时,默认情况下会将所有的DNS查询重定向到此服务器的本地"
-#~ "解析器。您可以禁用以允许查询外部DNS服务器。"
msgid "running"
msgstr ""
-#~ msgid ""
-#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
-#~ "'libustream-ssl' or the wget 'built-in'."
-#~ msgstr ""
-#~ "對於 SSL 保護的 blocklist 源,您需要一個合適的 SSL 庫,例如'libustream-"
-#~ "ssl'或 wget'built-in'。"
-
-#~ msgid ""
-#~ "Caution: Please don't select big lists or many lists at once on low "
-#~ "memory devices to prevent OOM exceptions!"
-#~ msgstr ""
-#~ "注意:請勿在記憶體較小的裝置上選擇過長的列表或同時選擇多個列表,以防止 "
-#~ "OOM 異常!"
-
-#~ msgid ""
-#~ "Create compressed blocklist backups, they will be used in case of "
-#~ "download errors or during startup in manual mode."
-#~ msgstr "建立壓縮的 blocklist 備份,它們將在下載錯誤或手動模式下啟動時使用。"
-
-#~ msgid ""
-#~ "Enable memory intense overall sort / duplicate removal on low memory "
-#~ "devices (< 64 MB RAM)"
-#~ msgstr ""
-#~ "在低記憶體裝置上啟用耗用記憶體的整體排序/重複規則刪除(<64 MB RAM)"
-
-#~ msgid ""
-#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
-#~ "documentation</a>"
-#~ msgstr "有關更多資訊,請<a href=\"%s\" target=\"_blank\">參閱線上文件</a>"
-
-#~ msgid ""
-#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
-#~ "config file or download a fresh default config from <a href=\"%s\" target="
-#~ "\"_blank\">here</a>"
-#~ msgstr ""
-#~ "在 OPKG 中,使用“--force-maintainer”選項覆蓋預先存在的配置檔案,或從<a "
-#~ "href=\"%s\" target=\"_blank\">此處</a>下載新的預設配置"
-
-#~ msgid ""
-#~ "List of available network interfaces. By default the startup will be "
-#~ "triggered by the 'wan' interface.<br />"
-#~ msgstr "可用網路介面列表。預設情況下,將由“wan”介面觸發啟動。<br />"
-
-#~ msgid "Manual / Backup mode"
-#~ msgstr "手動/備份模式"
-
-#~ msgid "Overall Blocked Domains"
-#~ msgstr "整體封鎖域名"
-
-#~ msgid "Please update your adblock config file to use this package."
-#~ msgstr "請更新您的 adblock 配置檔案以使用此軟體包。"
-
-#~ msgid ""
-#~ "Target directory for adblock backups. Please use only non-volatile disks, "
-#~ "no ram/tmpfs drives."
-#~ msgstr ""
-#~ "adblock 備份的目標目錄。請僅使用非易失性磁碟,不使用 ram/tmpfs 驅動器。"
-
-#~ msgid "DNS backend"
-#~ msgstr "DNS 後端"
-
-#~ msgid "Enable verbose debug logging"
-#~ msgstr "啟用詳細除錯輸出"
-
-#~ msgid "Resume adblock"
-#~ msgstr "恢復 Adblock"
-
-#~ msgid "Status"
-#~ msgstr "狀態"
-
-#~ msgid "Suspend adblock"
-#~ msgstr "暫停 Adblock"
-
-#~ msgid "active"
-#~ msgstr "已啟用"
-
-#~ msgid "no domains blocked"
-#~ msgstr "沒有被攔截的域名"
-
-#~ msgid "suspended"
-#~ msgstr "已暫停"
-
-#~ msgid "."
-#~ msgstr "."
-
-#~ msgid "For further information"
-#~ msgstr "更多資訊"
-
-#~ msgid "see online documentation"
-#~ msgstr "檢視線上文件"
-
-#~ msgid "Backup options"
-#~ msgstr "備份選項"
-
-#~ msgid ""
-#~ "). Note that list URLs and Shallalist category selections are not "
-#~ "configurable via Luci."
-#~ msgstr ")。需要注意的是列表URL和列表類別選項無法通過Luci設定。"
-
-#~ msgid "Available blocklist sources ("
-#~ msgstr "可用攔截列表來源("
-
-#~ msgid ""
-#~ "File with whitelisted hosts/domains that are allowed despite being on a "
-#~ "blocklist."
-#~ msgstr "允許的主機/域名列表"
-
-#~ msgid "Global options"
-#~ msgstr "全域性選項"
-
-#~ msgid "Whitelist file"
-#~ msgstr "白名單檔案"
-
-#~ msgid "see list details"
-#~ msgstr "檢視列表詳情"
-
-#~ msgid "Count"
-#~ msgstr "數量"
-
-#~ msgid "IPv4 blackhole ip address"
-#~ msgstr "IPv4禁止列表"
-
-#~ msgid "IPv6 blackhole ip address"
-#~ msgstr "IPv6禁止列表"
-
-#~ msgid "List date/state"
-#~ msgstr "列表日期/狀態"
-
-#~ msgid "Name of the logical lan interface"
-#~ msgstr "LAN介面名稱"
-
-#~ msgid "Port of the adblock uhttpd instance"
-#~ msgstr "Adblock uhttpd埠"
-
-#~ msgid "Redirect all DNS queries to the local resolver"
-#~ msgstr "將所有DNS查詢都重定向到本地解析器"
-
-#~ msgid "Timeout for blocklist fetch (seconds)"
-#~ msgstr "列表查詢超時時間(秒)"
-
-#~ msgid "Total count of blocked domains"
-#~ msgstr "阻止域名總數"
-
-#~ msgid ""
-#~ "When adblock is active, all DNS queries are redirected to the local "
-#~ "resolver in this server by default. You can disable that to allow queries "
-#~ "to external DNS servers."
-#~ msgstr ""
-#~ "當Adblock處於活動狀態時,預設情況下會將所有的DNS查詢重定向到此伺服器的本地"
-#~ "解析器。您可以禁用以允許查詢外部DNS伺服器。"
msgid "Edit this Uplink"
msgstr "このアップリンクを編集"
-msgid "Enable 'automatic' mode"
-msgstr "'automatic' モードの有効化"
-
msgid "Enable travelmate"
msgstr "Travelmate の有効化"
msgid "Force TKIP and CCMP (AES)"
msgstr "TKIP と CCMP (AES)"
-msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
-msgstr ""
-"'trigger' モード時に、手動でアップリンクの再スキャンと再接続を行います。"
-
msgid ""
"Here you'll find the QR codes from all of your configured Access Points. It "
"allows you to connect your Android or iOS devices to your router's WiFi "
msgid "Interface Wizard"
msgstr "インターフェース ウィザード"
-msgid ""
-"Keep travelmate in an active state. Check every n seconds the connection "
-"status, i.e. the uplink availability."
-msgstr ""
-"Travelmate をアクティブ状態で維持します。\"実行間隔\" で設定された時間毎"
-"(秒)に、アップリンクの可用性を確認するために接続状態をチェックします"
-
msgid "Last rundate"
msgstr "最終実行日時"
-msgid "Manual Rescan"
-msgstr "手動再スキャン"
-
msgid ""
"Minimum signal quality threshold as percent for conditional uplink (dis-) "
"connections."
msgid "Overall Timeout"
msgstr "実行間隔"
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
msgid "Overview"
msgstr "概要"
msgid "Repeat scan"
msgstr "再スキャン"
-msgid "Rescan"
-msgstr "再スキャン"
-
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
msgstr "ステーション電波"
msgid ""
+"The BSSID information '%s' is optional and only required for hidden networks"
+msgstr ""
+
+msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
msgstr ""
"このフォームには、システムログ内の Travelmate に関するメッセージのみが表示さ"
"れます。"
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr "'automatic' モード時に接続を確認または再試行する間隔(秒)です。"
-
msgid "Travelmate"
msgstr "Travelmate"
msgid "n/a"
msgstr "利用不可"
+
+#~ msgid "Enable 'automatic' mode"
+#~ msgstr "'automatic' モードの有効化"
+
+#~ msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+#~ msgstr ""
+#~ "'trigger' モード時に、手動でアップリンクの再スキャンと再接続を行います。"
+
+#~ msgid ""
+#~ "Keep travelmate in an active state. Check every n seconds the connection "
+#~ "status, i.e. the uplink availability."
+#~ msgstr ""
+#~ "Travelmate をアクティブ状態で維持します。\"実行間隔\" で設定された時間毎"
+#~ "(秒)に、アップリンクの可用性を確認するために接続状態をチェックします"
+
+#~ msgid "Manual Rescan"
+#~ msgstr "手動再スキャン"
+
+#~ msgid "Rescan"
+#~ msgstr "再スキャン"
+
+#~ msgid "Timeout in seconds between retries in 'automatic' mode."
+#~ msgstr "'automatic' モード時に接続を確認または再試行する間隔(秒)です。"
msgid "Edit this Uplink"
msgstr ""
-msgid "Enable 'automatic' mode"
-msgstr ""
-
msgid "Enable travelmate"
msgstr ""
msgid "Force TKIP and CCMP (AES)"
msgstr ""
-msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
-msgstr ""
-
msgid ""
"Here you'll find the QR codes from all of your configured Access Points. It "
"allows you to connect your Android or iOS devices to your router's WiFi "
msgid "Interface Wizard"
msgstr ""
-msgid ""
-"Keep travelmate in an active state. Check every n seconds the connection "
-"status, i.e. the uplink availability."
-msgstr ""
-
msgid "Last rundate"
msgstr ""
-msgid "Manual Rescan"
-msgstr ""
-
msgid ""
"Minimum signal quality threshold as percent for conditional uplink (dis-) "
"connections."
msgid "Overall Timeout"
msgstr ""
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Repeat scan"
msgstr ""
-msgid "Rescan"
-msgstr ""
-
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
msgstr ""
msgid ""
+"The BSSID information '%s' is optional and only required for hidden networks"
+msgstr ""
+
+msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
msgstr ""
"messages only."
msgstr ""
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-
msgid "Travelmate"
msgstr "Travelmate"
msgid "Edit this Uplink"
msgstr "Редактировать настройки сети"
-msgid "Enable 'automatic' mode"
-msgstr "Включить режим 'автоматически'"
-
msgid "Enable travelmate"
msgstr "Включить Travelmate"
msgid "Force TKIP and CCMP (AES)"
msgstr "Назначить TKIP и CCMP (AES)"
-msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
-msgstr ""
-"Принудительно выполнить повторное сканирование/повторное подключение внешних "
-"сетей в режиме 'ручной'."
-
msgid ""
"Here you'll find the QR codes from all of your configured Access Points. It "
"allows you to connect your Android or iOS devices to your router's WiFi "
msgid "Interface Wizard"
msgstr "Помощник настройки интерфейса"
-msgid ""
-"Keep travelmate in an active state. Check every n seconds the connection "
-"status, i.e. the uplink availability."
-msgstr ""
-"Поддержка TravelMate в активном состоянии.<br />Проверка состояния "
-"соединения каждые n секунд, т.е. доступность внешней сети."
-
msgid "Last rundate"
msgstr "Дата последнего запуска"
-msgid "Manual Rescan"
-msgstr "Поиск сети вручную"
-
msgid ""
"Minimum signal quality threshold as percent for conditional uplink (dis-) "
"connections."
msgid "Overall Timeout"
msgstr "Общее время ожидания"
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
msgid "Overview"
msgstr "Главное меню"
msgid "Repeat scan"
msgstr "Повторить поиск"
-msgid "Rescan"
-msgstr "Пересканировать"
-
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr "Выделить TravelMate-у конкретное Wi-Fi устройство, например 'radio0'."
msgstr "Wi-Fi устройство клиента"
msgid ""
+"The BSSID information '%s' is optional and only required for hidden networks"
+msgstr ""
+
+msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
msgstr ""
"Страница просмотра системного журнала, показаны только события связанные с "
"работой утилиты TravelMate."
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-"Время ожидания в секундах между повторными попытками соединения в режиме "
-"'автоматически'."
-
msgid "Travelmate"
msgstr "TravelMate"
msgid "n/a"
msgstr "нет данных"
+#~ msgid "Enable 'automatic' mode"
+#~ msgstr "Включить режим 'автоматически'"
+
+#~ msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+#~ msgstr ""
+#~ "Принудительно выполнить повторное сканирование/повторное подключение "
+#~ "внешних сетей в режиме 'ручной'."
+
+#~ msgid ""
+#~ "Keep travelmate in an active state. Check every n seconds the connection "
+#~ "status, i.e. the uplink availability."
+#~ msgstr ""
+#~ "Поддержка TravelMate в активном состоянии.<br />Проверка состояния "
+#~ "соединения каждые n секунд, т.е. доступность внешней сети."
+
+#~ msgid "Manual Rescan"
+#~ msgstr "Поиск сети вручную"
+
+#~ msgid "Rescan"
+#~ msgstr "Пересканировать"
+
+#~ msgid "Timeout in seconds between retries in 'automatic' mode."
+#~ msgstr ""
+#~ "Время ожидания в секундах между повторными попытками соединения в режиме "
+#~ "'автоматически'."
+
#~ msgid ""
#~ "How long should travelmate wait for a successful wlan interface reload."
#~ msgstr ""
msgid "Edit this Uplink"
msgstr ""
-msgid "Enable 'automatic' mode"
-msgstr ""
-
msgid "Enable travelmate"
msgstr ""
msgid "Force TKIP and CCMP (AES)"
msgstr ""
-msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
-msgstr ""
-
msgid ""
"Here you'll find the QR codes from all of your configured Access Points. It "
"allows you to connect your Android or iOS devices to your router's WiFi "
msgid "Interface Wizard"
msgstr ""
-msgid ""
-"Keep travelmate in an active state. Check every n seconds the connection "
-"status, i.e. the uplink availability."
-msgstr ""
-
msgid "Last rundate"
msgstr ""
-msgid "Manual Rescan"
-msgstr ""
-
msgid ""
"Minimum signal quality threshold as percent for conditional uplink (dis-) "
"connections."
msgid "Overall Timeout"
msgstr ""
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
msgid "Overview"
msgstr ""
msgid "Repeat scan"
msgstr ""
-msgid "Rescan"
-msgstr ""
-
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
msgstr ""
msgid ""
+"The BSSID information '%s' is optional and only required for hidden networks"
+msgstr ""
+
+msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
msgstr ""
"messages only."
msgstr ""
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-
msgid "Travelmate"
msgstr ""
msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
msgstr ""
-msgid "Enable/start service"
-msgstr ""
-
msgid "Local IP Addresses to Bypass"
msgstr ""
msgid "Remote ports to trigger VPN Bypass"
msgstr "Portas remotas para disparar o VPN Bypass"
+msgid "Start VPNBypass service"
+msgstr ""
+
msgid "VPN Bypass"
msgstr "VPN Bypass"
msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
msgstr "Домены должны быть доступны напрямую (вне VPN-туннеля), см."
-msgid "Enable/start service"
-msgstr "Включение / Запуск сервиса"
-
msgid "Local IP Addresses to Bypass"
msgstr "Локальный IP-адрес<br />обхода VPN"
msgid "Remote ports to trigger VPN Bypass"
msgstr "Удаленные порты для запуска обхода VPN"
+msgid "Start VPNBypass service"
+msgstr ""
+
msgid "VPN Bypass"
msgstr "Обход VPN"
msgid "for syntax"
msgstr "для синтаксиса"
+
+#~ msgid "Enable/start service"
+#~ msgstr "Включение / Запуск сервиса"
msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
msgstr "要直接访问的域(不使用 VPN 隧道),请参见"
-msgid "Enable/start service"
-msgstr "启用/启动服务"
-
msgid "Local IP Addresses to Bypass"
msgstr "要绕过的本地 IP 地址"
msgid "Remote ports to trigger VPN Bypass"
msgstr "触发 VPN 绕过的远程端口"
+msgid "Start VPNBypass service"
+msgstr ""
+
msgid "VPN Bypass"
msgstr "VPN 绕过"
msgid "for syntax"
msgstr "对于语法"
+
+#~ msgid "Enable/start service"
+#~ msgstr "启用/启动服务"
msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
msgstr "要直接訪問的域(不使用 VPN 隧道),請參見"
-msgid "Enable/start service"
-msgstr "啟用/啟動服務"
-
msgid "Local IP Addresses to Bypass"
msgstr "要繞過的本地 IP 位址"
msgid "Remote ports to trigger VPN Bypass"
msgstr "觸發 VPN 繞過的遠端埠"
+msgid "Start VPNBypass service"
+msgstr ""
+
msgid "VPN Bypass"
msgstr "VPN 繞過"
msgid "for syntax"
msgstr "對於語法"
+
+#~ msgid "Enable/start service"
+#~ msgstr "啟用/啟動服務"
http.status(404, "Not Found")
message = message or "Not Found"
- require("luci.template")
- if not util.copcall(luci.template.render, "error404") then
+ local function render()
+ local template = require "luci.template"
+ template.render("error404")
+ end
+
+ if not util.copcall(render) then
http.prepare_content("text/plain")
http.write(message)
end
+
return false
end
end
end
- for node in pathinfo:gmatch("[^/]+") do
+ local node
+ for node in pathinfo:gmatch("[^/%z]+") do
r[#r+1] = node
end
if (type(required_val) == "string" and
request_val ~= required_val) or
- (required_val == true and
- (request_val == nil or request_val == ""))
+ (required_val == true and request_val == nil)
then
return false
end
{ 'America/Winnipeg', 'CST6CDT,M3.2.0,M11.1.0' },
{ 'America/Yakutat', 'AKST9AKDT,M3.2.0,M11.1.0' },
{ 'America/Yellowknife', 'MST7MDT,M3.2.0,M11.1.0' },
- { 'Antarctica/Casey', '<+11>-11' },
+ { 'Antarctica/Casey', '<+08>-8' },
{ 'Antarctica/Davis', '<+07>-7' },
{ 'Antarctica/DumontDUrville', '<+10>-10' },
{ 'Antarctica/Macquarie', '<+11>-11' },
{ 'Asia/Dubai', '<+04>-4' },
{ 'Asia/Dushanbe', '<+05>-5' },
{ 'Asia/Famagusta', 'EET-2EEST,M3.5.0/3,M10.5.0/4' },
- { 'Asia/Gaza', 'EET-2EEST,M3.5.6/1,M10.5.6/1' },
- { 'Asia/Hebron', 'EET-2EEST,M3.5.6/1,M10.5.6/1' },
+ { 'Asia/Gaza', 'EET-2EEST,M3.4.6/1,M10.5.6/1' },
+ { 'Asia/Hebron', 'EET-2EEST,M3.4.6/1,M10.5.6/1' },
{ 'Asia/Ho Chi Minh', '<+07>-7' },
{ 'Asia/Hong Kong', 'HKT-8' },
{ 'Asia/Hovd', '<+07>-7' },
<%+header%>
<h2 name="content">404 <%:Not Found%></h2>
<p><%:Sorry, the object you requested was not found.%></p>
-<tt><%:Unable to dispatch%>: <%=luci.http.request.env.PATH_INFO%></tt>
+<tt><%:Unable to dispatch%>: <%=url(unpack(luci.dispatcher.context.request))%></tt>
<%+footer%>
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "D'acord"
msgid "Size (.ipk)"
msgstr "Mida (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Salta"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Přeskočit"
msgid "Nslookup"
msgstr "DNS-Auflösung"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr "Größe (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Überspringen"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "Εντάξει"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Παράκαμψη"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Skip"
msgid "Nslookup"
msgstr "NSLookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "Aceptar"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Saltar"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Passer au suivant"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr ""
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Ugrás"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Salta"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr "サイズ (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "スキップ"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr ""
msgid "Size (.ipk)"
msgstr "크기 (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "Baik"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Skip"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Gå videre"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Pomiń"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr "Tamanho (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Pular"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Saltar"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr "DNS-запрос"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr "Размер (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Пропустить"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr ""
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr "Storlek (.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Hoppa över"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr ""
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr ""
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid "Nslookup"
msgstr "DNS-запит"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "Пропустити"
msgid "Nslookup"
msgstr ""
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "OK "
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr ""
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
-msgstr "自定义文件(证书、脚本)会保留在系统上。若无需保留,请先执行恢复出厂设置。"
+msgstr ""
+"自定义文件(证书、脚本)会保留在系统上。若无需保留,请先执行恢复出厂设置。"
msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
msgid "Nslookup"
msgstr "Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "确认"
msgid "Size (.ipk)"
msgstr "大小(.ipk)"
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "跳过"
msgid "Nslookup"
msgstr "DNS偵錯Nslookup"
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
msgid "OK"
msgstr "行"
msgid "Size (.ipk)"
msgstr ""
+msgid "Size of DNS query cache"
+msgstr ""
+
msgid "Skip"
msgstr "跳過"
/*
* LuCI Template - Lua binding
*
- * Copyright (C) 2009 Jo-Philipp Wich <jow@openwrt.org>
+ * Copyright (C) 2009-2018 Jo-Philipp Wich <jo@mein.io>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
return 0;
}
+int template_L_urlencode(lua_State *L)
+{
+ size_t len = 0;
+ const char *str = luaL_checkstring(L, 1);
+ char *res = urlencode(str, &len);
+
+ if (res != NULL)
+ {
+ lua_pushlstring(L, res, len);
+ free(res);
+
+ return 1;
+ }
+ else if (len == 0)
+ {
+ lua_pushvalue(L, 1);
+ return 1;
+ }
+
+ return 0;
+}
+
+int template_L_urldecode(lua_State *L)
+{
+ size_t len = 0;
+ const char *str = luaL_checkstring(L, 1);
+ int keep_plus = lua_toboolean(L, 2);
+ char *res = urldecode(str, &len, keep_plus == 1);
+
+ if (res != NULL)
+ {
+ lua_pushlstring(L, res, len);
+ free(res);
+
+ return 1;
+ }
+ else if (len == 0)
+ {
+ lua_pushvalue(L, 1);
+ return 1;
+ }
+
+ return 0;
+}
+
static int template_L_load_catalog(lua_State *L) {
const char *lang = luaL_optstring(L, 1, "en");
const char *dir = luaL_optstring(L, 2, NULL);
{ "utf8", template_L_utf8 },
{ "pcdata", template_L_pcdata },
{ "striptags", template_L_striptags },
+ { "urlencode", template_L_urlencode },
+ { "urldecode", template_L_urldecode },
{ "load_catalog", template_L_load_catalog },
{ "close_catalog", template_L_close_catalog },
{ "change_catalog", template_L_change_catalog },
/*
* LuCI Template - Utility functions
*
- * Copyright (C) 2010 Jo-Philipp Wich <jow@openwrt.org>
+ * Copyright (C) 2010-2018 Jo-Philipp Wich <jo@mein.io>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
return buf_destroy(buf);
}
+
+static inline bool is_urlencode_char(char c)
+{
+ return !((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ (c == '$') || (c == '_') ||
+ (c == '-') || (c == '.') ||
+ (c == '~'));
+}
+
+/*
+ * URL-encode all special characters in given string and return
+ * encoded copy.
+ *
+ * If no encoding was required, returns NULL. If an encoded_len
+ * pointer is passed, it is set to the length of the encoded string.
+ *
+ * Sets encoded_len and returns NULL if memory allocation failed.
+ */
+char *urlencode(const char *s, size_t *encoded_len)
+{
+ size_t i, enc_len;
+ char *enc, *ptr;
+
+ for (i = 0, enc_len = 0; s[i]; i++)
+ if (is_urlencode_char(s[i]))
+ enc_len += 3;
+ else
+ enc_len++;
+
+ if (i != enc_len)
+ {
+ if (encoded_len)
+ *encoded_len = enc_len;
+
+ enc = calloc(1, enc_len + 1);
+
+ if (!enc)
+ return NULL;
+
+ for (i = 0, ptr = enc; s[i]; i++)
+ if (is_urlencode_char(s[i]))
+ ptr += snprintf(ptr, 4, "%%%02x", (unsigned char)s[i]);
+ else
+ *ptr++ = s[i];
+
+ return enc;
+ }
+
+ return NULL;
+}
+
+/*
+ * URL-decode given string and return decoded copy.
+ *
+ * If no decoding was required, returns NULL. If an decoded_len
+ * pointer is passed, it is set to the length of the decoded string.
+ *
+ * When keep_plus is true, skip decoding of plus ("+") signs into
+ * space (0x20) characters.
+ *
+ * Sets decoded_len and returns NULL if memory allocation failed.
+ */
+
+#define hex(x) \
+ (((x) <= '9') ? ((x) - '0') : \
+ (((x) <= 'F') ? ((x) - 'A' + 10) : \
+ ((x) - 'a' + 10)))
+
+char *urldecode(const char *s, size_t *decoded_len, bool keep_plus)
+{
+ bool changed = false;
+ size_t i, dec_len;
+ char *dec, *ptr;
+
+ for (i = 0, dec_len = 0; s[i]; i++, dec_len++)
+ {
+ if (s[i] == '%' && isxdigit(s[i+1]) && isxdigit(s[i+2]))
+ {
+ changed = true;
+ i += 2;
+ }
+ else if (!keep_plus && s[i] == '+')
+ {
+ changed = true;
+ }
+ }
+
+ if (changed)
+ {
+ if (decoded_len)
+ *decoded_len = dec_len;
+
+ dec = calloc(1, dec_len + 1);
+
+ if (!dec)
+ return NULL;
+
+ for (i = 0, ptr = dec; s[i]; i++)
+ {
+ if (s[i] == '%' && isxdigit(s[i+1]) && isxdigit(s[i+2]))
+ {
+ *ptr++ = (char)(16 * hex(s[i+1]) + hex(s[i+2]));
+ i += 2;
+ }
+ else if (!keep_plus && s[i] == '+')
+ {
+ *ptr++ = ' ';
+ }
+ else
+ {
+ *ptr++ = s[i];
+ }
+ }
+
+ return dec;
+ }
+
+ return NULL;
+}
+
void luastr_escape(struct template_buffer *out, const char *s, unsigned int l,
int escape_xml)
{
/*
* LuCI Template - Utility header
*
- * Copyright (C) 2010-2012 Jo-Philipp Wich <jow@openwrt.org>
+ * Copyright (C) 2010-2018 Jo-Philipp Wich <jo@mein.io>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include <stdbool.h>
+#include <ctype.h>
/* buffer object */
char * utf8(const char *s, unsigned int l);
char * pcdata(const char *s, unsigned int l);
char * striptags(const char *s, unsigned int l);
+char * urlencode(const char *s, size_t *encoded_len);
+char * urldecode(const char *s, size_t *decoded_len, bool keep_plus);
void luastr_escape(struct template_buffer *out, const char *s, unsigned int l, int escape_xml);
void luastr_translate(struct template_buffer *out, const char *s, unsigned int l, int escape_xml);
s:taboption("advanced", Value, "serversfile",
translate("Additional servers file"),
translate("This file may contain lines like 'server=/domain/1.2.3.4' or 'server=1.2.3.4' for"..
- "domain-specific or full upstream <abbr title=\"Domain Name System\">DNS</abbr> servers."))
+ "domain-specific or full upstream <abbr title=\"Domain Name System\">DNS</abbr> servers."))
s:taboption("advanced", Flag, "strictorder",
translate("Strict order"),
cq.datatype = "uinteger"
cq.placeholder = 150
+cs = s:taboption("advanced", Value, "cachesize",
+ translate("Size of DNS query cache"),
+ translate("Number of cached DNS entries (max is 10000, 0 is no caching)"))
+cs.optional = true
+cs.datatype = "range(0,10000)"
+cs.placeholder = 150
s:taboption("tftp", Flag, "enable_tftp",
translate("Enable TFTP server")).optional = true
ip.datatype = "or(ip4addr,'ignore')"
time = s:option(Value, "leasetime", translate("Lease time"))
-time.rmempty = true
+time.rmempty = true
duid = s:option(Value, "duid", translate("<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"))
duid.datatype = "and(rangelength(20,36),hexstring)"