Merge pull request #1744 from dibdot/mwan-fix
authorHannu Nyman <hannu.nyman@iki.fi>
Wed, 11 Apr 2018 05:53:16 +0000 (08:53 +0300)
committerGitHub <noreply@github.com>
Wed, 11 Apr 2018 05:53:16 +0000 (08:53 +0300)
luci-app-mwan3: bugfix

44 files changed:
applications/luci-app-adblock/po/zh-cn/adblock.po
applications/luci-app-adblock/po/zh-tw/adblock.po
applications/luci-app-travelmate/po/ja/travelmate.po
applications/luci-app-travelmate/po/pt-br/travelmate.po
applications/luci-app-travelmate/po/ru/travelmate.po
applications/luci-app-travelmate/po/templates/travelmate.pot
applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po
applications/luci-app-vpnbypass/po/ru/vpnbypass.po
applications/luci-app-vpnbypass/po/zh-cn/vpnbypass.po
applications/luci-app-vpnbypass/po/zh-tw/vpnbypass.po
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua
modules/luci-base/luasrc/view/error404.htm
modules/luci-base/po/ca/base.po
modules/luci-base/po/cs/base.po
modules/luci-base/po/de/base.po
modules/luci-base/po/el/base.po
modules/luci-base/po/en/base.po
modules/luci-base/po/es/base.po
modules/luci-base/po/fr/base.po
modules/luci-base/po/he/base.po
modules/luci-base/po/hu/base.po
modules/luci-base/po/it/base.po
modules/luci-base/po/ja/base.po
modules/luci-base/po/ko/base.po
modules/luci-base/po/ms/base.po
modules/luci-base/po/no/base.po
modules/luci-base/po/pl/base.po
modules/luci-base/po/pt-br/base.po
modules/luci-base/po/pt/base.po
modules/luci-base/po/ro/base.po
modules/luci-base/po/ru/base.po
modules/luci-base/po/sk/base.po
modules/luci-base/po/sv/base.po
modules/luci-base/po/templates/base.pot
modules/luci-base/po/tr/base.po
modules/luci-base/po/uk/base.po
modules/luci-base/po/vi/base.po
modules/luci-base/po/zh-cn/base.po
modules/luci-base/po/zh-tw/base.po
modules/luci-base/src/template_lualib.c
modules/luci-base/src/template_utils.c
modules/luci-base/src/template_utils.h
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua

index 1d7dc2b..e26c44c 100644 (file)
@@ -369,152 +369,3 @@ msgstr "已暂停"
 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 (&lt; 64 MB RAM)"
-#~ msgstr "在低内存设备上启用耗用内存的整体排序/重复规则删除(&lt;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服务器。"
index da00842..417fc6b 100644 (file)
@@ -369,153 +369,3 @@ msgstr "已暫停"
 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 (&lt; 64 MB RAM)"
-#~ msgstr ""
-#~ "在低記憶體裝置上啟用耗用記憶體的整體排序/重複規則刪除(&lt;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伺服器。"
index 83cf97f..535a9db 100644 (file)
@@ -113,9 +113,6 @@ msgstr "無線アップリンク設定の編集"
 msgid "Edit this Uplink"
 msgstr "このアップリンクを編集"
 
-msgid "Enable 'automatic' mode"
-msgstr "'automatic' モードの有効化"
-
 msgid "Enable travelmate"
 msgstr "Travelmate の有効化"
 
@@ -147,10 +144,6 @@ msgstr "TKIP"
 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 "
@@ -179,19 +172,9 @@ msgstr "インターフェース タイムアウト"
 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."
@@ -218,6 +201,9 @@ msgstr "デフォルトの設定が適切でない場合、さらに設定する
 msgid "Overall Timeout"
 msgstr "実行間隔"
 
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
 msgid "Overview"
 msgstr "概要"
 
@@ -258,9 +244,6 @@ msgstr "無線の選択"
 msgid "Repeat scan"
 msgstr "再スキャン"
 
