diff options
-rw-r--r-- | applications/luci-app-nut/po/en/nut.po | 603 | ||||
-rw-r--r-- | applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po | 101 | ||||
-rw-r--r-- | applications/luci-app-uhttpd/po/en/uhttpd.po | 265 | ||||
-rwxr-xr-x | build/i18n-add-language.sh | 37 | ||||
-rw-r--r-- | modules/luci-base/po/zh-cn/base.po | 38 | ||||
-rw-r--r-- | themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css | 335 | ||||
-rw-r--r-- | themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js | 1 | ||||
-rwxr-xr-x | themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js | 48 | ||||
-rwxr-xr-x | themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm | 4 | ||||
-rw-r--r-- | themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm | 5 |
10 files changed, 1367 insertions, 70 deletions
diff --git a/applications/luci-app-nut/po/en/nut.po b/applications/luci-app-nut/po/en/nut.po new file mode 100644 index 0000000000..0f22c26ae0 --- /dev/null +++ b/applications/luci-app-nut/po/en/nut.po @@ -0,0 +1,603 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2019-01-09 06:58-0500\n" +"Last-Translator: Daniel F. Dickinson <cshored@thecshore.com>\n" +"Language-Team: English\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:216 +msgid "Additional Shutdown Time(s)" +msgstr "Additional Shutdown Time(s)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:37 +msgid "Addresses on which to listen" +msgstr "Addresses on which to listen" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:23 +msgid "Allowed actions" +msgstr "Allowed actions" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:20 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:188 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:217 +msgid "As configured by NUT" +msgstr "As configured by NUT" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:150 +msgid "Bytes to read from interrupt pipe" +msgstr "Bytes to read from interrupt pipe" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:174 +msgid "CA Certificate path" +msgstr "CA Certificate path" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:73 +msgid "Certificate file (SSL)" +msgstr "Certificate file (SSL)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:63 +msgid "Communications lost message" +msgstr "Communications lost message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:60 +msgid "Communications restored message" +msgstr "Communications restored message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:35 +msgid "Control UPS via CGI" +msgstr "Control UPS via CGI" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:43 +msgid "Deadtime" +msgstr "Deadtime" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:87 +msgid "Default for UPSes without this field." +msgstr "Default for UPSes without this field." + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:177 +msgid "Delay for kill power command" +msgstr "Delay for kill power command" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:181 +msgid "Delay to power on UPS if power returns after kill power" +msgstr "Delay to power on UPS if power returns after kill power" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:129 +msgid "Description (Display)" +msgstr "Description (Display)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:32 +msgid "Display name" +msgstr "Display name" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:169 +msgid "Don't lock port when starting driver" +msgstr "Don't lock port when starting driver" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:132 +msgid "Driver" +msgstr "Driver" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:114 +msgid "Driver Configuration" +msgstr "Driver Configuration" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:77 +msgid "Driver Global Settings" +msgstr "Driver Global Settings" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:83 +msgid "Driver Path" +msgstr "Driver Path" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:212 +msgid "Driver Shutdown Order" +msgstr "Driver Shutdown Order" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:106 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:244 +msgid "Driver waits for data to be consumed by upsd before publishing more." +msgstr "Driver waits for data to be consumed by upsd before publishing more." + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:59 +msgid "Drop privileges to this user" +msgstr "Drop privileges to this user" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:40 +msgid "Enable" +msgstr "Enable" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:138 +msgid "" +"Enables a hotplug script that makes all ttyUSB devices (e.g. serial USB) " +"group read-write as user 'nut'" +msgstr "" +"Enables a hotplug script that makes all ttyUSB devices (e.g. serial USB) " +"group read-write as user 'nut'" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:93 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:102 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:110 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:118 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:126 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:134 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:142 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:150 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:158 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:166 +msgid "Execute notify command" +msgstr "Execute notify command" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:26 +msgid "Forced Shutdown" +msgstr "Forced Shutdown" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:57 +msgid "Forced shutdown message" +msgstr "Forced shutdown message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:10 +msgid "Global Settings" +msgstr "Global Settings" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:13 +msgid "Go to NUT CGI" +msgstr "Go to NUT CGI" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:16 +msgid "Host" +msgstr "Host" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:23 +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:191 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:220 +msgid "Hostname or address of UPS" +msgstr "Hostname or address of UPS" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:39 +msgid "Hot Sync" +msgstr "Hot Sync" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:41 +msgid "IP Address" +msgstr "IP Address" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:95 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:104 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:112 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:120 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:128 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:136 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:144 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:152 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:160 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:168 +msgid "Ignore" +msgstr "Ignore" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:142 +msgid "Ignore Low Battery" +msgstr "Ignore Low Battery" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:29 +msgid "Instant commands" +msgstr "Instant commands" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:146 +msgid "Interrupt Only" +msgstr "Interrupt Only" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:150 +msgid "Interrupt Size" +msgstr "Interrupt Size" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:54 +msgid "Low battery message" +msgstr "Low battery message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:163 +msgid "Manufacturer (Display)" +msgstr "Manufacturer (Display)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:34 +msgid "Master" +msgstr "Master" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:154 +msgid "Max USB HID Length Reported" +msgstr "Max USB HID Length Reported" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:54 +msgid "Maximum Age of Data" +msgstr "Maximum Age of Data" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:87 +msgid "Maximum Start Delay" +msgstr "Maximum Start Delay" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:67 +msgid "Maximum connections" +msgstr "Maximum connections" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:91 +msgid "Maximum number of times to try starting a driver." +msgstr "Maximum number of times to try starting a driver." + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:101 +msgid "Maximum time in seconds between refresh of UPS status" +msgstr "Maximum time in seconds between refresh of UPS status" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:91 +msgid "Maxium Retries" +msgstr "Maxium Retries" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:158 +msgid "Maxium Start Delay" +msgstr "Maxium Start Delay" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:17 +msgid "Minimum required number or power supplies" +msgstr "Minimum required number or power supplies" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:166 +msgid "Model (Display)" +msgstr "Model (Display)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:9 +msgid "NUT CGI Access" +msgstr "NUT CGI Access" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:12 +msgid "NUT Users" +msgstr "NUT Users" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:188 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:217 +msgid "Name of UPS" +msgstr "Name of UPS" + +#: applications/luci-app-nut/luasrc/controller/nut.lua:11 +msgid "Network UPS Tools" +msgstr "Network UPS Tools" + +#: applications/luci-app-nut/luasrc/controller/nut.lua:22 +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:6 +msgid "Network UPS Tools (CGI)" +msgstr "Network UPS Tools (CGI)" + +#: applications/luci-app-nut/luasrc/controller/nut.lua:18 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:7 +msgid "Network UPS Tools (Monitor)" +msgstr "Network UPS Tools (Monitor)" + +#: applications/luci-app-nut/luasrc/controller/nut.lua:14 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:9 +msgid "Network UPS Tools (Server)" +msgstr "Network UPS Tools (Server)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:7 +msgid "Network UPS Tools CGI Configuration" +msgstr "Network UPS Tools CGI Configuration" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:8 +msgid "Network UPS Tools Monitoring Configuration" +msgstr "Network UPS Tools Monitoring Configuration" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:10 +msgid "Network UPS Tools Server Configuration" +msgstr "Network UPS Tools Server Configuration" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:169 +msgid "No Lock" +msgstr "No Lock" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:72 +msgid "No communications message" +msgstr "No communications message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:173 +msgid "No low/high voltage transfer OIDs" +msgstr "No low/high voltage transfer OIDs" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:75 +msgid "No parent message" +msgstr "No parent message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:90 +msgid "Notification defaults" +msgstr "Notification defaults" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:26 +msgid "Notify command" +msgstr "Notify command" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:99 +msgid "Notify when back online" +msgstr "Notify when back online" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:163 +msgid "Notify when battery needs replacing" +msgstr "Notify when battery needs replacing" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:147 +msgid "Notify when communications lost" +msgstr "Notify when communications lost" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:139 +msgid "Notify when communications restored" +msgstr "Notify when communications restored" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:131 +msgid "Notify when force shutdown" +msgstr "Notify when force shutdown" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:115 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:123 +msgid "Notify when low battery" +msgstr "Notify when low battery" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:107 +msgid "Notify when on battery" +msgstr "Notify when on battery" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:155 +msgid "Notify when shutting down" +msgstr "Notify when shutting down" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:177 +msgid "Off Delay(s)" +msgstr "Off Delay(s)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:181 +msgid "On Delay(s)" +msgstr "On Delay(s)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:51 +msgid "On battery message" +msgstr "On battery message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:48 +msgid "Online message" +msgstr "Online message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:208 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:237 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:19 +msgid "Password" +msgstr "Password" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:174 +msgid "Path containing ca certificates to match against host certificate" +msgstr "Path containing ca certificates to match against host certificate" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:83 +msgid "Path to drivers (instead of default)" +msgstr "Path to drivers (instead of default)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:63 +msgid "Path to state file" +msgstr "Path to state file" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:54 +msgid "Period after which data is considered stale" +msgstr "Period after which data is considered stale" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:101 +msgid "Poll Interval" +msgstr "Poll Interval" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:29 +msgid "Poll frequency" +msgstr "Poll frequency" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:34 +msgid "Poll frequency alert" +msgstr "Poll frequency alert" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:197 +msgid "Polling Frequency(s)" +msgstr "Polling Frequency(s)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:27 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:195 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:224 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:46 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:202 +msgid "Port" +msgstr "Port" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:200 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:229 +msgid "Power value" +msgstr "Power value" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:206 +msgid "Product (regex)" +msgstr "Product (regex)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:69 +msgid "Replace battery message" +msgstr "Replace battery message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:178 +msgid "Require SSL and make sure server CN matches hostname" +msgstr "Require SSL and make sure server CN matches hostname" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:96 +msgid "Retry Delay" +msgstr "Retry Delay" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:32 +msgid "Role" +msgstr "Role" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:80 +msgid "Run drivers in a chroot(2) environment" +msgstr "Run drivers in a chroot(2) environment" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:14 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:59 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:110 +msgid "RunAs User" +msgstr "RunAs User" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:125 +msgid "SNMP Community" +msgstr "SNMP Community" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:222 +msgid "SNMP retries" +msgstr "SNMP retries" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:226 +msgid "SNMP timeout(s)" +msgstr "SNMP timeout(s)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:230 +msgid "SNMP version" +msgstr "SNMP version" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:232 +msgid "SNMPv1" +msgstr "SNMPv1" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:233 +msgid "SNMPv2c" +msgstr "SNMPv2c" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:234 +msgid "SNMPv3" +msgstr "SNMPv3" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:219 +msgid "Serial Number" +msgstr "Serial Number" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:138 +msgid "Set USB serial port permissions" +msgstr "Set USB serial port permissions" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:25 +msgid "Set variables" +msgstr "Set variables" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:22 +msgid "Shutdown command" +msgstr "Shutdown command" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:66 +msgid "Shutdown message" +msgstr "Shutdown message" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:33 +msgid "Slave" +msgstr "Slave" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:106 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:244 +msgid "Synchronous Communication" +msgstr "Synchronous Communication" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:115 +msgid "The name of this section will be used as UPS name elsewhere" +msgstr "The name of this section will be used as UPS name elsewhere" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:96 +msgid "Time in seconds between driver start retry attempts." +msgstr "Time in seconds between driver start retry attempts." + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:158 +msgid "Time in seconds that upsdrvctl will wait for driver to finish starting" +msgstr "Time in seconds that upsdrvctl will wait for driver to finish starting" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:183 +msgid "UPS Master" +msgstr "UPS Master" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:51 +msgid "UPS Server Global Settings" +msgstr "UPS Server Global Settings" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:212 +msgid "UPS Slave" +msgstr "UPS Slave" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:20 +msgid "UPS name" +msgstr "UPS name" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:121 +msgid "USB Bus(es) (regex)" +msgstr "USB Bus(es) (regex)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:209 +msgid "USB Product Id" +msgstr "USB Product Id" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:241 +msgid "USB Vendor Id" +msgstr "USB Vendor Id" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:29 +msgid "" +"Use upscmd -l to see full list which the commands your UPS supports " +"(requires upscmd package)" +msgstr "" +"Use upscmd -l to see full list which the commands your UPS supports " +"(requires upscmd package)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:110 +msgid "" +"User as which to execute driver; requires device file accessed by driver to " +"be read-write for that user." +msgstr "" +"User as which to execute driver; requires device file accessed by driver to " +"be read-write for that user." + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:205 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:234 +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:16 +msgid "Username" +msgstr "Username" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:238 +msgid "Vendor (regex)" +msgstr "Vendor (regex)" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:178 +msgid "Verify all connection with SSL" +msgstr "Verify all connection with SSL" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:154 +msgid "Workaround for buggy firmware" +msgstr "Workaround for buggy firmware" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:94 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:103 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:111 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:119 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:127 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:135 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:143 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:151 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:159 +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:167 +msgid "Write to syslog" +msgstr "Write to syslog" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:80 +msgid "chroot" +msgstr "chroot" + +#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:14 +msgid "upsmon drops privileges to this user" +msgstr "upsmon drops privileges to this user" diff --git a/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po b/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po new file mode 100644 index 0000000000..451e44de1e --- /dev/null +++ b/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2019-01-09 07:01-0500\n" +"Last-Translator: Daniel F. Dickinson <cshored@thecshore.com>\n" +"Language-Team: English\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:19 +msgid "Access Concentrator Name" +msgstr "Access Concentrator Name" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:32 +msgid "First remote IP" +msgstr "First remote IP" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:29 +msgid "IP of listening side" +msgstr "IP of listening side" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:44 +msgid "" +"Instead of starting at beginning and going to end, randomize session number" +msgstr "" +"Instead of starting at beginning and going to end, randomize session number" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:15 +msgid "Interface" +msgstr "Interface" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:15 +msgid "Interface on which to listen." +msgstr "Interface on which to listen." + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:62 +msgid "MSS" +msgstr "MSS" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:35 +msgid "Maximum sessions" +msgstr "Maximum sessions" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:25 +msgid "Maximum sessions per peer" +msgstr "Maximum sessions per peer" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:52 +msgid "Offset" +msgstr "Offset" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:40 +msgid "Options file" +msgstr "Options file" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:52 +msgid "PPP offset" +msgstr "PPP offset" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:47 +msgid "PPP unit number" +msgstr "PPP unit number" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:9 +msgid "PPPoE Server Configuration" +msgstr "PPPoE Server Configuration" + +#: applications/luci-app-rp-pppoe-server/luasrc/controller/rp-pppoe-server.lua:11 +msgid "RP PPPoE Server" +msgstr "RP PPPoE Server" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:44 +msgid "Random session selection" +msgstr "Random session selection" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:8 +msgid "Roaring Penguin PPPoE Server" +msgstr "Roaring Penguin PPPoE Server" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:11 +msgid "Server Configuration" +msgstr "Server Configuration" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:22 +msgid "Service Name" +msgstr "Service Name" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:68 +msgid "Sync" +msgstr "Sync" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:57 +msgid "Timeout" +msgstr "Timeout" + +#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:47 +msgid "Unit" +msgstr "Unit" diff --git a/applications/luci-app-uhttpd/po/en/uhttpd.po b/applications/luci-app-uhttpd/po/en/uhttpd.po new file mode 100644 index 0000000000..67c06d8547 --- /dev/null +++ b/applications/luci-app-uhttpd/po/en/uhttpd.po @@ -0,0 +1,265 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2019-01-09 07:00-0500\n" +"Last-Translator: Daniel F. Dickinson <cshored@theshore.com>\n" +"Language-Team: English\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:135 +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:145 +msgid "404 Error" +msgstr "404 Error" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:7 +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "A lightweight single-threaded HTTP(S) server" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:20 +msgid "Advanced Settings" +msgstr "Advanced Settings" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:135 +msgid "Aliases" +msgstr "Aliases" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:149 +msgid "Base directory for files to be served" +msgstr "Base directory for files to be served" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:22 +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:50 +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "Bind to specific interface:port (by specifying interface address" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:126 +msgid "CGI filetype handler" +msgstr "CGI filetype handler" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:153 +msgid "CGI is disabled if not present." +msgstr "CGI is disabled if not present." + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:142 +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "Config file (e.g. for credentials for Basic Auth)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:187 +msgid "Connection reuse" +msgstr "Connection reuse" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:221 +msgid "Country" +msgstr "Country" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:173 +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "Disable JSON-RPC authorization via ubus session API" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:129 +msgid "Do not follow symlinks outside document root" +msgstr "Do not follow symlinks outside document root" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:132 +msgid "Do not generate directory listings." +msgstr "Do not generate directory listings." + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:148 +msgid "Document root" +msgstr "Document root" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:122 +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "E.g specify with index.html and index.php when using PHP" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:160 +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "Embedded Lua interpreter is disabled if not present." + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:169 +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "Enable JSON-RPC Cross-Origin Resource Support" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:19 +msgid "For settings primarily geared to serving more than the web UI" +msgstr "For settings primarily geared to serving more than the web UI" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:19 +msgid "Full Web Server Settings" +msgstr "Full Web Server Settings" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:160 +msgid "Full real path to handler for Lua scripts" +msgstr "Full real path to handler for Lua scripts" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:18 +msgid "General Settings" +msgstr "General Settings" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:22 +msgid "HTTP listeners (address:port)" +msgstr "HTTP listeners (address:port)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:94 +msgid "HTTPS Certificate (DER Encoded)" +msgstr "HTTPS Certificate (DER Encoded)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:96 +msgid "HTTPS Private Key (DER Encoded)" +msgstr "HTTPS Private Key (DER Encoded)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:50 +msgid "HTTPS listener (address:port)" +msgstr "HTTPS listener (address:port)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:90 +msgid "Ignore private IPs on public interface" +msgstr "Ignore private IPs on public interface" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:122 +msgid "Index page(s)" +msgstr "Index page(s)" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:126 +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:214 +msgid "Length of key in bits" +msgstr "Length of key in bits" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:227 +msgid "Location" +msgstr "Location" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:197 +msgid "Maximum number of connections" +msgstr "Maximum number of connections" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:201 +msgid "Maximum number of script requests" +msgstr "Maximum number of script requests" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:177 +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "Maximum wait time for Lua, CGI, or ubus execution" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:182 +msgid "Maximum wait time for network activity" +msgstr "Maximum wait time for network activity" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:166 +msgid "Override path for ubus socket" +msgstr "Override path for ubus socket" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:153 +msgid "Path prefix for CGI scripts" +msgstr "Path prefix for CGI scripts" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:90 +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:138 +msgid "Realm for Basic Auth" +msgstr "Realm for Basic Auth" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:86 +msgid "Redirect all HTTP to HTTPS" +msgstr "Redirect all HTTP to HTTPS" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:109 +msgid "Remove configuration for certificate and key" +msgstr "Remove configuration for certificate and key" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:98 +msgid "Remove old certificate and key" +msgstr "Remove old certificate and key" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:218 +msgid "Server Hostname" +msgstr "Server Hostname" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:20 +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "" +"Settings which are either rarely needed or which affect serving the WebUI" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:224 +msgid "State" +msgstr "State" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:192 +msgid "TCP Keepalive" +msgstr "TCP Keepalive" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:110 +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "This permanently deletes the cert, key, and configuration to use same." + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:210 +msgid "Valid for # of Days" +msgstr "Valid for # of Days" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:145 +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:156 +msgid "Virtual path prefix for Lua scripts" +msgstr "Virtual path prefix for Lua scripts" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:163 +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "Virtual path prefix for ubus via JSON-RPC integration" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:142 +msgid "Will not use HTTP authentication if not present" +msgstr "Will not use HTTP authentication if not present" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:218 +msgid "a.k.a CommonName" +msgstr "a.k.a CommonName" + +#: applications/luci-app-uhttpd/luasrc/controller/uhttpd/uhttpd.lua:13 +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:6 +msgid "uHTTPd" +msgstr "uHTTPd" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:205 +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "uHTTPd Self-signed Certificate Parameters" + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:99 +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." + +#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:163 +msgid "ubus integration is disabled if not present" +msgstr "ubus integration is disabled if not present" diff --git a/build/i18n-add-language.sh b/build/i18n-add-language.sh new file mode 100755 index 0000000000..24203c2331 --- /dev/null +++ b/build/i18n-add-language.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +LANG=$1 + +case "$LANG" in + [a-z][a-z]|[a-z][a-z]-[a-z][a-z]) : ;; + *) + echo "Usage: $0 <ISO_CODE>\n" >&2 + exit 1 + ;; +esac + +ADDED=0 + +for podir in ./*/*/po; do + [ -d "$podir/templates" ] || continue + + mkdir "$podir/$LANG" + for catalog in $(cd "$podir/templates"; echo *.pot); do + if [ -f "$podir/templates/$catalog" -a ! -f "$podir/$LANG/${catalog%.pot}.po" ]; then + msginit --no-translator -l "$LANG" -i "$podir/templates/$catalog" -o "$podir/$LANG/${catalog%.pot}.po" + git add "$podir/$LANG/${catalog%.pot}.po" + ADDED=$((ADDED + 1)) + fi + done +done + +if [ $ADDED -gt 0 ]; then + echo "" + echo "Added $ADDED new translation catalogs for language '$LANG'." + echo "Please also edit 'luci.mk' and add" + echo "" + echo " LUCI_LANG.$LANG=Native Language Name" + echo "" + echo "to properly package the translation files." + echo "" +fi diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po index ac57c19da5..5fce99935c 100644 --- a/modules/luci-base/po/zh-cn/base.po +++ b/modules/luci-base/po/zh-cn/base.po @@ -1,10 +1,10 @@ # # Yangfl <mmyangfl@gmail.com>, 2018. -# Zheng Qian <sotux82@gmail.com>, 2018. +# Zheng Qian <sotux82@gmail.com>, 2019. # msgid "" msgstr "" -"PO-Revision-Date: 2018-12-14 09:11+0800\n" +"PO-Revision-Date: 2019-01-10 16:10+0800\n" "Last-Translator: Yangfl <mmyangfl@gmail.com>\n" "Language-Team: <debian-l10n-chinese@lists.debian.org>\n" "Language: \n" @@ -493,11 +493,11 @@ msgstr "总是通告默认路由" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:50 msgid "Always off (%s)" -msgstr "" +msgstr "总是关闭(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:48 msgid "Always on (%s)" -msgstr "" +msgstr "总是开启(%s)" #: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:258 msgid "" @@ -920,7 +920,7 @@ msgstr "更改访问设备的管理员密码" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:10 msgid "Changing password…" -msgstr "正在更改密码……" +msgstr "正在更改密码…" #: modules/luci-base/luasrc/view/cbi/wireless_modefreq.htm:157 #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wifi_status.js:45 @@ -1184,7 +1184,7 @@ msgstr "" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:52 msgid "Custom flash intervall (%s)" -msgstr "" +msgstr "自定义闪烁间隔(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:4 msgid "" @@ -1935,7 +1935,7 @@ msgstr "正在刷写…" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:60 #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:62 msgid "Flashmemory write access (%s)" -msgstr "" +msgstr "闪存写访问(%s)" #: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:498 msgid "Force" @@ -2128,7 +2128,7 @@ msgstr "请求头错误代码错误(HEC)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:56 msgid "Heartbeat intervall (%s)" -msgstr "" +msgstr "心跳间隔(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:14 msgid "" @@ -2850,7 +2850,7 @@ msgstr "加载中" #: modules/luci-mod-system/luasrc/view/admin_system/sshkeys.htm:35 msgid "Loading SSH keys…" -msgstr "正在加载 SSH 密钥……" +msgstr "正在加载 SSH 密钥…" #: modules/luci-base/luasrc/model/network.lua:30 msgid "Local IP address is invalid" @@ -3266,7 +3266,7 @@ msgstr "网络启动镜像" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:54 msgid "Network device activity (%s)" -msgstr "" +msgstr "网络设备活动(%s)" #: modules/luci-base/luasrc/model/network.lua:33 msgid "Network device is not present" @@ -3467,7 +3467,7 @@ msgstr "一个或多个必选项值为空!" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:19 msgid "Open list..." -msgstr "打开列表……" +msgstr "打开列表…" #: protocols/luci-proto-openconnect/luasrc/model/network/proto_openconnect.lua:9 msgid "OpenConnect (CISCO AnyConnect)" @@ -4398,7 +4398,7 @@ msgstr "保存 mtdblock 内容" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:120 msgid "Saving keys…" -msgstr "正在保存密钥……" +msgstr "正在保存密钥…" #: modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm:15 msgid "Scan" @@ -4770,7 +4770,7 @@ msgstr "切换到 CIDR 列表记法" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:64 msgid "Switchport activity (%s)" -msgstr "" +msgstr "交换口活动(%s)" #: modules/luci-mod-system/luasrc/view/admin_system/clock_status.htm:25 #: modules/luci-mod-system/luasrc/view/admin_system/clock_status.htm:34 @@ -5167,7 +5167,7 @@ msgstr "时区" #: modules/luci-base/htdocs/luci-static/resources/xhr.js:47 msgid "To login…" -msgstr "登录……" +msgstr "去登录…" #: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:32 msgid "" @@ -5665,23 +5665,23 @@ msgstr "" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:74 msgid "Wi-Fi activity (%s)" -msgstr "" +msgstr "Wi-Fi 活动(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:70 msgid "Wi-Fi client association (%s)" -msgstr "" +msgstr "Wi-Fi 客户端关联(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:66 msgid "Wi-Fi data reception (%s)" -msgstr "" +msgstr "Wi-Fi 数据接收(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:68 msgid "Wi-Fi data transmission (%s)" -msgstr "" +msgstr "Wi-Fi 数据传输(%s)" #: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:72 msgid "Wi-Fi on (%s)" -msgstr "" +msgstr "Wi-Fi 开启(%s)" #: modules/luci-base/luasrc/view/cbi/wireless_modefreq.htm:161 msgid "Width" diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css b/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css index 77f0ecf3e2..ab7cac626c 100644 --- a/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css +++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css @@ -23,25 +23,32 @@ font-weight: normal; font-style: normal; } + strong { font-weight: normal; } + .table { display: table; position: relative; } + .tr { display: table-row; } + .thead { display: table-header-group; } + .tbody { display: table-row-group; } + .tfoot { display: table-footer-group; } + .td, .th { vertical-align: middle; @@ -49,13 +56,16 @@ strong { display: table-cell; padding: .8em; } + .th { font-weight: normal; } + .tr.placeholder { height: 4em; background-color: #f9f9f9; } + .tr.placeholder>.td { position: absolute; left: 0; @@ -65,56 +75,69 @@ strong { line-height: 3em; background: #f9f9f9; } + .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } + .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + .col-1 { flex: 1 1 30px !important; -webkit-flex: 1 1 30px !important; } + .col-2 { flex: 2 2 60px !important; -webkit-flex: 2 2 60px !important; } + .col-3 { flex: 3 3 90px !important; -webkit-flex: 3 3 90px !important; } + .col-4 { flex: 4 4 120px !important; -webkit-flex: 4 4 120px !important; } + .col-5 { flex: 5 5 150px !important; -webkit-flex: 5 5 150px !important; } + .col-6 { flex: 6 6 180px !important; -webkit-flex: 6 6 180px !important; } + .col-7 { flex: 7 7 210px !important; -webkit-flex: 7 7 210px !important; } + .col-8 { flex: 8 8 240px !important; -webkit-flex: 8 8 240px !important; } + .col-9 { flex: 9 9 270px !important; -webkit-flex: 9 9 270px !important; } + .col-10 { flex: 10 10 300px !important; -webkit-flex: 10 10 300px !important; } + .cbi-button-up, .cbi-button-down, .cbi-value-helpicon, @@ -129,26 +152,42 @@ strong { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + * { margin: 0; padding: 0; box-sizing: border-box; } -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { font-family: inherit; font-weight: normal; line-height: 1.1; color: inherit; } + html { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; position: relative; } + body { font-size: 0.8rem; background-color: #EEE; } + html, body { margin: 0px; @@ -157,6 +196,7 @@ body { min-height: 100%; font-family: Microsoft Yahei, WenQuanYi Micro Hei, sans-serif, "Helvetica Neue", Helvetica, Hiragino Sans GB; } + select { padding: 0.36rem 0.8rem; color: #555; @@ -164,6 +204,7 @@ select { background-image: none; border: 1px solid #ccc; } + select, input, .cbi-dropdown { @@ -179,30 +220,37 @@ input, height: auto; font-size: 0.8rem; } + select:not([multiple="multiple"]):focus, input:focus { border-color: #0099CC; } + select[multiple="multiple"] { height: auto; } + code { color: #0099CC; } + abbr { color: #005470; text-decoration: underline; cursor: help; } + hr { margin: 1rem 0; border-color: #EEE; opacity: 0.1; } + footer>a { color: #aaa; text-decoration: none; } + .main>.loading { position: fixed; width: 100%; @@ -212,6 +260,7 @@ footer>a { background-color: #354057; top: 0; } + .main>.loading>span { display: block; text-align: center; @@ -220,27 +269,34 @@ footer>a { font-size: 1.2rem; line-height: 45px; } + .main>.loading>span>.loading-img { margin-right: 0.2rem; display: inline-block; } + .main>.loading>span>.loading-img img { vertical-align: middle; } + .pull-right { float: right; } + .pull-left { float: left; } + li { list-style-type: none; } + h1 { font-size: 2rem; padding-bottom: 10px; border-bottom: 1px solid #eee; } + h2 { margin: 2rem 0 0 0; color: #354057; @@ -248,23 +304,28 @@ h2 { padding-bottom: 10px; border-bottom: 1px solid #eee; } + h3 { margin: 2rem 0 0 0; font-size: 1.4rem; padding-bottom: 10px; } + h4 { margin: 2rem 0 0 0; font-size: 1.2rem; padding-bottom: 10px; } + .mobile-hide { display: inline-block; } + .PC-hide { width: 100%; display: none; } + .cbi-section { margin: 1rem 0 0 0; padding: 2rem; @@ -278,9 +339,11 @@ h4 { background-color: #FFF; -webkit-overflow-scrolling: touch; } + .cbi-section>legend { display: none !important; } + .cbi-section>h3:first-child, .panel-title { width: 100%; @@ -291,10 +354,12 @@ h4 { padding-bottom: 1rem; margin: 0; } + .table { width: 100%; border-radius: 20px; } + .table>.tbody>.tr>.td, .table>.tbody>.tr>.th, .table>.tfoot>.tr>.td, @@ -305,65 +370,63 @@ h4 { border-top: 1px solid #ddd; white-space: nowrap; } + .cbi-section-table-cell { white-space: nowrap; align-self: flex-end; flex: 1 1 auto; } + .cbi-section-table { border: none; } + .cbi-section-table-row { text-align: center; margin-bottom: 1rem; background: #f4f4f4; } + .cbi-section-table-row:last-child { margin-bottom: 0; } + .cbi-section-table-row>.cbi-value-field .cbi-input-select, .cbi-section-table-row>.cbi-value-field .cbi-input-text, .cbi-section-table-row>.cbi-value-field .cbi-input-password, .cbi-section-table-row>.cbi-value-field .cbi-dropdown { width: 100%; } + .cbi-section-table-row>.cbi-value-field [data-dynlist]>input, .cbi-section-table-row>.cbi-value-field input.cbi-input-password { width: calc(100% - 1.5rem); } -div>table>tbody>tr:nth-of-type(2n), -div>.table>.tbody>.tr:nth-of-type(2n) { - background-color: #f9f9f9; -} -div>table>tbody>tr:nth-of-type(2n), -div>.table>.tbody>.tr:nth-of-type(2n) { - background-color: #f9f9f9; -} -.cbi-section .table .tr.table-titles { - background-color: #eee; -} + .table .tr:first-child .td:first-child, .table .tr:first-child::before, .table .tr:first-child .th:first-child { border-top-left-radius: 10px; } + .table .tr:first-child .td:last-child, .table .tr:first-child .th:last-child { border-top-right-radius: 10px; } + .table .tr:last-child .td:first-child, .table .tr:last-child::before { border-bottom-left-radius: 10px; } + .table .tr:last-child .td:last-child { border-bottom-right-radius: 10px; } + .table .tr.placeholder:last-child { background-color: transparent; } -.cbi-section .table .cbi-section-table-titles { - background-color: #e0e0e0; -} + /* fix progress bar */ .cbi-progressbar { background-color: #9bc1cc; @@ -371,11 +434,13 @@ div>.table>.tbody>.tr:nth-of-type(2n) { overflow: hidden; position: relative; } + .cbi-progressbar div { background-color: #468ea4; height: 20px; border-radius: 20px; } + .cbi-progressbar::after { content: attr(title); position: absolute; @@ -387,34 +452,39 @@ div>.table>.tbody>.tr:nth-of-type(2n) { line-height: 1.2rem; color: #fff; } + /* fix multiple table */ table table, .table .table { border: none; } + .cbi-value-field table, .cbi-value-field .table { border: none; } + td>table>tbody>tr>td, .td>.table>.tbody>.tr>.td { border: none; } + .cbi-value-field>table>tbody>tr>td, .cbi-value-field>.table>.tbody>.tr>.td { border: none; } + /* button style */ .btn, .cbi-button { margin: 0 .8rem .5rem 0; -webkit-appearance: none; - color: #354057; - background-color: transparent; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; transition: all 0.2s ease-in-out; display: inline-block; padding: .5rem .8rem; - border: 1px solid; + border: none; border-radius: 25px; cursor: pointer; -ms-touch-action: manipulation; @@ -432,6 +502,7 @@ td>table>tbody>tr>td, display: inline-block; text-decoration: none; } + .btn:disabled, .cbi-button:disabled { cursor: not-allowed; @@ -439,6 +510,7 @@ td>table>tbody>tr>td, opacity: 0.60; box-shadow: none; } + .cbi-page-actions .cbi-button-apply, .cbi-section-actions .cbi-button-edit, .cbi-button-edit.important, @@ -450,6 +522,7 @@ td>table>tbody>tr>td, background-color: #337ab7; border: none; } + .cbi-button-add.important, .cbi-button-save.important, .cbi-button-positive.important, @@ -459,6 +532,7 @@ td>table>tbody>tr>td, background-color: transparent; border: 1px solid #337ab7; } + .cbi-button-remove.important, .cbi-button-reset.important, .cbi-button-negative.important { @@ -466,6 +540,7 @@ td>table>tbody>tr>td, background-color: #d9534f; border: none; } + .cbi-button-find, .cbi-button-link, .cbi-button-up, @@ -475,6 +550,7 @@ td>table>tbody>tr>td, background-color: transparent; border: 1px solid #468ea4; } + .cbi-button-edit, .cbi-button-reload, .cbi-button-action { @@ -482,6 +558,7 @@ td>table>tbody>tr>td, background-color: transparent; border: 1px solid #468ea4; } + .cbi-page-actions .cbi-button-apply+.cbi-button-save, .cbi-button-add, .cbi-button-save, @@ -490,6 +567,7 @@ td>table>tbody>tr>td, background-color: transparent; border: 1px solid #354057; } + .cbi-section-remove>.cbi-button, .cbi-button-remove, .cbi-button-reset, @@ -498,12 +576,15 @@ td>table>tbody>tr>td, background-color: transparent; border: 1px solid #F24C7C; } + .cbi-page-actions .cbi-button-link:first-child { float: left; } + .a-to-btn { text-decoration: none; } + /* table */ .container>.tabs, .container>.tabs>li[class~="active"], @@ -513,78 +594,91 @@ td>table>tbody>tr>td, .container>.cbi-tabmenu>li:hover { border-radius: 20px; } + .container .cbi-map .cbi-tabmenu, .container .cbi-map .cbi-tabmenu>li[class~="cbi-tab"], .container .cbi-map .cbi-tabmenu>li:hover { border-top-left-radius: 10px; border-top-right-radius: 10px; } + .container .cbi-map .cbi-tabmenu, .container>.tabs, .container>.cbi-tabmenu { overflow: hidden; } + .container .cbi-map .cbi-tabmenu+div { border-radius: 0; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; } + .tabs { background-color: #FFFFFF; margin-top: 1rem; } + .cbi-tabmenu>li, .tabs>li { margin-right: .4rem; display: inline-block; padding: 0.6rem 0rem; } + .cbi-tabmenu>li>a, .tabs>li>a { text-decoration: none; color: #404040; padding: 0.5rem 0.8rem; } + .tabs>li[class~="active"], .tabs>li:hover { cursor: pointer; background-color: #337ab7; } + .tabs>li[class~="active"]>a, .tabs>li:hover>a { color: #fff; } + .cbi-tabmenu { border-top: 1px solid #D4D4D4; border-left: 1px solid #D4D4D4; border-right: 1px solid #D4D4D4; } + .cbi-tabmenu>li:hover { background-color: #F1F1F1; } + .cbi-tabmenu>li[class~="cbi-tab"] { background-color: #fff; } + .cbi-tabmenu { background-color: #D4D4D4; } [data-tab-title] { - height: 0; - opacity: 0; - overflow: hidden; + height: 0; + opacity: 0; + overflow: hidden; } [data-tab-active="true"] { - opacity: 1; - height: auto; - overflow: visible; - transition: opacity .25s ease-in; + opacity: 1; + height: auto; + overflow: visible; + transition: opacity .25s ease-in; } .cbi-section-remove:nth-of-type(2n) { background-color: #f9f9f9; } + .cbi-section-node-tabbed { padding: 0; margin-top: 0; @@ -592,20 +686,25 @@ td>table>tbody>tr>td, border-left: 1px solid #D4D4D4; border-right: 1px solid #D4D4D4; } + .cbi-tabcontainer>.cbi-value:nth-of-type(2n) { background-color: #f9f9f9; } + .cbi-value-field, .cbi-value-description { display: table-cell; line-height: 1.25; } + .cbi-value-helpicon>img { display: none; } + .cbi-value-helpicon:before { content: "\f059"; } + .cbi-value-description { font-size: small; opacity: 0.5; @@ -659,12 +758,19 @@ td>table>tbody>tr>td, vertical-align: middle; } -.cbi-rowstyle-1 { +.table .tr.cbi-rowstyle-2, +.table .tr:nth-child(n) { + background-color: #eee; +} + +.table .tr.cbi-rowstyle-1, +.table .tr:nth-child(2n) { background-color: #f9f9f9; } -.cbi-rowstyle-2 { - background-color: #eee; +.table .tr.table-titles, +.table .tr.cbi-section-table-titles { + background-color: #ddd; } .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { @@ -1370,10 +1476,6 @@ header>.container>.pull-right>* { .node-status-processes .cbi-section { overflow-x: scroll; } -.node-status-iptables #iptables .table-titles, -.node-system-opkg #packages .cbi-section-table-titles { - background-color: #eee; -} /* fix status realtime traffic and wireless */ @@ -1418,6 +1520,7 @@ header>.container>.pull-right>* { .node-services-samba.lang_enNetwork #cbi-samba-sambashare .table-container { overflow-x: scroll; } + .node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-title { margin-bottom: 1rem; width: auto; @@ -1645,8 +1748,7 @@ header .logout a { float: right; width: calc(100% + 10px); height: calc(100% - 110px); - overflow-y: scroll; - overflow-x: hidden; + overflow: hidden; } .main>.main-left .nav { @@ -1784,6 +1886,25 @@ footer { right: 0; } +.modal-overlay-active #modal_overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + background-color: #000000b8; + z-index: 2000; +} + +.modal-overlay-active #modal_overlay .modal { + width: 50%; + background-color: #fff; + margin: 150px auto; + border-radius: 20px; + color: #333; +} + /* The style of the prompt message */ .alert-message { @@ -1837,20 +1958,25 @@ footer { min-height: 100%; background: #fff url(./loginBG.png) no-repeat center center / cover; } + .node-main-login header { display: none; } + .node-main-login .main { height: auto; } + .node-main-login>.main>.main-left { display: none; } + .node-main-login>.main>.main-right { width: 100%; height: auto; min-height: 100%; } + .node-main-login>.main #maincontent { position: absolute; min-width: 492px; @@ -1861,12 +1987,14 @@ footer { height: auto; text-align: center; } + .node-main-login>.main .container { padding: 0; width: 30%; max-width: 492px; display: inline-block; } + .node-main-login>.main .logoImg a { margin: 0 0 18px 0; display: block; @@ -1874,13 +2002,16 @@ footer { color: #fff; text-decoration: none; } + .node-main-login>.main .logoImg img:first-child { width: 72px; } + .node-main-login .warning { background-color: #3E4A62; color: #fff; } + .node-main-login>.main form h2 { margin: 17px 0; padding: 0; @@ -1889,32 +2020,38 @@ footer { font-weight: normal; border: 0; } + .node-main-login>.main form .cbi-map-descr { margin: 0 0 12px; padding: 0; font-size: 12px; color: #B1B6BB; } + .node-main-login>.main form .cbi-section { margin: 0; padding: 0; background-color: transparent; box-shadow: none; } + .node-main-login>.main form .cbi-value { display: block; } + .node-main-login>.main form .cbi-value-title { margin: 0; padding: 0; display: none; } -.node-main-login>.main form .cbi-value-field { + +.node-main-login>.main form .cbi-value .cbi-value-field { margin-bottom: 16px; display: block; width: 100%; position: relative; } + .node-main-login>.main form .cbi-value-field input { padding-left: 48px; width: 100%; @@ -1924,6 +2061,7 @@ footer { font-size: 20px; color: #9c9fa1; } + .node-main-login form .cbi-value-field .iconpwd, .node-main-login form .cbi-value-field .iconuser, .node-main-login form .cbi-value-field .iconeye { @@ -1934,28 +2072,35 @@ footer { left: 16px; transform: translateY(-50%); } + .node-main-login form .cbi-value-field .iconpwd { background: transparent url(./pwd.png) no-repeat center center / 100%; } + .node-main-login form .cbi-value-field .iconuser { background: transparent url(./user.png) no-repeat center center / 100%; } + .node-main-login form .cbi-value-field .iconeye { left: auto; right: 16px; background: transparent url(./op-eye.png) no-repeat center center / 100%; } + .node-main-login form .cbi-value-field .cleye { background-image: url(./cl-eye.png); } + .node-main-login form .cbi-value-field .opeye { background-image: url(./op-eye.png); } + .node-main-login form .cbi-page-actions { padding: 0; border: 0; text-align: center; } + .node-main-login form .cbi-page-actions input { margin: 0 0 0 -4px; padding: 9px 0; @@ -1965,38 +2110,47 @@ footer { width: 50%; font-size: 18px; } + .node-main-login form .cbi-page-actions .cbi-button-apply { background-color: #F24C7C; border-top-left-radius: 50px; border-bottom-left-radius: 50px; } + .node-main-login form .cbi-page-actions .cbi-button-reset { background-color: #8a4568; color: #fff; border-top-right-radius: 50px; border-bottom-right-radius: 50px; } + .node-main-login input.cbi-input-text { box-shadow: 0 0 0 1000px white inset; } + /* Interface after login */ .logged-in { background-color: #EBF1F6; } + .logged-in header { height: 70px; } + .logged-in .main { overflow: hidden; } + .logged-in .main-right { padding: 0 1rem 3rem 0; margin-top: 90px; float: right; } + .logged-in .main .logoImg { display: none; } + .logged-in .main .main-left .nav-container { background-color: #354057; border-radius: 20px; @@ -2006,6 +2160,7 @@ footer { right: -10px; bottom: 10px; } + .logged-in .main .main-left .brand { margin: 0 auto; padding: 44px 0 23px; @@ -2023,11 +2178,13 @@ footer { -webkit-text-overflow: ellipsis; -o-text-overflow: ellipsis; } + .logged-in .alert-message { padding: 20px 2rem; border: none; background-color: #fff; } + .logged-in .alert-message a { padding: 8px 2rem; width: auto; @@ -2035,65 +2192,81 @@ footer { background-color: #468EA4; color: #fff; } + @media screen and (max-width: 1600px) { .main-left { width: calc(0% + 13rem); } + .btn, .cbi-button { padding: 0.3rem 0.6rem; font-size: 0.8rem; } + header>.container>.pull-right>* { top: 0.35rem; } + .label { padding: 0.2rem 0.6rem; } + .cbi-value-title { width: 15rem; padding-right: 0.6rem; } + .cbi-input-textarea { font-size: small; } } + @media screen and (max-width: 1280px) { .node-main-login>.main .container { width: 50%; } + .cbi-tabmenu>li>a, .tabs>li>a { padding: 0.2rem 0.5rem; } + .panel-title { font-size: 1.1rem; padding-bottom: 1rem; } + table { font-size: 0.7rem !important; width: 100% !important; } + .main>.main-left .nav>li, .main>.main-left .nav>li a, .main>.main-left .nav>.slide>.menu { font-size: 0.9rem; } + .main>.main-left .nav>.slide>.slide-menu>li>a { font-size: 0.7rem; } } + @media screen and (max-width: 992px) { .logged-in header { padding: 0 .8rem; height: 45px; } + header .brand { display: none; } + header .btn-con { line-height: 45px; } + .main-left { width: auto; height: auto; @@ -2108,35 +2281,49 @@ footer { min-width: 0; overflow: hidden; } + + .main>.main-left .navbar-container { + overflow-y: scroll; + overflow-x: hidden; + } + .main>.main-left .nav>.slide>.slide-menu>li { width: 90%; } + header .container { line-height: 43px; } + .main-right { width: 100%; } + .node-main-login>.main .container { width: 60%; } + .showSide { padding: 0.1rem; display: inline-block; vertical-align: middle; } + .cbi-value-title { width: 9rem; padding-right: 1rem; } + #diag-rc-output>pre { font-size: 1rem; } + .tr { display: flex; flex-direction: row; flex-wrap: wrap; } + .th, .td { flex: 2 2 25%; @@ -2145,48 +2332,57 @@ footer { word-wrap: break-word; display: inline-block; } + .td select, .td input[type="text"] { word-wrap: normal; width: 100%; } + .td [data-dynlist]>input, .td input.cbi-input-password { width: calc(100% - 1.5rem); } + .td[data-type="button"], .td[data-type="fvalue"] { flex: 1 1 12.5%; text-align: left; } + .th.cbi-value-field, .td.cbi-value-field, .th.cbi-section-table-cell, .td.cbi-section-table-cell { flex-basis: auto; } + .cbi-section-table-row { display: flex; flex-wrap: wrap; flex-direction: row; justify-content: space-between; } + .td.cbi-value-field, .cbi-section-table-cell { text-align: center; display: inline-block; flex: 10 10 auto; } + .td.cbi-section-actions { text-align: right; align-self: flex-end; vertical-align: bottom; } + .tr.table-titles, .tr.cbi-section-table-titles, .tr.cbi-section-table-descr { display: none; } + .tr[data-title]::before, .tr.cbi-section-table-titles.named::before { display: block; @@ -2195,24 +2391,30 @@ footer { font-size: .9rem; border-bottom: 1px solid rgba(0, 0, 0, .26); } + .td[data-title] { text-align: left; font-size: 12px; } + .td[data-title]::before { display: block; } + .hide-sm, .hide-xs { display: none; } + /* All styles of the login interface */ .node-main-login .showSide { display: none !important; } + .logged-in .main { padding-bottom: .8rem; } + .logged-in .main .main-left .nav-container { background-color: #354057; border-radius: 0; @@ -2222,6 +2424,7 @@ footer { right: 20%; bottom: 0; } + .logged-in .main-right { padding: 0 .8rem; margin-top: calc(45px + .8rem); @@ -2229,69 +2432,86 @@ footer { max-width: unset; float: unset; } + .logged-in .alert-message { padding: 8px .8rem; } + .cbi-section { margin: .8rem 0 0 0; padding: .8rem; } + small { font-size: 10px; line-height: 0; } + .cbi-section>h3:first-child, .panel-title { font-size: 1rem; } + .network-status-table .ifacebox-body>span { font-size: 12px; } + .cbi-section .ifacebox-body .ifacebadge>span { font-size: 12px; } + .table .tr.cbi-rowstyle-1:nth-child(n), .table .tr:nth-child(n) { font-size: 12px; } + .node-network-firewall .table .tr.cbi-rowstyle-1:nth-child(n), .node-network-firewall .table .tr:nth-child(n) { border-radius: 20px; overflow: hidden; } + h2 { margin: 1rem 0 0 0; font-size: 1.4rem; padding-bottom: 0; border-bottom: none; } + h4 { font-size: 1rem; } + .cbi-section-node-tabbed { padding: 0 .5rem; } + .cbi-button, .cbi-button-action.important { margin-right: .3rem; } + select { border-bottom: 1px solid rgba(0, 0, 0, .26); } + .node-status-processes .table .tr.cbi-rowstyle-1:nth-child(n), .node-status-processes .table .tr:nth-child(n) { border-radius: 20px; } } + @media screen and (max-width: 768px) { .node-main-login { background: none; } + .node-main-login>.main .logoImg a { font-size: 30px; margin: 12px 0 22px 0; color: #354057; } + .node-main-login>.main #maincontent { padding-top: 0; padding-bottom: 1rem; @@ -2299,49 +2519,61 @@ footer { top: 0; transform: translateY(0) translateX(-50%); } + .alert-message { padding: 8px 15%; } + .alert-message>h4 { font-size: 14px; } + .alert-message>p, .alert-message a { font-size: 12px; } + .a lert-message>h4 { padding: 8px 0 8px 36px; } + .alert-message a { padding: 8px 0; margin-top: 8px; } + .node-main-login .warning { background-color: #F5F5F6; color: #354057; } + .alert-message a { color: #f24c7c; background: #fff; } + .node-main-login>.main form h2 { font-size: 16px; margin: 20px 0 16px; color: #354057; } + .node-main-login>.main form .cbi-value-field input { padding-left: 34px; height: 36px; background-size: 16px; font-size: 16px; } + .node-main-login>.main form .cbi-value-field { margin-bottom: 20px; } + .node-main-login form .cbi-page-actions input { padding: 6px 0; font-size: 16px; } + .node-main-login form .cbi-value-field .iconpwd, .node-main-login form .cbi-value-field .iconuser, .node-main-login form .cbi-value-field .iconeye { @@ -2349,21 +2581,26 @@ footer { width: 16px; left: 12px; } + .node-main-login form .cbi-value-field .iconeye { left: auto; right: 12px; } + .mobile-hide { display: none; } + .PC-hide { display: inline-block; } } + @media screen and (max-width: 480px) { body { font-size: 1rem; } + .cbi-value-title { width: 100%; min-width: 0rem !important; @@ -2372,42 +2609,53 @@ footer { margin-bottom: 0.5rem; text-align: left; } + .cbi-value-field, .cbi-value-description { width: 100%; } + .cbi-value>.cbi-value-field { display: inline-block; } + .cbi-tabmenu>li, .tabs>li { padding: 0.6rem 0rem; } + .cbi-tabmenu>li>a, .tabs>li>a { padding: 0.2rem 0.3rem; font-size: 0.9rem; } + .cbi-page-actions>div>input { display: none; } + .tabs>li>a { font-size: 0.9rem; } + select, input { font-size: 10px; } + .panel-title { font-size: 1.4rem; padding-bottom: 1rem; } + .node-system-packages>.main .cbi-value.cbi-value-last>div { width: 100% !important; } + .node-system-packages>.main .cbi-value .cbi-value-field input { width: 100%; } + .node-status-iptables>.main div>.cbi-map>form { position: static !important; margin: 0 0 2rem 0; @@ -2422,66 +2670,83 @@ footer { border-radius: 20px; -webkit-overflow-scrolling: touch; } + .node-status-iptables>.main div>.cbi-map>form input[type="submit"] { width: 100% !important; margin: 0; } + .node-status-iptables>.main div>.cbi-map>form input[type="submit"]+input[type="submit"] { margin-top: 1rem; } + .node-main-login>.main .container { min-width: 90%; } + .th, .td { flex-basis: 50%; } + .td.cbi-value-field { flex-basis: 100%; } + .td.cbi-value-field[data-type="dvalue"] { flex-basis: 50%; } + .td.cbi-value-field[data-type="button"], .td.cbi-value-field[data-type="fvalue"] { flex-basis: 25%; text-align: left; } + .tr[data-title]::before, .tr.cbi-section-table-titles.named::before { font-size: 1rem; } + .hide-xs { display: none; } + /* All styles of the login interface */ .node-main-login>.main .cbi-value { padding: 0; } + .alert-message { padding: 8px 10%; } } + @media screen and (min-width: 992px) { .cbi-value-field .cbi-input-select { width: 20rem; } + .cbi-value-field .cbi-dropdown { min-width: 20rem; } } + @media screen and (min-width: 1280px) { .cbi-value-field .cbi-input-select { width: 22rem; } + .cbi-value-field .cbi-dropdown { min-width: 22rem; } } + @media screen and (min-width: 1600px) { .cbi-value-field .cbi-input-select { width: 25rem; } + .cbi-value-field .cbi-dropdown { min-width: 25rem; } diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js new file mode 100644 index 0000000000..38d82d103e --- /dev/null +++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js @@ -0,0 +1 @@ +!function(win,dom){function MyScrollBar(o){this.init(o)}function getStyle(obj,name){return win.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name]}function setStyle(obj,oStyle){for(var i in oStyle)obj.style[i]=oStyle[i]}function getOffsetSize(obj){var sDisplay=getStyle(obj,"display"),res={};if("none"!=sDisplay)res.width=obj.offsetWidth,res.height=obj.offsetHeight;else{var oldStyle={position:getStyle(obj,"position"),visibility:getStyle(obj,"visibility"),display:sDisplay},newStyle;setStyle(obj,{position:"absolute",visibility:"hidden",display:"inline-block"}),res.width=obj.offsetWidth,res.height=obj.offsetHeight,setStyle(obj,oldStyle)}return res}function getClientSize(obj){var iTopW=parseInt(getStyle(obj,"borderTopWidth")),iRightW=parseInt(getStyle(obj,"borderRightWidth")),iBottomW=parseInt(getStyle(obj,"borderBottomWidth")),iLeftW=parseInt(getStyle(obj,"borderLeftWidth")),oOffset=getOffsetSize(obj);return{width:oOffset.width<=0?oOffset.width:oOffset.width-iLeftW-iRightW,height:oOffset.height<=0?oOffset.height:oOffset.height-iTopW-iBottomW}}function canSelectText(bCan){bCan?(dom.body.style.mozUserSelect="text",dom.body.style.webkitUserSelect="text",dom.body.style.msUserSelect="text",dom.body.style.khtmlUserSelect="text",dom.body.style.userSelect="text"):(dom.body.style.mozUserSelect="none",dom.body.style.webkitUserSelect="none",dom.body.style.msUserSelect="none",dom.body.style.khtmlUserSelect="none",dom.body.style.userSelect="none")}function getPosition(obj,goal){var oPos={top:obj.offsetTop,left:obj.offsetLeft};if(obj.parentNode==goal)return oPos;var obj=getPosition(obj.parentNode,goal);oPos.top+=obj.top,oPos.left+=obj.left}MyScrollBar.prototype.init=function(o){this.bYBar=!1,this.iScrollTop=0,this.iScrollLeft=0,this.bYShow=!1,this.oWrapper=dom.getElementById(o.selId),this.oScroll=this.oWrapper.firstElementChild,this.setParam(o),this.addScrollBar(),this.initState(),this.initEvent()},MyScrollBar.prototype.initState=function(){var sWPosition;"static"==getStyle(this.oWrapper,"position")&&setStyle(this.oWrapper,{position:"relative"}),setStyle(this.oScroll,{position:"relative"}),this.bYBar&&(setStyle(this.oYBox,{display:this.enterShow?"none":"block",position:"absolute",top:0,right:0,zIndex:10,width:this.width+"px",height:"100%",backgroundColor:this.bgColor}),setStyle(this.oYBar,{position:"absolute",top:0,left:0,width:"100%",backgroundColor:this.barColor,borderRadius:this.borderRadius+"px",transition:"all "+this.time+"ms"})),this.setSize()},MyScrollBar.prototype.initEvent=function(){var _this=this,sUserAgent;-1!=win.navigator.userAgent.toLowerCase().indexOf("firefox")?this.oWrapper.addEventListener("DOMMouseScroll",function(e){_this.bYBar&&_this.bYShow&&(e.preventDefault(),_this.iScrollTop+=e.detail>0?60:-60,_this.iScrollTop=_this.iScrollTop<=0?0:_this.iScrollTop>=_this.iScrollH-_this.iWrapperH?_this.iScrollH-_this.iWrapperH:_this.iScrollTop,_this.setTransLate(),_this.setYTop(_this.iScrollTop/_this.iScrollH*_this.iYBoxH))}):this.oWrapper.onmousewheel=function(evt){if(_this.bYBar&&_this.bYShow){var e=evt||win.event;evt?e.preventDefault():e.returnValue=!1,_this.iScrollTop+=e.wheelDelta<0?60:-60,_this.iScrollTop=_this.iScrollTop<=0?0:_this.iScrollTop>=_this.iScrollH-_this.iWrapperH?_this.iScrollH-_this.iWrapperH:_this.iScrollTop,_this.setTransLate(),_this.setYTop(_this.iScrollTop/_this.iScrollH*_this.iYBoxH)}};var isInWrapper=!1;this.oWrapper.onmouseenter=function(){isInWrapper=!0,_this.enterShow&&_this.bYBar&&_this.bYShow&&setStyle(_this.oYBox,{display:"block"})},this.oWrapper.onmouseleave=function(){isInWrapper=!1,_this.enterShow&&_this.bYBar&&!bYDown&&_this.bYShow&&setStyle(_this.oYBox,{display:"none"})};var bYDown=!1,bYLeave=!0,iDownPageY=0,iYBarTop=0;this.bYBar&&(this.enterColor&&(this.oYBar.onmouseenter=function(){bYLeave=!1,setStyle(this,{backgroundColor:_this.enterColor})},this.oYBar.onmouseleave=function(){bYLeave=!0,bYDown||setStyle(this,{backgroundColor:_this.barColor})}),this.oYBar.onmousedown=function(e){_this.bYShow&&(bYDown=!0,iDownPageY=e.clientY+dom.documentElement.scrollTop||dom.body.scrollTop,iYBarTop=parseInt(getStyle(this,"top")),_this.setYTime(0),canSelectText(!1))},dom.addEventListener("mouseup",function(){bYDown&&_this.bYShow&&(bYDown=!1,_this.setYTime(_this.time),canSelectText(!0),!isInWrapper&&_this.enterShow&&setStyle(_this.oYBox,{display:"none"})),!bYDown&&bYLeave&&setStyle(_this.oYBar,{backgroundColor:_this.barColor})}),dom.addEventListener("mousemove",function(e){if(bYDown&&_this.bYShow){var iNowPageY=e.clientY+dom.documentElement.scrollTop||dom.body.scrollTop,iNowTop=iYBarTop+iNowPageY-iDownPageY;iNowTop=iNowTop<=0?0:iNowTop>=_this.iYBoxH-_this.iYBarH?_this.iYBoxH-_this.iYBarH:iNowTop,_this.iScrollTop=iNowTop/_this.iYBoxH*_this.iScrollH,_this.setTransLate(),_this.setYTop(iNowTop)}}),this.oYBar.ondrag=function(e){var e=evt||win.event;evt?e.preventDefault():e.returnValue=!1})},MyScrollBar.prototype.setParam=function(o){this.width=o.width?o.width:10,this.bgColor=o.bgColor?o.bgColor:"#eaeaea",this.barColor=o.barColor?o.barColor:"#ccc",this.enterColor=o.enterColor||!1,this.enterShow=!1!==o.enterShow,this.hasY=!1!==o.hasY,this.borderRadius=o.borderRadius>=0?o.borderRadius:this.width/2,this.time=o.time||0},MyScrollBar.prototype.addScrollBar=function(){this.getSize(),this.hasY&&(this.bYBar=!0,this.oYBox=dom.createElement("div"),this.oYBar=dom.createElement("div"),this.oYBox.appendChild(this.oYBar),this.oWrapper.insertBefore(this.oYBox,this.oScroll))},MyScrollBar.prototype.getSize=function(){var oWrapperSize=getClientSize(this.oWrapper),oScrollSize=getClientSize(this.oScroll);this.iWrapperClientH=oWrapperSize.height,this.iPaddingT=parseInt(getStyle(this.oWrapper,"paddingTop")),this.iPaddingR=parseInt(getStyle(this.oWrapper,"paddingRight")),this.iPaddingB=parseInt(getStyle(this.oWrapper,"paddingBottom")),this.iPaddingL=parseInt(getStyle(this.oWrapper,"paddingLeft")),this.iWrapperH=oWrapperSize.height-this.iPaddingT-this.iPaddingB,this.iScrollH=oScrollSize.height,this.bYBar&&(this.iYBoxH=oWrapperSize.height,this.iYBarH=this.iWrapperH/this.iScrollH*this.iYBoxH)},MyScrollBar.prototype.setSize=function(time){var _this=this;time=time||100,setTimeout(function(){_this.getSize(),_this.iScrollTop>=_this.iScrollH-_this.iWrapperH&&(_this.iScrollTop=_this.iScrollH-_this.iWrapperH),_this.bYBar&&(_this.iWrapperH>=_this.iScrollH?(setStyle(_this.oYBox,{display:"none"}),_this.bYShow=!1):(_this.enterShow||setStyle(_this.oYBox,{display:"block"}),setStyle(_this.oYBar,{height:_this.iYBarH+"px",top:_this.iScrollTop/_this.iScrollH*_this.iYBoxH+"px"},0),_this.bYShow=!0))},time)},MyScrollBar.prototype.setTransLate=function(iTime){var sTranslate="translate(-"+this.iScrollLeft+"px, -"+this.iScrollTop+"px)";setStyle(this.oScroll,{transition:"all "+(iTime>=0?iTime:this.time)+"ms",transform:sTranslate,msTransform:sTranslate,mozTransform:sTranslate,webkitTransform:sTranslate,oTransform:sTranslate})},MyScrollBar.prototype.setYTime=function(iTime){setStyle(this.oYBar,{transition:"all "+(iTime>=0?iTime:this.time)+"ms"})},MyScrollBar.prototype.setYTop=function(iTop){setStyle(this.oYBar,{top:iTop+"px"})},MyScrollBar.prototype.jump=function(o){o=o||{};var oPos={top:0,left:0},iTop=0,iBottome=this.iScrollH-this.iWrapperClientH+this.iPaddingT+this.iPaddingB>0?this.iScrollH-this.iWrapperClientH+this.iPaddingT+this.iPaddingB:0,iLeft=0,iRight=this.iScrollW-this.iWrapperClientW+this.iPaddingL+this.iPaddingR>0?this.iScrollW-this.iWrapperClientW+this.iPaddingL+this.iPaddingR:0,obj;if(o.id)oPos=getPosition(document.getElementById(o.id),this.oScroll),this.bYBar&&(oPos.top+=this.iPaddingT);else if(o.pos)if("string"==typeof o.pos)switch(o.pos){case"top":oPos.top=0;break;case"bottom":oPos.top=iBottome;break;case"left":oPos.left=0;break;case"right":oPos.left=iRight}else"object"==typeof o.pos&&(oPos=o.pos);oPos.top=oPos.top>iBottome?iBottome:oPos.top>=0?oPos.top:0,this.iScrollTop=oPos.top,this.setTransLate(o.time),this.bYBar&&(this.setYTime(o.time),this.setYTop(this.iScrollTop/this.iScrollH*this.iYBoxH))},"function"==typeof define&&define.amd&&define([],function(){return MyScrollBar}),win.MyScrollBar=MyScrollBar}(window,document);
\ No newline at end of file diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js index 76ee383ccb..c1a3dcd000 100755 --- a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js +++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js @@ -81,6 +81,17 @@ /** * menu click */ + if ($('.nav').length > 0 && $(window).width() > 992) { + var oScroll = new MyScrollBar({ + selId: 'navBox', + time: 100, + bgColor: 'transprent', + barColor: '#839dd67a', + enterColor: '#839dd6cc', + enterShow: false + }); + } + $(".main > .main-left .nav > .slide > .menu").click(function () { var ul = $(this).next(".slide-menu"); var menu = $(this); @@ -94,6 +105,14 @@ ul.removeClass("active"); }); } + if ($('.nav').length > 0 && $(window).width() > 992) { + oScroll.setSize(200); + } + setInterval(function(){ + if($('.nav').height() < $('.navbar-container').height()){ + $('.nav').css('transform', 'translate(0px, 0px)'); + } + }, 300); return false; }); @@ -259,10 +278,10 @@ }else { $('.node-main-login form .cbi-value-last input[type="text"]').prop('type', 'password'); $('.node-main-login form .cbi-value-field .iconeye').removeClass('cleye').addClass('opeye'); - num = true + num = true; } - }) + }); $('body.logged-in').css('min-height', $(window).height()); @@ -271,21 +290,26 @@ $('.logged-in .main-right').outerWidth( $(window).width() - $('.logged-in .main-left').width() - 50 ); } - $('.cbi-section .table').each(function(){ - var thisTr = $(this).children('.tr').get(0); - var td = $(thisTr).children('.td').get(0); - var th = $(thisTr).children('.th').get(0) - var a = window.getComputedStyle(thisTr, ':before').getPropertyValue('content'); - console.log(td, th); + $('.cbi-section .table').each(function () { + var firTr = $(this).children('.tr').get(0); + var firTd = $(firTr).children('.td').get(0); + var th = $(firTr).children('.th').get(0); - if( th && a != 'none' ){ + var laTr = $(this).children('.tr').get($(this).children('.tr').length - 1); + var laTd = $(laTr).children('.td').get(0); + var a = window.getComputedStyle(firTr, ':before').getPropertyValue('content'); + + if (th && a != 'none') { $(th).css('border-top-left-radius', '0'); - }else if( td && a != 'none' ){ - $(td).css('border-top-left-radius', '0'); + } else if (firTd && a != 'none') { + $(firTd).css('border-top-left-radius', '0'); + } + if (laTd && a != 'none') { + $(laTd).css('border-bottom-left-radius', '0'); } }); }); - $('.lang_enNetwork #cbi-samba-sambashare .table').wrap('<div class="table-container"></div>'); + $('#iptables').prev().css('margin-top', '10px'); })(jQuery); diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm index f0cbe4e968..4377e1ca98 100755 --- a/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm +++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm @@ -43,8 +43,8 @@ <script> var luciLocation = <%= luci.http.write_json(luci.dispatcher.context.path) %>; </script> -<script src="<%=media%>/js/jquery.min.js?v=git-18.247.71242-9541751"></script> -<script src="<%=media%>/js/script.js?v=git-18.247.71242-9541751"></script> +<script src="<%=media%>/js/jquery.min.js"></script> +<script src="<%=media%>/js/script.js"></script> </body> </html> diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm index 21fa78e3c6..a6aafbed61 100644 --- a/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm +++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm @@ -123,7 +123,7 @@ local function render_topmenu() local childs = disp.node_childs(cattree) if #childs > 0 then - write('<ul class="nav">') + write('<ul class="nav scroll">') for i, r in ipairs(childs) do local nnode = cattree.nodes[r] @@ -231,6 +231,7 @@ <% end -%> <script src="<%=resource%>/cbi.js"></script> <script src="<%=resource%>/xhr.js"></script> + <script src="<%=media%>/js/ScrollY.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 %>"> @@ -264,7 +265,7 @@ <div class="nav-container"> <a class="brand" href="#"> <%=boardinfo.hostname or "?"%></a> - <div class="navbar-container"> + <div class="navbar-container" id="navBox"> <% render_topmenu() %> </div> </div> |