-msgid "Rescan"
-msgstr "再スキャン"
-
 msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
 msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
 
@@ -298,6 +281,10 @@ msgid "Station Radio"
 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 ""
@@ -332,9 +319,6 @@ msgstr ""
 "このフォームには、システムログ内の Travelmate に関するメッセージのみが表示さ"
 "れます。"
 
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr "'automatic' モード時に接続を確認または再試行する間隔(秒)です。"
-
 msgid "Travelmate"
 msgstr "Travelmate"
 
@@ -406,3 +390,26 @@ msgstr "(不明)"
 
 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' モード時に接続を確認または再試行する間隔(秒)です。"
index 843340b..5ea4d4a 100644 (file)
@@ -107,9 +107,6 @@ msgstr ""
 msgid "Edit this Uplink"
 msgstr ""
 
-msgid "Enable 'automatic' mode"
-msgstr ""
-
 msgid "Enable travelmate"
 msgstr ""
 
@@ -139,9 +136,6 @@ 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 "
@@ -167,17 +161,9 @@ msgstr ""
 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."
@@ -202,6 +188,9 @@ msgstr ""
 msgid "Overall Timeout"
 msgstr ""
 
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
 msgid "Overview"
 msgstr ""
 
@@ -238,9 +227,6 @@ msgstr ""
 msgid "Repeat scan"
 msgstr ""
 
-msgid "Rescan"
-msgstr ""
-
 msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
 msgstr ""
 
@@ -278,6 +264,10 @@ msgid "Station Radio"
 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 ""
@@ -302,9 +292,6 @@ msgid ""
 "messages only."
 msgstr ""
 
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-
 msgid "Travelmate"
 msgstr "Travelmate"
 
index 202f5c8..fad31bb 100644 (file)
@@ -112,9 +112,6 @@ msgstr "Редактировать настройки беспроводной 
 msgid "Edit this Uplink"
 msgstr "Редактировать настройки сети"
 
-msgid "Enable 'automatic' mode"
-msgstr "Включить режим 'автоматически'"
-
 msgid "Enable travelmate"
 msgstr "Включить Travelmate"
 
@@ -146,11 +143,6 @@ msgstr "Назначить TKIP"
 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 "
@@ -176,19 +168,9 @@ msgstr "Временная задержка интерфейса"
 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."
@@ -215,6 +197,9 @@ msgstr ""
 msgid "Overall Timeout"
 msgstr "Общее время ожидания"
 
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
 msgid "Overview"
 msgstr "Главное меню"
 
@@ -255,9 +240,6 @@ msgstr "Выбор Wi-Fi устройства"
 msgid "Repeat scan"
 msgstr "Повторить поиск"
 
-msgid "Rescan"
-msgstr "Пересканировать"
-
 msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
 msgstr "Выделить TravelMate-у конкретное Wi-Fi устройство, например 'radio0'."
 
@@ -295,6 +277,10 @@ msgid "Station Radio"
 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 ""
@@ -329,11 +315,6 @@ msgstr ""
 "Страница просмотра системного журнала, показаны только события связанные с "
 "работой утилиты TravelMate."
 
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-"Время ожидания в секундах между повторными попытками соединения в режиме "
-"'автоматически'."
-
 msgid "Travelmate"
 msgstr "TravelMate"
 
@@ -404,6 +385,32 @@ msgstr "скрытый"
 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 ""
index 32ba788..8ba1766 100644 (file)
@@ -96,9 +96,6 @@ msgstr ""
 msgid "Edit this Uplink"
 msgstr ""
 
-msgid "Enable 'automatic' mode"
-msgstr ""
-
 msgid "Enable travelmate"
 msgstr ""
 
@@ -128,9 +125,6 @@ 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 "
@@ -156,17 +150,9 @@ msgstr ""
 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."
@@ -191,6 +177,9 @@ msgstr ""
 msgid "Overall Timeout"
 msgstr ""
 
+msgid "Overall retry timeout in seconds."
+msgstr ""
+
 msgid "Overview"
 msgstr ""
 
@@ -227,9 +216,6 @@ msgstr ""
 msgid "Repeat scan"
 msgstr ""
 
-msgid "Rescan"
-msgstr ""
-
 msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
 msgstr ""
 
@@ -267,6 +253,10 @@ msgid "Station Radio"
 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 ""
@@ -291,9 +281,6 @@ msgid ""
 "messages only."
 msgstr ""
 
-msgid "Timeout in seconds between retries in 'automatic' mode."
-msgstr ""
-
 msgid "Travelmate"
 msgstr ""
 
index 9f3fa2a..4fa07f9 100644 (file)
@@ -18,9 +18,6 @@ msgstr "Domínios para evitar a VPN"
 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 ""
 
@@ -52,6 +49,9 @@ msgstr "Portas remotas para evitar a VPN"
 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"
 
index 96cbb3f..d41cfac 100644 (file)
@@ -21,9 +21,6 @@ msgstr "Домены, для<br />обхода блокировки"
 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"
 
@@ -59,6 +56,9 @@ msgstr "Удаленные порты<br />для обхода VPN"
 msgid "Remote ports to trigger VPN Bypass"
 msgstr "Удаленные порты для запуска обхода VPN"
 
+msgid "Start VPNBypass service"
+msgstr ""
+
 msgid "VPN Bypass"
 msgstr "Обход VPN"
 
@@ -67,3 +67,6 @@ msgstr "Настройка обхода VPN"
 
 msgid "for syntax"
 msgstr "для синтаксиса"
+
+#~ msgid "Enable/start service"
+#~ msgstr "Включение / Запуск сервиса"
index a153917..72c55a6 100644 (file)
@@ -17,9 +17,6 @@ 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 地址"
 
@@ -51,6 +48,9 @@ msgstr "要绕过的远程端口"
 msgid "Remote ports to trigger VPN Bypass"
 msgstr "触发 VPN 绕过的远程端口"
 
+msgid "Start VPNBypass service"
+msgstr ""
+
 msgid "VPN Bypass"
 msgstr "VPN 绕过"
 
@@ -59,3 +59,6 @@ msgstr "VPN 绕过设置"
 
 msgid "for syntax"
 msgstr "对于语法"
+
+#~ msgid "Enable/start service"
+#~ msgstr "启用/启动服务"
index 90ba85f..9eb3812 100644 (file)
@@ -17,9 +17,6 @@ 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 位址"
 
@@ -51,6 +48,9 @@ msgstr "要繞過的遠端埠"
 msgid "Remote ports to trigger VPN Bypass"
 msgstr "觸發 VPN 繞過的遠端埠"
 
+msgid "Start VPNBypass service"
+msgstr ""
+
 msgid "VPN Bypass"
 msgstr "VPN 繞過"
 
@@ -59,3 +59,6 @@ msgstr "VPN 繞過設定"
 
 msgid "for syntax"
 msgstr "對於語法"
+
+#~ msgid "Enable/start service"
+#~ msgstr "啟用/啟動服務"
index 4866727..5fc2b80 100644 (file)
@@ -75,11 +75,16 @@ function error404(message)
        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
 
@@ -113,7 +118,8 @@ function httpdispatch(request, prefix)
                end
        end
 
-       for node in pathinfo:gmatch("[^/]+") do
+       local node
+       for node in pathinfo:gmatch("[^/%z]+") do
                r[#r+1] = node
        end
 
@@ -136,8 +142,7 @@ local function require_post_security(target)
 
                                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
index 6668dad..47cb901 100644 (file)
@@ -202,7 +202,7 @@ TZ = {
        { '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' },
@@ -239,8 +239,8 @@ TZ = {
        { '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' },
index bc74226..a762f60 100644 (file)
@@ -7,5 +7,5 @@
 <%+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%>
index 0db5d30..c413b71 100644 (file)
@@ -2159,6 +2159,9 @@ msgstr "Avís"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "D'acord"
 
@@ -2918,6 +2921,9 @@ msgstr "Mida"
 msgid "Size (.ipk)"
 msgstr "Mida (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Salta"
 
index 53c714a..89714cc 100644 (file)
@@ -2167,6 +2167,9 @@ msgstr "Oznámení"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2944,6 +2947,9 @@ msgstr "Velikost"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Přeskočit"
 
index 7b8ac4c..fd495b9 100644 (file)
@@ -2233,6 +2233,9 @@ msgstr "Notiz"
 msgid "Nslookup"
 msgstr "DNS-Auflösung"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -3044,6 +3047,9 @@ msgstr "Größe"
 msgid "Size (.ipk)"
 msgstr "Größe (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Überspringen"
 
index 9e740ed..ad5ed07 100644 (file)
@@ -2175,6 +2175,9 @@ msgstr "Επισήμανση"
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "Εντάξει"
 
@@ -2936,6 +2939,9 @@ msgstr "Μέγεθος"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Παράκαμψη"
 
index 190a43f..f629135 100644 (file)
@@ -2142,6 +2142,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2900,6 +2903,9 @@ msgstr "Size"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Skip"
 
index 7f7efbc..776f7fb 100644 (file)
@@ -2181,6 +2181,9 @@ msgstr "Aviso"
 msgid "Nslookup"
 msgstr "NSLookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "Aceptar"
 
@@ -2957,6 +2960,9 @@ msgstr "Tamaño"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Saltar"
 
index 0fc12ea..9de1687 100644 (file)
@@ -2195,6 +2195,9 @@ msgstr "Note"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2971,6 +2974,9 @@ msgstr "Taille"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Passer au suivant"
 
index 0750481..8d5daf3 100644 (file)
@@ -2115,6 +2115,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr ""
 
@@ -2867,6 +2870,9 @@ msgstr ""
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index e55bab6..5e2ea2b 100644 (file)
@@ -2184,6 +2184,9 @@ msgstr "Megjegyzés"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2962,6 +2965,9 @@ msgstr "Méret"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Ugrás"
 
index ce4b79b..6b55e23 100644 (file)
@@ -2184,6 +2184,9 @@ msgstr "Notifica"
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2946,6 +2949,9 @@ msgstr "Dimensione"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Salta"
 
index d3c29bc..4f26025 100644 (file)
@@ -2183,6 +2183,9 @@ msgstr "注意"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2967,6 +2970,9 @@ msgstr "サイズ"
 msgid "Size (.ipk)"
 msgstr "サイズ (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "スキップ"
 
index ae417e7..04d3c6a 100644 (file)
@@ -2133,6 +2133,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr ""
 
@@ -2895,6 +2898,9 @@ msgstr "Size"
 msgid "Size (.ipk)"
 msgstr "크기 (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index 1f53a0a..b478bd6 100644 (file)
@@ -2113,6 +2113,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "Baik"
 
@@ -2869,6 +2872,9 @@ msgstr "Saiz"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Skip"
 
index e5002d5..502c3b3 100644 (file)
@@ -2158,6 +2158,9 @@ msgstr "Merk"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2935,6 +2938,9 @@ msgstr "Størrelse"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Gå videre"
 
index 9d5ff5b..956e566 100644 (file)
@@ -2203,6 +2203,9 @@ msgstr "Spostrzeżenie"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2983,6 +2986,9 @@ msgstr "Rozmiar"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Pomiń"
 
index 4e9abab..9c4901f 100644 (file)
@@ -2284,6 +2284,9 @@ msgstr "Aviso"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -3089,6 +3092,9 @@ msgstr "Tamanho"
 msgid "Size (.ipk)"
 msgstr "Tamanho (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Pular"
 
index a54f542..8f2622c 100644 (file)
@@ -2182,6 +2182,9 @@ msgstr "Reparo"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2953,6 +2956,9 @@ msgstr "Tamanho"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Saltar"
 
index e2edecb..86eaa64 100644 (file)
@@ -2112,6 +2112,9 @@ msgstr "Notificare"
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2863,6 +2866,9 @@ msgstr "Marime"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index 03b255f..4ffb723 100644 (file)
@@ -2240,6 +2240,9 @@ msgstr "Заметка"
 msgid "Nslookup"
 msgstr "DNS-запрос"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -3048,6 +3051,9 @@ msgstr "Размер"
 msgid "Size (.ipk)"
 msgstr "Размер (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Пропустить"
 
index dc5bc91..a17ac98 100644 (file)
@@ -2087,6 +2087,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr ""
 
@@ -2835,6 +2838,9 @@ msgstr ""
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index d0bdb69..089546a 100644 (file)
@@ -2108,6 +2108,9 @@ msgstr "Avisering"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2858,6 +2861,9 @@ msgstr "Storlek"
 msgid "Size (.ipk)"
 msgstr "Storlek (.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Hoppa över"
 
index 04c33ad..de8b7fb 100644 (file)
@@ -2080,6 +2080,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr ""
 
@@ -2828,6 +2831,9 @@ msgstr ""
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index b085415..45f4a7c 100644 (file)
@@ -2100,6 +2100,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr ""
 
@@ -2848,6 +2851,9 @@ msgstr ""
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index ba5a4b8..b1feed3 100644 (file)
@@ -2196,6 +2196,9 @@ msgstr "Попередження"
 msgid "Nslookup"
 msgstr "DNS-запит"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK"
 
@@ -2978,6 +2981,9 @@ msgstr "Розмір"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "Пропустити"
 
index f2eeb1f..ecb369e 100644 (file)
@@ -2117,6 +2117,9 @@ msgstr ""
 msgid "Nslookup"
 msgstr ""
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "OK "
 
@@ -2875,6 +2878,9 @@ msgstr "Dung lượng "
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr ""
 
index b8fc23b..4c7dd89 100644 (file)
@@ -723,7 +723,8 @@ 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"
@@ -2132,6 +2133,9 @@ msgstr "注意"
 msgid "Nslookup"
 msgstr "Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "确认"
 
@@ -2905,6 +2909,9 @@ msgstr "大小"
 msgid "Size (.ipk)"
 msgstr "大小(.ipk)"
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "跳过"
 
index e31c01c..28a806e 100644 (file)
@@ -2124,6 +2124,9 @@ msgstr "通知"
 msgid "Nslookup"
 msgstr "DNS偵錯Nslookup"
 
+msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
+msgstr ""
+
 msgid "OK"
 msgstr "行"
 
@@ -2888,6 +2891,9 @@ msgstr "大小"
 msgid "Size (.ipk)"
 msgstr ""
 
+msgid "Size of DNS query cache"
+msgstr ""
+
 msgid "Skip"
 msgstr "跳過"
 
index d5c8dd6..45e2396 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * 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.
@@ -110,6 +110,51 @@ int template_L_striptags(lua_State *L)
        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);
@@ -165,6 +210,8 @@ static const luaL_reg R[] = {
        { "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 },
index 3979487..eefdd17 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * 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.
@@ -428,6 +428,128 @@ char * striptags(const char *s, unsigned int l)
        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)
 {
index 32a79f9..872ecb0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * 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.
@@ -22,6 +22,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdbool.h>
+#include <ctype.h>
 
 
 /* buffer object */
@@ -42,6 +44,8 @@ char * buf_destroy(struct template_buffer *buf);
 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);
index b7b73d7..fbde431 100644 (file)
@@ -115,7 +115,7 @@ s:taboption("advanced", Flag, "nonegcache",
 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"),
@@ -212,6 +212,12 @@ cq.optional = true
 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
@@ -295,7 +301,7 @@ ip = s:option(Value, "ip", translate("<abbr title=\"Internet Protocol Version 4\
 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)"