Compare commits

...

153 commits

Author SHA1 Message Date
Hannu Nyman
5537d68ec3 timezone data: update to 2018d
Update timezone data to 2018d
http://mm.icann.org/pipermail/tz-announce/2018-March/000049.html
  In 2018, Palestine starts DST on March 24, not March 31.
     Adjust future predictions accordingly.
  Casey Station in Antarctica changed from +11 to +08
(cherry picked from commit c7369830b6)

timezone data: update to 2018c
Update timezone data to 2018c
http://mm.icann.org/pipermail/tz-announce/2018-January/000048.html
   Briefly:
   Sao Tome and Príncipe switched from +00 to +01.
   Brazil's DST will now start on November's first Sunday.
(cherry picked from commit eae2f37b62)

timezone data: update to 2017c
Update timezone data to 2017c
http://mm.icann.org/pipermail/tz-announce/2017-October/000047.html
   Briefly:
   Northern Cyprus switches from +03 to +02/+03 on 2017-10-29.
   Fiji ends DST 2018-01-14, not 2018-01-21.
   Namibia switches from +01/+02 to +02 on 2018-04-01.
   Sudan switches from +03 to +02 on 2017-11-01.
   Tonga likely switches from +13/+14 to +13 on 2017-11-05.
   Turks & Caicos switches from -04 to -05/-04 on 2018-11-04.
(cherry picked from commit ede51e4641)

luci-base: add Etc/GMT timezones
Add Etc/GMT timezones like GMT+5
(cherry picked from commit f2cf516cf7)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2018-04-08 00:05:58 +03:00
Hannu Nyman
5fa2132080
Merge pull request #1578 from user7887/for-15.05
i18n-ru:fixed and updated russian translation+update by script
2018-01-21 17:52:17 +02:00
Vladimir
1201b1a171 i18n-ru:fixed and updated russian translation+update by script
Signed-off-by: Vladimir <picfun@ya.ru>
2018-01-21 18:42:22 +03:00
Hannu Nyman
13aa5ffb7c Merge pull request #1164 from angusding/patch-5
luci.mk: Update language name for Chinese
2017-05-16 19:22:41 +03:00
amitabha
e18404a1f7 luci.mk: Update language name for Chinese
Rectification of non-standard name for language Chinese.
Signed-off-by: Angus Ding angus.ding@gmail.com
2017-05-11 21:59:38 +08:00
Hannu Nyman
1a4fe7068c Merge pull request #1142 from angusding/patch-2
luci-app-upnp: Update Chinese translation
2017-05-01 17:21:11 +03:00
amitabha
a3062723d3 luci-app-upnp Update Chinese translation
Update Chinese translations.
Signed-off-by: Angus Ding angus.ding@gmail.com
2017-05-01 21:06:21 +08:00
Hannu Nyman
78c1566a1e timezone data: update to 2017b
Update timezone data to 2017b.

http://mm.icann.org/pipermail/tz-announce/2017-February/000045.html
http://mm.icann.org/pipermail/tz-announce/2017-March/000046.html

Key changes in 2017a-2017b:

* Mongolia no longer observes DST.
* Chile's Region of Magallanes moves from -04/-03 to -03 year-round.
* Switch to numeric time zone abbreviations for South America, as
  part of the ongoing project of removing invented abbreviations.
* Haiti resumed observance of DST in 2017.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 54c97738bc)
2017-04-10 22:39:27 +03:00
Christian Schoenebeck
d89b022b97 Merge pull request #935 from chris5560/for-15.05
[for-15.05] luci-app-ddns: support for backported ddns-scripts 2.7.6
2017-01-13 09:54:41 +01:00
Christian Schoenebeck
830d1095eb [for-15.05] luci-app-ddns: adaption to support backported ddns-scripts 2.7.6
Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2017-01-11 20:13:55 +01:00
Hannu Nyman
cca792beee Merge pull request #920 from cls1997/patch-1
Update statistics.po
2017-01-05 16:44:45 +02:00
ChenLingshu
9ba4eea12a Update statistics.po
Phrase "system load" right Simplified Chinese translated as "系统负载"
2017-01-05 22:39:13 +08:00
Hannu Nyman
d4bec26286 time zone data: Update to 2016j
Changes:
     Saratov, Russia switches from +03 to +04 on 2016-12-04 at 02:00.
     This hives off a new zone Europe/Saratov from Europe/Volgograd.

     The new zone Asia/Atyrau for Atyraū Region, Kazakhstan, is like
     Asia/Aqtau except it switched from +04/+05 to +05/+06 in spring
     1999, not fall 1994.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit a7c5c018b6)
2016-12-09 18:14:51 +02:00
Hannu Nyman
90474569d2 time zone data: Update to 2016i
Note that several of the time zones now use a numeric name
that is quoted with < >  (e.g. "<+03>-3")

musl 1.1.15 and earlier have a bug with < > quoted time zone names.
Fix for the bug
* has already been patched in musl upstream with
  http://git.musl-libc.org/cgit/musl/commit/?id=8ca27ac4bfe73bff785d0c26c1de0da92b55e5c6
* has been committed in LEDE with
  671cb35880
* has been submitted to Openwrt as pull request
  https://github.com/openwrt/openwrt/pull/163

Key changes in 2016d-2016i:
---------------------------

2016d:
     America/Caracas switches from -0430 to -04 on 2016-05-01.

     Asia/Magadan switches from +10 to +11 on 2016-04-24.

     New zone Asia/Tomsk, split off from Asia/Novosibirsk.

2016f:
     Asia/Novosibirsk switches from +06 to +07 on 2016-07-24.

     Asia/Novokuznetsk and Asia/Novosibirsk now use numeric time zone
     abbreviations instead of invented ones.

2016g:
     Turkey switched from EET/EEST (+02/+03) to permanent +03,
     effective 2016-09-07. Use "+03" rather than an invented
     abbreviation for the new time.

     Several zones in Antarctica and the former Soviet Union, along
     with zones intended for ships at sea that cannot use POSIX TZ
     strings, now use numeric time zone abbreviations instead of
     invented or obsolete alphanumeric abbreviations.

2016h:
     Asia/Gaza and Asia/Hebron end DST on 2016-10-29, not
     2016-10-21. Predict that future fall transitions will
     be on the last Saturday of October.

     Asia/Colombo now uses numeric time zone abbreviations like "+0530"
     instead of alphabetic ones like "IST" and "LKT".

2016i:
     Pacific/Tongatapu begins DST on 2016-11-06, ending on
     2017-01-15.  Assume future observances in Tonga will be
     from the first Sunday in November through the third Sunday in
     January, like Fiji. Switch to numeric time zone abbreviations
     for this zone.

     Northern Cyprus is now +03 year round, causing a split in Cyprus
     time zones starting 2016-10-30 at 04:00. This creates a zone
     Asia/Famagusta.

     Antarctica/Casey switched from +08 to +11 on 2016-10-22.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 3936e79cf8)
2016-11-08 12:56:02 +02:00
Christian Schoenebeck
6f5c46681b Merge pull request #667 from chris5560/for-15.05
[for-15.05] luci-app-polipo: remove Parent proxy address field check
2016-07-24 20:27:48 +02:00
Hannu Nyman
692049432c luci-app-adblock: adjust to adblock 1.2.0
* more status info
* change in default nullipv addresses
* two uhttpd instances (for ports 80/443)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit cd50f27956)
2016-06-16 11:25:15 +03:00
Hannu Nyman
70a4d43cc8 luci-app-adblock: support 1.16
Add support for 'adb_restricted'

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit e87132021b)
2016-06-04 10:45:55 +03:00
Hannu Nyman
798e7361ed luci-app-adblock: support adb_fetchttl option
Support adb_fetchttl options from adblock 1.1.15

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit c46963613f)
2016-06-04 10:45:37 +03:00
Hannu Nyman
0eef20a066 Add support for showing ipv6 NAT table in Luci
When kmod-nf-nat6 and kmod-ipt-nat6 are installed, the firewall has also
the 'nat' table for ipv6, and packages like 'adblock' utilize that table.

Currently that table is not shown on the Luci firewall status page,
although it is visible by 'ip6tables -L -v -t nat' from console.

Detect 'nat' table's presence from /proc/net/ip6_tables_names

Show 'nat' table in Status->Firewall->IPv6 if that table is present.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit a77ff30057)
2016-06-03 10:30:17 +03:00
Hannu Nyman
cfd3bb1aba luci-base: remove deprecated 6relayd from ucitrack
Cleanup /etc/config/ucitrack by removing '6relayd' item,
as the whole 6relayd package was removed in 2014.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit e336dbed39)
2016-05-25 22:31:14 +03:00
Hannu Nyman
1e4705d904 i18n: sync translations
Sync transltions.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2016-05-21 11:23:19 +03:00
Chuanhong Guo
a64448b16b luci-base: Turn off pattern matching when generating distversion
Otherwize the distrevision may be displayed twice
if it contains some special matching patterns.
(For example I am using "git-$hash" in my own OpenWrt branch.)
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>

(cherry picked from commit c1f0a9971a)
2016-05-21 11:14:41 +03:00
Hannu Nyman
84083ce54d luci-app-statistics: option for max/avg data when not rrasingle
Introduce option that enables the user to select max values
instead of averages for graphs if the user has disabled RRAsingle.

The option defaults to average values, which have been the default
in Luci statistics.

Remove 'optional' from RRASingle, as it is a key option for statistics.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit b213573682)
2016-05-21 11:12:45 +03:00
Kevin Darbyshire-Bryant
d2054da3a2 Graph the max value rather than avg if rrdsingle disabled
With rrdsingle the average values are used for graphing. As the
timescale increases (say over a day or month) the average values
progressively reduce.  Using the maximum value over the longer periods
is arguably no less deceptive but it does produce more informative
graphs.

V2 - Invert the default path logic related to rra.single

Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
(cherry picked from commit f960a52868)
2016-05-21 11:12:35 +03:00
Hannu Nyman
a0f22fdec9 luci-mod-admin-full: dnsmasq options quietdhcp and sequential_ip
Add support for dnsmasq uci options 'quietdhcp' and 'sequential_ip'
(disable logging, allocate ip addresses sequentially)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit b9dbf1bc2c)
2016-05-21 11:12:11 +03:00
Hannu Nyman
7a4741ebbd Merge pull request #719 from SvenRoederer/add_community_cottbus
freifunk-profiles: add profile Cottbus
2016-05-11 09:13:19 +03:00
Hannu Nyman
06a32ecdca Merge pull request #718 from SvenRoederer/fix/freifunk-communitysetting-selection/for-15.05
luci-mod-freifunk: fix lookup of community-name
2016-05-11 09:13:13 +03:00
Sven Roederer
d7e36244dd freifunk-profiles: add profile Cottbus
- add the current community-file for freifunk Cottbus to for-15.05 branch
- this is a copy of the file with all commits up to "Jan 4, 2016"

Signed-off-by: Sven Roederer <devel-sven@geroedel.de>
2016-05-11 01:41:54 +02:00
Sven Roederer
30fbac75ac luci-mod-freifunk: fix lookup of community-name
restore the lookup of the freifunk community-name stored in
uci "freifunk.community.name".
In 9780ee382e
the value changed to the complete path of the community-profile, e.g.
"/etc/config/profile_berlin". This causes lookup problems on other
pages, like "mod-freifunk -> overview -> index" (view/freifunk/index.htm line37, line 54).
And as the option suggests it's the community-name not the community-profile path.

This is a backport of 61c7157a66

Signed-off-by: Sven Roederer <devel-sven@geroedel.de>
2016-05-11 00:51:53 +02:00
Hannu Nyman
0b84fe25a6 luci-app-adblock: adjust to change in option name
Change also the adb_nullport option name to match 1.1.0

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 96c5069ca6)
2016-05-10 16:44:44 +03:00
Hannu Nyman
234ca580c7 luci-app-adblock: match adblock 1.1.0
Update the luci app to match adblock 1.1.0
Add support for showing blocklist status info.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit b45520011f)
2016-05-10 16:44:32 +03:00
Hannu Nyman
11d5867a45 Merge pull request #712 from SvenRoederer/fix/deps_for_app-olsr
luci-app-olsr: depend on luci-lib-json
2016-05-08 20:56:59 +03:00
Sven Roederer
51afb12611 luci-app-olsr: depend on luci-lib-json
backport of ba897c6a20

Signed-off-by: Sven Roederer <devel-sven@geroedel.de>
2016-05-05 14:20:44 +02:00
Hannu Nyman
c0ae328b63 Merge pull request #704 from feckert/fix_dsl_spelling
luci-mod-admin-full: change spelling ADSL to xDSL
2016-04-19 10:26:19 +03:00
Florian Eckert
b2271ea5bc luci-mod-admin-full: change spelling ADSL to xDSL
DSL has one more transmission technologies this is VDSL.
Spelling xDSL reflect this

Signed-off-by: Florian Eckert <Eckert.Florian@googlemail.com>
2016-04-19 07:56:42 +02:00
Hannu Nyman
fdc0783b88 luci-base: read odhcpd leasefile location via uci
Check the location of the odhcpd leasefile from /etc/config/dhcp
via uci. Fallback to the default location.

This fixes #702

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 51a7f96877)
2016-04-18 20:43:49 +03:00
Hannu Nyman
605d1f1947 timezone data: update to 2016c
Update timezone data to 2016c.

2016b: http://mm.icann.org/pipermail/tz-announce/2016-March/000036.html

   Changes affecting future time stamps

     New zones Europe/Astrakhan and Europe/Ulyanovsk for Astrakhan and
     Ulyanovsk Oblasts, Russia, both of which will switch from +03 to +04
     on 2016-03-27 at 02:00 local time.  They need distinct zones since
     their post-1970 histories disagree.  New zone Asia/Barnaul for Altai
     Krai and Altai Republic, Russia, which will switch from +06 to +07
     on the same date and local time.  Also, Asia/Sakhalin moves from +10
     to +11 on 2016-03-27 at 02:00.

     As a trial of a new system that needs less information to be made up,
     the new zones use numeric time zone abbreviations like "+04"
     instead of invented abbreviations like "ASTT".

     Haiti will not observe DST in 2016.

     Palestine's spring-forward transition on 2016-03-26 is at 01:00,
     not 00:00. Guess future transitions will be March's last Saturday
     at 01:00, not March's last Friday at 24:00.

2016c: http://mm.icann.org/pipermail/tz-announce/2016-March/000037.html

   Changes affecting future time stamps

     Azerbaijan no longer observes DST.

     Chile reverts from permanent to seasonal DST.
     Guess that future transitions are August's and May's second
     Saturdays at 24:00 mainland time.  Also, call the period from
     2014-09-07 through 2016-05-14 daylight saving time instead of
     standard time, as that seems more appropriate now.

Note for Openwrt usage:

Either musl or busybox does not like the new timezone format.
Although the rule looks ok in /etc/TZ, timezone is interpreted wrongly
by date, uptime etc. "Old timezones" are handle correctly, but these
new "<+04>-4" style zones do not work. Example below:

Europe/Helsinki
 root@OpenWrt:~# cat /etc/TZ
 EET-2EEST,M3.5.0/3,M10.5.0/4
 root@OpenWrt:~# uptime
  11:00:52 up 18:17,  load average: 0.43, 0.13, 0.11
 root@OpenWrt:~# date
 Wed Mar 30 11:00:55 EEST 2016

Europe/Astrakhan
 ( Time is showed as GMT instead of the correct zone and
   zone name is parsed wrongly )
 root@OpenWrt:~# cat /etc/TZ
 <+04>-4
 root@OpenWrt:~# uptime
  08:02:52 up 18:19,  load average: 0.17, 0.18, 0.13
 root@OpenWrt:~# date
 Wed Mar 30 08:02:59 +04>-4 2016

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 859e435378)
2016-03-30 11:43:36 +03:00
Hannu Nyman
34dbc700c6 CC luci-mod-admin-full: Enable reset in Luci also for ubi
Enable reset in LuCI also for ubi based firmwares.
Discussion at #672

Backport of 5b79e62c0a

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2016-03-29 10:37:29 +03:00
Daniel Dickinson
b7c182165f luci-app-statistics: Fix disk usage graphing
Disk usage graphing was broken.  This fixes it.

Signed-off-by: Daniel Dickinson <openwrt@daniel.thecshore.com>
(cherry picked from commit 6d2163eb62)
2016-03-29 10:35:00 +03:00
Manuel Munz
f2ffa30a76 a cleaner solution for disabling dyngw and dyngw_plain in freifunk-policyrouting init 2016-03-26 19:04:39 +01:00
Hannu Nyman
0207cb7a17 i18n: sync translations
Sync translations.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2016-03-21 12:59:49 +02:00
Hannu Nyman
2c34a421a9 luci-mod-admin-full: Fix dhcpv6 ra_management option stateless value
Fix dhcpv6 ra_management option's handling of "stateless" value.
Default value for the option is 1, so trying to store ""
instead of "0" for stateless is not working.

This fixes #676

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 355c21304a)
2016-03-19 15:55:10 +02:00
Hannu Nyman
e8b6cbb530 luci-app-adblock: backport the package from master
Backport the luci-app-adblock package from master.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2016-03-16 16:15:24 +02:00
Jo-Philipp Wich
4a211573d9 Merge pull request #674 from feckert/cron_bugfix
luci-mod-admin-full: allow writing empty crontab config
2016-03-16 12:35:07 +01:00
Jo-Philipp Wich
d710d218c8 Merge pull request #673 from feckert/bugfix_sleep_sysupgrade
luci-mod-admin-full: add sleep before sysupgrade
2016-03-16 11:46:48 +01:00
Florian Eckert
2e4dea8046 luci-mod-admin-full: add sleep before sysupgrade
- Under some conditions the system will shutdown
  uhttpd before the page will be delivered to
  the client. Waiting one second should eleminate
  this behaviour.

Signed-off-by: Florian Eckert <Eckert.Florian@googlemail.com>
2016-03-16 11:38:09 +01:00
Florian Eckert
53b75d4562 luci-mod-admin-full: allow writing empty crontab config
Write an empty crontab file to remove all content
from file /etc/crontabs/root

Signed-off-by: Florian Eckert <Eckert.Florian@googlemail.com>
2016-03-16 11:08:16 +01:00
Hannu Nyman
f1190e2d07 luci-base: Include Openwrt build revision in displayed version string
The version string displayed in the footer and the overview page contains
both LuCI and Openwrt versions. But due to differences in the contents
of /etc/openwrt_release the exact Openwrt revision r..... may be missing:
* In trunk that revision is included in the DISTRIB_DESCRIPTION field that
  is displayed in Luci as the Openwrt version.
* In release branches, that field contains the release number like 15.05.

Revision number is always present in DISTRIB_REVISION field, so add the
revision from that field in case the revision is not already present
in the string.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 50451c4ac5)
2016-03-11 14:30:24 +02:00
Hannu Nyman
b83942a596 LuCI: Display the proper LuCI git branch in GUI
Adjust luci.mk and luci-base to find out correctly if Luci is built
from master or from a branch. Display that value in the footer and
the overview page.

* Evaluate the git branch in luci.mk and pass that to LuCI submodules
  as a make variable. Use branch name, ignore tags.
* Deprecate svn detection in luci-base's mkversion.sh that generates
  version.lua. Simply use the value passed by make.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 7553654bb1)
2016-03-11 14:30:10 +02:00
Christian Schoenebeck
4b594cb1aa [for-15.05] luci-app-polipo: remove Parent proxy address field check
remove Parent proxy address field check https://dev.openwrt.org/ticket/15680

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2016-03-07 21:20:47 +01:00
Hannu Nyman
e2f9172b21 Fix embedded links: github instead of luci.subsignal.org
Fix links to point into Github repo instead of luci.subsignal.org
 - the hint to file a bug in dispatcher
 - footers of Bootstrap and Freifunk themes

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit c2cf5d1855)
2016-02-12 14:18:25 +02:00
Hannu Nyman
cdcdfd2594 timezone data: update to 2016a
Update timezone data to 2016a.

http://mm.icann.org/pipermail/tz-announce/2016-January/000035.html

   Changes affecting future time stamps

     America/Cayman will not observe daylight saving this year after all.
     Revert our guess that it would.  (Thanks to Matt Johnson.)

     Asia/Chita switches from +0800 to +0900 on 2016-03-27 at 02:00.
     (Thanks to Alexander Krivenyshev.)

     Asia/Tehran now has DST predictions for the year 2038 and later,
     to be March 21 00:00 to September 21 00:00.  This is likely better
     than predicting no DST, albeit off by a day every now and then.

   Changes affecting past and future time stamps

     America/Metlakatla switched from PST all year to AKST/AKDT on
     2015-11-01 at 02:00.  (Thanks to Steffen Thorsen.)

     America/Santa_Isabel has been removed, and replaced with a
     backward compatibility link to America/Tijuana.  Its contents were
     apparently based on a misreading of Mexican legislation.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 9b5724d39e)
2016-02-07 12:36:22 +02:00
Hannu Nyman
80a09b604b i18n: Sync translations
Sync translations.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2016-02-03 11:51:35 +02:00
Hannu Nyman
a23d69eb71 luci-app-statistics: Remove usually empty std.dev. graph from ping page
Remove the usually empty standard deviation graph from the ping page.

The graph is empty for most users as collectd measures standard deviation
of individual pings inside the general interval of statistics collection.
Default setting for both ping interval and general collection interval
is 30s in Luci statistics, meaning just 1 ping per interval, which
leads to empty graph.

(To provide relveant data, the ping interval should be 1/4-1/5 of the
general collection interval. Even then the graph does not look very
informative due to different scaling than the latency graph.)

Note that this commit does not change collectd itself, which continues
to collect and calculate also the std.dev. data, which can be fetched
with 'rrdtool' if needed.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry-picked from 8f8957f90f)
2016-02-02 15:12:33 +02:00
Jo-Philipp Wich
3201903e37 luci-mod-admin-full: prevent crash if channel of sta is unknown (#624)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 10:18:02 +01:00
Jo-Philipp Wich
31cfd4df4c luci-mod-admin-full: avoid indexing iw.hwmodelist directly
Prevent a nil field access when hwmodelist is undefined.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 10:18:02 +01:00
Hannu Nyman
956be55671 Merge pull request #615 from SvenRoederer/for-15.05_openwrt
[Makefile] make include of luci.mk relative
2015-12-29 23:40:09 +02:00
Sven Roederer
f80351df6f backport [Makefile] make include of luci.mk relative
Backport of commit e6ef89307154d496a76c118db7b88aff05b0394b from trunk

Signed-off-by: Sven Roederer devel-sven@geroedel.de
2015-12-29 19:15:49 +01:00
Hannu Nyman
6e179419dc luci-mod-admin-full: interface status page / clarify address display
Backport commit e42e5f5865
  Copy the changes made by f8d0ba0
  also to the interface details pages in order to clarify display of
  multiple addresses.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-12-21 23:02:12 +02:00
Hannu Nyman
b7fe44ab0b for-15-05: luci-mod-admin-full: update IPv4/IPv6 list views
Clarify address presentation on the Network/Interfaces page
by backporting f8d0ba00b2 :
  For better view of 'Interface Overview' IPv4/IPv6 addresses for
  interfaces should be displayed as lists, but not as comma separated
  strings.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-12-18 19:25:01 +02:00
Sabbir Ahmed
7ad426e54f modules/luci-mod-rpc: fix attempt to index global 'luci' (a nil value) 2015-12-15 23:46:48 +01:00
Hannu Nyman
ce36802229 CONTRIBUTING.md: clarify signed-off-by advice
Clarify the signed-off-by advice in CONTRIBUTING.md.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit ff2f536dd1)
2015-12-15 14:47:29 +02:00
Hannu Nyman
1902e1454b CONTRIBUTING.md: Add advice on pull requests
Add advice on pull requests and best practices in working with Github.
Minor corrections & updates.
Adjust to Github 'markdown' syntax.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 0e2c555c30)
2015-12-15 14:47:21 +02:00
Hannu Nyman
ab31abd244 for-15.05 i18n: sync translations
Sync translations.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-12-06 13:30:58 +02:00
Manuel Munz
4e44955ab2 contrib/package/freifunk-policyrouting: remove rc.d symlink 2015-11-18 12:27:20 +01:00
Ran Bao
7200d69cae fix a typo error in command script shown to users
Signed-off-by: Ran Bao <worksev@gmail.com>
(cherry picked from commit 38b7c6cef4)
2015-11-06 10:04:37 +02:00
Hannu Nyman
5511c29bdf luci-mod-admin-full: limit interface name length to 15 chars
Limit the name of a new interface to 15 characters.
Add a note about the maximum length and the automatic protocol/bridge
prefixes (br-, 6in4-, pppoe- etc.).

Reference to:
https://dev.openwrt.org/ticket/20380
https://github.com/openwrt/luci/issues/507

There is a 15 character limit to the "real" interface name,
enforced both in the firewall and dnsmasq. The real interface name
includes the possible prefix "br-", "6in4-" etc. Example of an error:
  interface name `br-lan_protected' must be shorter than IFNAMSIZ (15)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit b1217c88c3)
2015-11-05 11:08:50 +02:00
Hannu Nyman
a66c08849a luci-app-firewall: limit zone name length to 11 characters
Change the maximum length of a firewall zone name from 14 to 11 characters.

Longer names break iptables rule generation (max. 29 chars are allowed).

XT_EXTENSION_MAXNAMELEN = 29
29 - sizeof("postrouting_") - sizeof("_rule") - sizeof("\0") = 11

References to:
https://github.com/openwrt/luci/issues/507
https://dev.openwrt.org/ticket/20380

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 87b6bb0daf)
2015-10-28 13:15:38 +02:00
Daniel Dickinson
4b048cd18c applications/asterisk: Remove incorrect dependency
ahcpd dependency appears to have come from a cut-n-paste from
luci-app-ahcpd.

(cherry picked from commit 91220dac08 )
2015-10-27 16:11:23 +02:00
Jo-Philipp Wich
eb1ff5b8e6 Move libubus-lua dependency to luci-base
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-10-27 13:11:01 +01:00
Hannu Nyman
d38c2394b9 luci-app-diag-devinfo: mark broken due to dependencies
Mark luci-app-diag-devinfo @BROKEN as it has several failing dependencies:

Four dependencies from "oldpackages":
 httping, mac-to-devinfo, smap-to-devinfo, netdiscover-to-devinfo

One dependency from "abandoned":
 smap

(netdiscover is currently ok in trunk, but not in 15.05.)

Reference to Luci issue #523.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit ec6ccf1cd3)
2015-10-27 10:08:47 +02:00
Hannu Nyman
103e5a39b0 luci-app-statistics: Adjust ping graphs to show target hosts separately
Ping statistics plugin allows the user to define multiple ping targets.
The graphs have so far shown multiple hosts in a stacked way.
Adjust graphs to show the target hosts separately (overlay=true).

Clarify the plugin definition with some additional line spacing.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 53d767de5e)
2015-10-26 11:47:25 +02:00
Hannu Nyman
ae4f8d5cd8 luci-app-statistics: improve scaling of the associated stations graph
Improve scaling of the associated stations graph on the wireless page.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit dccf485922)
2015-10-26 11:47:08 +02:00
Hannu Nyman
18d9c672c0 luci-app-statistics: backport 'reorder interface and netlink datasources'
Backport from commit 78c61d6d the interface and netlink plugin changes.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-10-24 13:39:36 +03:00
Jo-Philipp Wich
8a9ff2b210 luci-app-statistics: add support for sorting RRD data sources
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
(cherry picked from commit c8c4a343c2)
2015-10-24 13:36:54 +03:00
Jo-Philipp Wich
d4b293bfb0 luci-app-statistics: improve diagram generation, add missing title
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
(cherry picked from commit c10a7380bf)
2015-10-24 13:36:07 +03:00
Jo-Philipp Wich
7b3fea1100 luci-app-statistics: rework graph label handling
Remove leftover unused translation code and properly escape colons in line
labels.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
(cherry picked from commit 96b031bbad)
2015-10-24 13:35:45 +03:00
Hannu Nyman
c8b12e7fa9 Backport luci-base: filter invalid opkg status lines
Backport of commit 6b3f804 from trunk.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-10-24 09:40:55 +03:00
Hannu Nyman
ce5c787989 for-15.05 opkg/packages: Show package size in list of available packages
CC15.05 opkg was patched by https://dev.openwrt.org/changeset/47196
to support the --size option. This commit backports the Luci features:

Add package *.ipk size information to package listing in Luci,
as opkg was today extended to support listing also the size information.
Visible fields are now: name, version, size, description

That will help users considering installation of a certain package
to assess its size impact on flash.

Note: Opkg data includes the size of the .ipk file, not the expanded size.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 3288fe76ab)
2015-10-15 18:02:44 +03:00
Hannu Nyman
3e199390f7 for-15.05: Sync translations
Sync translations to the current strings.

Changes in luci-app-ddns, luci-app-statistics and luci-base

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-10-13 13:00:37 +03:00
Hannu Nyman
fcc24dbbc2 luci.mk: correct SK language name to Slovak
SK language code refers to Slovak, not Slovene.
Native language name is correct.

References:
https://forum.openwrt.org/viewtopic.php?id=60235
https://en.wikipedia.org/wiki/Slovak_language

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 1d37c9c25d)
2015-10-13 10:20:19 +03:00
Hannu Nyman
ce4ee38f46 luci-app-statistics: reorganise menu items
Reorganise the menu items of the Luci statistics module:

* Re-label "Collectd" to "Setup" and place it after the "Graphs" items.
  - "Graphs" is used much more frequently so it should be first.
  - Change "Collectd" menu item to "Setup" to clarify things.

* Re-label "System plugins" to "General plugins" to change sorting.
  "Network / Output / System" changes to "General / Network / Output"
  that is more logical order for the items.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>

(cherry picked from commit da5b25187b)
2015-10-12 14:23:10 +03:00
Hannu Nyman
321864a213 luci-base: change index.html to be more like current themes
Change index.html that is visible for a second when entering Luci:
* Black text on white background (instead of white on black)
* Specify font as Arial/Helvetica

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>

(cherry picked from commit b6fe9a70e6)
2015-10-12 14:18:00 +03:00
nightcoffee
4bff6283af luci-base: Add cache control in index.html
Signed-off-by: Night Coffee <ydkf@qq.com>

(cherry picked from commit 08a38a0493)
2015-10-12 14:17:02 +03:00
Hannu Nyman
94d8e86941 Timezone information: update to 2015g
Changes in 2015g:
http://mm.icann.org/pipermail/tz-announce/2015-October/000034.html

     Norfolk moves from +1130 to +1100 on 2015-10-04 at 02:00 local time.

     Fiji's 2016 fall-back transition is scheduled for January 17, not 24.

     Fort Nelson, British Columbia will not fall back on 2015-11-01. It has
     effectively been on MST (-0700) since it advanced its clocks on 2015-03-08.
     New zone America/Fort_Nelson.

Note: the Turkey-related one-time rule change is not apparently catched by
the zoneinfo2lua script, so that change is not included in this commit.
(Turkey's 2015 fall-back transition is scheduled for Nov. 8, not Oct. 25.)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 2cfd11b272)
2015-10-12 11:18:20 +03:00
Jo-Philipp Wich
8832d534e9 luci-mod-admin-full: status: survive broken DSL status output
Only attempt to call "dsl_func" if the dsl_control lucistat output could be
successfully evaluated.

Works around https://dev.openwrt.org/ticket/20607

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-10-03 16:12:24 +02:00
Jo-Philipp Wich
f21eb789e1 luci-app-statistics: only render index view for more than one instance
If a plugin produces only one instance, e.g. netlink with just one interface
configured, then the controller will register no detail views which would
normally show all graphs but the index pacage of a given plugin will still
display the collapsed view without any possibility to reach the full listing.

Fix the problem by only rendering a linked index view when more than one
instance is present.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-10-03 11:41:41 +02:00
Oliver Middleton
af9f093104 luci-mod-admin-full: fix dnsmasq no-hosts/addn-hosts options
no-hosts does not disable addn-hosts.

Signed-off-by: Oliver Middleton <olliemail27@gmail.com>
(cherry picked from commit 0857aaa28b)
2015-09-28 12:25:42 +03:00
Hannu Nyman
6787a0aa61 for-15.05 luci-base: set default mediaurlbase to bootstrap (default theme)
The mediaurlbase option in the default /etc/config/luci still points
to the old openwrt.org theme that is not installed by default.
The discrepancy was noted in the commit message for 55ab4e4ce2

After 55ab4e4ce2 the installed theme's uci-defaults script will correct
the setting at first boot, but we should not have a deprecated theme as
the default value. Set the default value to the default theme 'bootstrap'.

Related old discussion at #302

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 1209ab6ba6)
2015-09-27 10:01:36 +03:00
Hannu Nyman
0b72c51475 for-15.05 luci-mod-admin-full: opkg config / prevent word-wrap
Prevent word-wrap on the config input areas. Especially the feed
definition lines can be long, and automatic word-wrap can decrease
clarity.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit c91a5eb2c4)
2015-09-26 21:10:30 +03:00
Hannu Nyman
5e7c0f0a3b for-15.05 luci-mod-admin-full: restore opkg feed config capability
opkg config change from r46491 was backported to CC15.05
by https://dev.openwrt.org/changeset/46848/

Existing /etc/opkg.conf was split to three:
   /etc/opkg.conf -> base opkg configuration
   /etc/opkg/distfeeds.conf -> default Openwrt package feeds
   /etc/opkg/customfeeds.conf -> custom package feeds

Since then the actual feed definitions have not been visible/configurable,
as only /etc/opkg.conf has been visible in Luci.

This patch restores the capability to see and edit package feed definitions.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit a42c0bb618)
2015-09-26 21:10:20 +03:00
Hannu Nyman
720f76c561 for-15.05 luci-app-firewall: use maxlength datatype for zone name validation
Backport from trunk the zonename validation using
a compound datatype "and(uciname,maxlength(14))"

fw3 sets the maximum length of the zone name to 14 and
ignores zone definitions with too long names.
Add a simple validation to ensure that the new zone name is short enough.

Backport of 34e875b3 and edc58332

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-09-26 20:35:34 +03:00
Jo-Philipp Wich
342af521eb Merge pull request #486 from dwmw2/for-15.05
luci/statistics: Fix nut UPS graphs
2015-09-22 23:04:34 +02:00
David Woodhouse
75327e3c35 luci/statistics: Fix nut UPS graphs
At some point since I last checked, the nut plugin for collectd changed the
names of the timeleft and percent datasets. Update the luci module to match
so that those graphs are generated correctly again.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
(cherry picked from commit 41ec4c68ad)
2015-09-22 21:56:59 +01:00
Hannu Nyman
30f6fe82af Merge pull request #474 from hnyman/entropy-1505
for-15.05 statistics: Backport entropy support, config cleanup, init scripts cleanup
2015-09-15 10:51:42 +03:00
Hannu Nyman
d91f0ef027 statistics: remove references to Lucid from scripts
Both init.d and uci-defaults scripts included in luci-app-statistics
still contained stuff related to lucid, which package was removed by
91b97bc9f6

Changes to scripts:
* init.d: lucid reference removed,
          /var/etc creation moved earlier (before first possible use)
* uci-defaults: lucid parameters & restart removed
  (but busybox httpd stuff was left intact, although it might be unnecessary)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 0d5070c510)
2015-09-15 10:22:58 +03:00
Hannu Nyman
8e156d6e5c statistics: adjust default settings to match default plugins
Adjust default settings to match the plugins installed by default
(default plugins: iwinfo, interface, load)

* disable plugins not installed by default to avoid error messages at start
* remove references to Freifunk interfaces, as most users do not have those

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 4f429c5c8d)
2015-09-15 10:18:43 +03:00
Hannu Nyman
a2a61aae0f statistics: cleanup config file
No functional changes, but the file is reorganised:
* group settings: general settings / output plugins / input plugins
* sort settings inside a group
* remove quotes from option names to match the current uci behaviour
* whitespace corrections

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 6a4226b3d1)
2015-09-15 10:16:07 +03:00
Hannu Nyman
8b1de85db8 for-15.05 statistics: Add support for entropy stats
Backport the addition of statistics on the available entropy
from 7df0df48c0

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-09-15 10:09:57 +03:00
Hannu Nyman
3836b457b6 Luci opkg/packages: Limit version string display to 26 chars
Many packages currently include a git commit hash in version string.
That makes version strings very long and the version column takes much space
when listing available/installed packages in Luci.

Longest version string is 58 characters (micropython).
85 packages have at least 50 chars and 150 packages at least 40 chars.

Adjust Luci to display max. 26 characters (= luci's own version string).

Longer version strings are cut to: "first 21c" + ".." + "last 3c"

The last 3 chars are used to preserve the possible PKG_REVISION string.
E.g. 'opkg' has only hash+PKG_REVISION, so using only start of the string
might not be optimal.

Examples:

1.3.10-20150302-f2a889564b3a215902622b040a1247af38cb8203-1
1.3.10-20150302-f2a88..3-1

0.1-20150302-654c7d288603f7dae09eb09b57fb67b38c7ac6c3-1
0.1-20150302-654c7d28..3-1

9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7
9c97d5ecd795709c8584e..d-7

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(backport of commit ca75918ff3)
2015-09-05 11:24:37 +03:00
Hannu Nyman
b179283a67 statistics: fix typo
sed -i "s/collected date/collected data/"

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-09-02 15:59:23 +03:00
hnyman
8d2b5702ec Merge pull request #455 from hnyman/backport-stats
for-15.05: statistics: Backport recent improvements
2015-08-29 15:48:31 +03:00
Hannu Nyman
7167d97d32 statistics: clarify CPU/processor graph by removing "idle" from it
Clarify the CPU time consumption graph by removing the "idle" data from it.
Especially with light traffic, removing "idle" enables the graph
to scale better and to properly show the CPU load variations.

If "idle" data needs to be seen, it might be added as a second graph below.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 5ce647746e)
2015-08-28 23:26:58 +03:00
Hannu Nyman
27ca0790ec statistics: clarify stats introduction
* Clarify the short explanation on the statistics section's front page.
* Mention the possibility of additional collectd plugins to get more stats.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 0141494935)
2015-08-28 23:26:58 +03:00
Hannu Nyman
f6a4436d84 statistics: memory plugin - improve graph by better scaling of y-axis
Utilise alt_autoscale_max to make the memory chart y-axis to scale better
for devices with e.g. 128 MB RAM.

Also fix the axis min value to 0.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 9a06498dbd)
2015-08-28 23:26:58 +03:00
Hannu Nyman
119eaf24d8 statistics: support rrdtool's alt_autoscale and alt_autoscale_max options
Implement support for alternative scaling of the y-axis.
By default, rrdtool will autoscale to 1,2,5,10,20,50,100,200,... etc.,
which is not always suitable (e.g. memory charts for device with 128 MB).

Rrdtool 1.0.50 already supports alternative autoscaling that creates
a tighter y-axis. Implement graph-level options in Luci statistics to
support those boolean options as "alt_autoscale" and "alt_autoscale_max".

info at http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 86ff4bd3a4)
2015-08-28 23:26:58 +03:00
Hannu Nyman
18593ecf00 statistics: cpu graph - add label definitions, add softirq and interrupt stats
CPU plugin in the Luci statistics was missing the label definitions,
so the field labels are like "cpu_system" instead of "System".
Add proper label definitions to CPU (like the other plugins already have).

The statistics graph was also missing softirq and interrupt stats, although colors
for them were defined. Softirq consumes massive amount of CPU especially with
any qos in use, so it is important for the user to see also that data. Add both
softirq and interrupt stats to the graph.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 962cd2c4c1)
2015-08-28 23:25:57 +03:00
kdarbyshirebryant
791ca8b6d2 Delete luci-upnp
Stop sys upgrade automatically disabling miniupnpd on first boot after upgrade.
I spent a lot of time tracking this behaviour down which only occurs if you have luci-app-upnp installed.
2015-08-21 15:08:28 +02:00
Jo-Philipp Wich
21cf10ca63 Merge pull request #445 from hnyman/for-15.05
statistics: fix ping graph label regression
2015-08-19 10:14:53 +02:00
Hannu Nyman
36a7fb48da statistics: fix ping graph label regression
Update to collectd 5.4.1 changed the field from "ping" to "value",
which was changed in the graph definition here, but the label definition
was forgotten. Field's label now reads "ping_IPaddr_value".

Correct the label definition to show only IPaddr like the other two graphs.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-08-19 11:10:30 +03:00
Karl Palsson
22f687d0b1 http.protocol: Support filehandlers for unhandled encodings
The setfilehandler() functions used for mime and url encoded message
bodies all operate with a signature of fh(meta, chunk, eof), but for
unhandled encodings, the callback was directly assigned to the sink
function, which has a signature of snk(chunk).  Insert a wrapper to
properly generate the EOF flag, and include a stub "meta" block
providing a virtual "name" and also the original client provided
Content-Type header, to possibly help with taking alternative actions in
the file handler.

The sink function created for raw content decoding also used the wrong
signature for the sink function.

Signed-off-by: Karl Palsson <karlp@remake.is>
2015-08-18 17:53:30 +02:00
Christian Schoenebeck
7d8163e568 Merge pull request #442 from hnyman/for-15.05
for-15:05: Timezone information: update to 2015f
2015-08-18 09:49:46 +02:00
Hannu Nyman
428d181bf3 for-15:05: Timezone information: update to 2015f
Changes in 2015e and 2015f:
http://mm.icann.org/pipermail/tz-announce/2015-June/000032.html
http://mm.icann.org/pipermail/tz-announce/2015-August/000033.html

     Morocco will suspend DST from 2015-06-14 03:00 through 2015-07-19 02:00,
     not 06-13 and 07-18 as we had guessed.

     Assume Cayman Islands will observe DST starting next year, using US rules.
     Although it isn't guaranteed, it is the most likely.

     North Korea switches to +0830 on 2015-08-15.
     The abbreviation remains "KST".

     Uruguay no longer observes DST.

     Moldova starts and ends DST at 00:00 UTC, not at 01:00 UTC.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-08-17 22:59:53 +03:00
Michael Marley
c595f3095b luci-app-vnstat: Fix blank graphs for iface names with underscores
The regex used to process the iface query string argument in
vnstat.htm was stripping underscores, which caused the graph not to
display for interfaces with names containing underscores.  This
patch adds the underscore to that regex so that the interface name
will be correct and the graph will be displayed.

Signed-off-by: Michael Marley <michael@michaelmarley.com>
2015-08-10 09:37:23 +02:00
Georgi Valkov
3a7d738e27 Fix: A disabled wireless network may be shown as enabled, when multiple networks are defined on the same radio. 2015-07-27 11:39:01 +02:00
Georgi Valkov
91faca4009 Fix: Status for disabled wireless networks may display the SSID, BSSID and Mode of an active network on the same radio. 2015-07-27 11:39:01 +02:00
Georgi Valkov
5d71ab50fb When editing an AP wireless network in LuCI, if one or more STA networks are also present on the same radio, then the channel is locked and cannot be changed for the AP. The case when all STA networks are disabled is not considered. This patch fixes the issue. Disabled networks no longer apply a lock on the channel. 2015-07-27 11:39:01 +02:00
Georgi Valkov
7d1ed597c3 Workaround: saved administration site user and pass may appear on the Wireless configuration page, replacing the WPA key. 2015-07-27 11:39:01 +02:00
Jo-Philipp Wich
69fd4f14ee luci-mod-rpc: move luci config require into the authentication function (#427)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-07-15 23:29:15 +02:00
Jo-Philipp Wich
69e93baa2a luci-mod-rpc: add missing luci config require
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-07-15 22:32:44 +02:00
Manuel Munz
218e8f608e contrib/meshwizard: fix LAN with OLSR and DHCP 2015-07-07 12:23:32 +02:00
Manuel Munz
eb001ef897 contrib/meshwizard: fix a bug that occured when processing list options in set_defaults() 2015-07-05 01:34:24 +02:00
Manuel Munz
cf2e3f6c20 fix ifname in wifi overview (freifunk public status). 2015-06-28 16:10:04 +02:00
Manuel Munz
3a9e1af526 Fix routes on freifunk public status page 2015-06-28 16:09:36 +02:00
Manuel Munz
e3ee086d19 contrib/community-profiles/augsburg: Increase leasetime and bandwidth limits 2015-06-22 23:45:04 +02:00
Manuel Munz
9eb813979e applications/splash: remove set -x from splash.sh 2015-06-22 23:45:04 +02:00
Manuel Munz
2be6c91416 modules/freifunk: fix basics cbi model 2015-06-22 23:45:04 +02:00
Manuel Munz
fe3e14a716 applications/olsr: change config file download on olsr overview page to use seperate v4 and v6 config files 2015-06-22 23:45:03 +02:00
Manuel Munz
0382c12140 contrib/meshwizard: add ipv6only option to txtinfo/jsoninfo plugin config 2015-06-22 23:45:03 +02:00
Manuel Munz
84189026ad applications/olsr: redirect errors on jsoninfo connects with netcat to /dev/null to avoid spamming the log 2015-06-22 23:45:03 +02:00
Manuel Munz
1a647a9e3b applications/olsr: Get jsoninfo source port prom olsrd/olsrd6 config file 2015-06-22 23:45:03 +02:00
Manuel Munz
b0d1ce83b6 meshwizard: use different port (9091) for ipv6 jsoninfo 2015-06-22 23:45:03 +02:00
Manuel Munz
8fa78cf0d3 add changes that were missing in the last commit 2015-06-22 23:45:03 +02:00
Manuel Munz
7c7bad55d4 contrib/meshwizard: fix interaction with uci in OpenWrt CC, see https://dev.openwrt.org/ticket/19539 2015-06-22 23:44:40 +02:00
Christian Schoenebeck
8005ecb2b9 Merge pull request #418 from chris5560/for-15.05
[for-15.05] luci-app-radicale: copied from master
2015-06-16 21:59:10 +02:00
Christian Schoenebeck
aff488d5d1 [for-15.05] luci-app-radicale: copied from master
Initial release
with fixed function ipkg_ver_compare()

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-06-16 17:30:50 +02:00
Jo-Philipp Wich
f27ebb620c Merge pull request #415 from chris5560/for-15.05
[for-15.05]luci-app-privoxy: update to version 1.0.4-2
2015-06-16 09:55:47 +02:00
Jo-Philipp Wich
3d08fcb632 Merge pull request #417 from fabio70mi/patch-2
Update base.po
2015-06-16 09:54:36 +02:00
fabio70mi
0cf485c0d1 Update base.po
Corrected "Aggironamento Automatico" to "Aggiornamento Automatico"
2015-06-15 14:40:52 +02:00
Christian Schoenebeck
4ff133fe75 [for-15.05]luci-app-privoxy: update to version 1.0.4-2
* fixed function ipkg_ver_compare()
* add chinese translations (thanks to maz-1) taken from #410

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-06-14 21:03:15 +02:00
Christian Schoenebeck
ffd45fd9c5 Merge pull request #412 from chris5560/for-15.05
[for-15.05] luci-app-ddns: update to 2.2.4-1 (not copied from master)
2015-06-14 20:46:18 +02:00
Christian Schoenebeck
c2d3b9ed4f Merge pull request #413 from oneru/for-15.05
Luci-app-fwknopd:add a couple config options to the interface
2015-06-14 20:45:31 +02:00
Jonathan Bennett
0ccfd59325 Luci-app-fwknopd:add a couple config options to the interface
Minor tweaks to uci-defaults
refresh translation files
Signed-off-by: Jonathan Bennett <JBennett@incomsystems.biz>
2015-06-14 08:47:59 -05:00
Christian Schoenebeck
e00760a753 [for-15.05] luci-app-ddns: update to 2.2.4-1 (not copied from master)
* fixed version checking in function ipkg_ver_compare()
* Reported issue #387 and openwrt/packages issue 1285

changed in Version: 2.2.3-1
* reflect updated language file for zh-cn
* change default for retry_count to 0 compatible to ddns-scripts 2.4.2-1
* addition to retry_count help description
* modified dependency on ddns-scripts 2.4.2-1

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-06-14 13:12:41 +02:00
Jo-Philipp Wich
65e5e0dd89 Merge pull request #390 from hnyman/for-15.05
for-15.05: Update timezone data to 2015d
2015-06-10 10:19:38 +02:00
Jonathan Bennett
a497fbab4c Luci-app-fwknopd: Update uci-defaults as key-gen is now exposed in the fwknopd binary
Signed-off-by: Jonathan Bennett <jbennett@incomsystems.biz>
2015-05-26 17:15:48 +02:00
Jo-Philipp Wich
12cbfc8ec4 luci-base: rename .gitignore to .placeholder
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-05-26 16:28:25 +02:00
Hannu Nyman
fdc83620a5 Update timezone data to 2015d
Timezone information is updated to 2015d, released on 24 Apr 2015.

I used build/zoneinfo2lua.pl to pull data from my Ubuntu 15.04.

Changes in 2015d are rather small:
http://mm.icann.org/pipermail/tz-announce/2015-April/000031.html

Changes affecting future time stamps
Egypt will not observe DST in 2015 and will consider canceling it
permanently. For now, assume no DST indefinitely.

Change affecting time zone abbreviations
The abbreviations for Hawaii-Aleutian standard and daylight times
have been changed from HAST/HADT to HST/HDT, as per US Government
Printing Office style. This affects only America/Adak since 1983,
as America/Honolulu was already using the new style.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2015-05-23 17:41:12 +03:00
Jo-Philipp Wich
640ed04a86 Merge pull request #386 from oneru/for-15.05
[For 15.05] add luci-app-fwknopd to the release branch
2015-05-21 14:50:53 +02:00
Jonathan Bennett
ce3179c6d1 luci-app-fwknopd: Add qr code support
Signed-off-by: Jonathan Bennett <jbennett@incomsystems.biz>
2015-05-20 18:09:49 -05:00
Jonathan Bennett
d009a73bd1 Add initial luci-app-fwknopd - a way to control the firewall knock daemon from luci
Signed-off-by: Jonathan Bennett <jbennett@incomsystems.biz>
2015-05-20 18:09:45 -05:00
Jo-Philipp Wich
7a54785ea6 collections/luci: depend on luci-proto-ipv6 if IPV6 is enabled
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-05-06 15:59:40 +02:00
Jo-Philipp Wich
c43879f59c luci.mk: don't builtin translations selected by CONFIG_ALL
Make sure that translation packages enabled through CONFIG_ALL
that depend on builtin packages are restricted to modules.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-05-05 10:33:30 +02:00
220 changed files with 10061 additions and 4271 deletions

View file

@ -1,16 +1,16 @@
# Contributing Guidelines # Contributing Guidelines
Patches and pull-requests: ## Patches and Pull requests:
If you want to contribute a change to LuCI, please either send a patch using git send-email If you want to contribute a change to LuCI, please either send a patch using git send-email
or open a pull request against the openwrt/luci repository. or open a "pull request" against the openwrt/luci repository.
Regardless of whether you send a patch or open a pull request, please try to follow these rules: Regardless of whether you send a patch or open a pull request, please try to follow these rules:
* Have a useful subject prefixed with the component name * Have a useful subject prefixed with the component name
(E.g.: "modules/admin-full: fix wifi channel selection on multiple STA networks") (E.g.: "luci-mod-admin-full: fix wifi channel selection on multiple STA networks")
* Shortly explain the changes made and - if applicable - the reasoning behind them * Shortly explain the changes made and - if applicable - the reasoning behind them
* Include Signed-off-by in the comment * Commit message of each commit should include a Signed-off-by line
(See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>) (See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>)
In case you like to send patches by mail, please use the [LuCI mailinglist](https://lists.subsignal.org/mailman/listinfo/luci) In case you like to send patches by mail, please use the [LuCI mailinglist](https://lists.subsignal.org/mailman/listinfo/luci)
@ -19,22 +19,41 @@ or the [OpenWrt Development List](https://lists.openwrt.org/cgi-bin/mailman/list
If you send via the OpenWrt list, include a "[luci]" tag in your subject line. If you send via the OpenWrt list, include a "[luci]" tag in your subject line.
For general information on patch submission, follow the [OpenWrt patch submission guideline](https://dev.openwrt.org/wiki/SubmittingPatches). For general information on patch submission, follow the [OpenWrt patch submission guideline](https://dev.openwrt.org/wiki/SubmittingPatches).
## Advice on pull requests:
If you have commit access: Pull requests are the easiest way to contribute changes to git repos at Github. They are the preferred contribution method, as they offer a nice way for commenting and amending the proposed changes.
* You need a local "fork" of the Github repo.
* Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request. Workflow using "feature_x" as the example:
- Update your local git fork to the tip (of the master, usually)
- Create the feature branch with `git checkout -b feature_x`
- Edit changes and commit them locally
- Push them to your Github fork by `git push -u origin feature_x`. That creates the "feature_x" branch at your Github fork and sets it as the remote of this branch
- When you now visit Github, you should see a proposal to create a pull request
* If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then use `git push` to automatically update the pull request.
* If you need to change something in the existing pull request (e.g. to add a missing signed-off-by line to the commit message), you can use `git push -f` to overwrite the original commits. That is easy and safe when using a feature branch. Example workflow:
- Checkout the feature branch by `git checkout feature_x`
- Edit changes and commit them locally. If you are just updating the commit message in the last commit, you can use `git commit --amend` to do that
- If you added several new commits or made other changes that require cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to edit) to possibly squash some commits
- Push the changed commits to Github with `git push -f` to overwrite the original commits in the "feature_x" branch with the new ones. The pull request gets automatically updated
## If you have commit access:
* Do NOT use git push --force. * Do NOT use git push --force.
* Use Pull Requests if you are unsure and to suggest changes to other developers. * Use Pull Requests if you are unsure and to suggest changes to other developers.
Gaining commit access: ## Gaining commit access:
* Commit access will be granted to responsible contributors who have made * Commit access will be granted to responsible contributors who have made
useful pull requests and / or feedback or patches to this repository or useful pull requests and / or feedback or patches to this repository or
OpenWrt in general. Please include your request for commit access in your OpenWrt in general. Please include your request for commit access in your
next pull request or ticket. next pull request or ticket.
Release Branches: ## Release Branches:
* Branches named "luci-X.Y" (e.g. luci-0.12) are release branches. * Branches named "for-XX.YY" or "luci-X.Y" (e.g. "for-15.05") are release branches.
* These branches are built with the respective OpenWrt release and are created * These branches are built with the respective OpenWrt release and are created
during the release stabilisation phase. during the release stabilisation phase.
* Please ONLY cherry-pick or commit security and bug-fixes to these branches. * Please ONLY cherry-pick or commit security and bug-fixes to these branches.

View file

@ -0,0 +1,14 @@
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for Adblock
LUCI_DEPENDS:=+adblock
LUCI_PKGARCH:=all
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,12 @@
-- Copyright 2016 Openwrt.org
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.adblock", package.seeall)
function index()
if not nixio.fs.access("/etc/config/adblock") then
return
end
entry({"admin", "services", "adblock"}, cbi("adblock"), _("Adblock"), 40)
end

View file

@ -0,0 +1,103 @@
-- Copyright 2016 Openwrt.org
-- Licensed to the public under the Apache License 2.0.
m = Map("adblock", translate("Adblock"),
translate("Configuration of the adblock package to block ad/abuse domains by using DNS."))
-- General options
s = m:section(NamedSection, "global", "adblock", translate("Global options"))
o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
o1.rmempty = false
o1.default = 0
o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"),
translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist."))
o3.rmempty = false
o3.datatype = "file"
fdns = s:option(Flag, "adb_forcedns", translate("Redirect all DNS queries to the local resolver"),
translate("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."))
fdns.rmempty = false
fdns.default = fdns.enabled
-- Statistics
t = m:section(NamedSection, "global", "adblock", translate("Statistics"))
dat = t:option(DummyValue, "adb_lastrun", translate("Last update of the blocklists"))
tot = t:option(DummyValue, "adb_overall_count", translate("Total count of blocked domains"))
prc = t:option(DummyValue, "adb_percentage", translate("Percentage of blocked packets (before last update, IPv4/IPv6)"))
-- Blocklist options
bl = m:section(TypedSection, "source", translate("Blocklist sources"),
translate("Available blocklist sources (")
.. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]]
.. translate("see list details")
.. [[</a>]]
.. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci."))
bl.template = "cbi/tblsection"
name = bl:option(Flag, "enabled", translate("Enabled"))
name.rmempty = false
des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
cou = bl:option(DummyValue, "adb_src_count", translate("Count"))
upd = bl:option(DummyValue, "adb_src_timestamp", translate("List date/state"))
-- Additional options
s2 = m:section(NamedSection, "backup", "service", translate("Backup options"))
o4 = s2:option(Flag, "enabled", translate("Enable blocklist backup"))
o4.rmempty = false
o4.default = 0
o5 = s2:option(Value, "adb_dir", translate("Backup directory"))
o5.rmempty = false
o5.datatype = "directory"
-- Extra options
e = m:section(NamedSection, "global", "adblock", translate("Extra options"),
translate("Options for further tweaking in case the defaults are not suitable for you."))
a0 = e:option(Flag, "adb_restricted", translate("Do not write status info to flash"),
translate("Skip writing update status information to the config file. Status fields on this page will not be updated."))
a0.default = 0
a1 = e:option(Value, "adb_nullport", translate("Port of the adblock uhttpd instance"))
a1.optional = true
a1.default = 65534
a1.datatype = "port"
a5 = e:option(Value, "adb_nullportssl", translate("Port of the adblock uhttpd instance for https links"))
a5.optional = true
a5.default = 65535
a5.datatype = "port"
a2 = e:option(Value, "adb_nullipv4", translate("IPv4 blackhole ip address"))
a2.optional = true
a2.default = "198.18.0.1"
a2.datatype = "ip4addr"
a3 = e:option(Value, "adb_nullipv6", translate("IPv6 blackhole ip address"))
a3.optional = true
a3.default = "::ffff:c612:0001"
a3.datatype = "ip6addr"
a4 = e:option(Value, "adb_fetchttl", translate("Timeout for blocklist fetch (seconds)"))
a4.optional = true
a4.default = 5
a4.datatype = "range(2,60)"
a7 = e:option(Value, "adb_lanif", translate("Name of the logical lan interface"))
a7.optional = true
a7.default = "lan"
a7.datatype = "network"
return m

View file

@ -0,0 +1,11 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@adblock[-1]
add ucitrack adblock
set ucitrack.@adblock[-1].init=adblock
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0

View file

@ -1,35 +1,35 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: ahcp\n" "Project-Id-Version: LuCI: ahcp\n"
"POT-Creation-Date: \n" "POT-Creation-Date: 2013-09-05 15:29+0200\n"
"PO-Revision-Date: 2013-09-05 15:29+0200\n" "PO-Revision-Date: 2018-01-18 17:55+0300\n"
"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n" "Language-Team: http://cyber-place.ru\n"
"Language: ru\n" "Language: ru\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.6\n" "X-Generator: Poedit 1.8.7.1\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
# Ad-Hoc Configuration Protocol - протокол автоматической конфигурации IPv6 и сетей IPv6/IPv4 двойного стека
msgid "AHCP Server" msgid "AHCP Server"
msgstr "AHCP-сервер" msgstr "AHCP сервер"
#, fuzzy
msgid "" msgid ""
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " "AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
"networks designed to be used in place of router discovery or DHCP on " "networks designed to be used in place of router discovery or DHCP on "
"networks where it is difficult or impossible to configure a server within " "networks where it is difficult or impossible to configure a server within "
"every link-layer broadcast domain, for example mobile ad-hoc networks." "every link-layer broadcast domain, for example mobile ad-hoc networks."
msgstr "" msgstr ""
"AHCP - это протокол автоматической конфигурации сетей IPv6 и IPv6/IPv4, " "AHCP - это протокол автоматической настройки сетей IPv6 и IPv6/IPv4, "
"разработанный для использования вместо DHCP и протоколов обнаружения " "разработанный для использования вместо DHCP и протоколов обнаружения "
"маршрутизаторов в сетях, где сложно или невозможно настроить сервер внутри " "маршрутизаторов в сетях, где сложно или невозможно настроить сервер внутри "
"каждой широковещательной зоны канального уровня, например, в мобильных ad-" "каждой широковещательной зоны канального уровня, например в мобильных ad-hoc "
"hoc сетях." "сетях."
msgid "Active AHCP Leases" msgid "Active AHCP Leases"
msgstr "Активные арендованные AHCP-адреса" msgstr "Активные арендованные AHCP-адреса"
@ -44,23 +44,22 @@ msgid "Age"
msgstr "Возраст" msgstr "Возраст"
msgid "Announced DNS servers" msgid "Announced DNS servers"
msgstr "Анонсируемые DNS-серверы" msgstr "Объявить DNS сервера"
msgid "Announced NTP servers" msgid "Announced NTP servers"
msgstr "Анонсируемые NTP-серверы" msgstr "Объявить NTP сервера"
msgid "Announced prefixes" msgid "Announced prefixes"
msgstr "Анонсируемые префиксы" msgstr "Объявить префиксы"
msgid "Collecting data..." msgid "Collecting data..."
msgstr "Сбор данных..." msgstr "Сбор данных..."
#, fuzzy
msgid "Forwarder" msgid "Forwarder"
msgstr "Перенаправление запросов" msgstr "Перенаправление запросов"
msgid "General Setup" msgid "General Setup"
msgstr "Общие настройки" msgstr "Основные настройки"
msgid "IPv4 and IPv6" msgid "IPv4 and IPv6"
msgstr "IPv4 и IPv6" msgstr "IPv4 и IPv6"
@ -72,7 +71,7 @@ msgid "IPv6 only"
msgstr "Только IPv6" msgstr "Только IPv6"
msgid "Lease directory" msgid "Lease directory"
msgstr "Директория арендованных адресов" msgstr "Файл арендованных<br />адресов"
msgid "Lease validity time" msgid "Lease validity time"
msgstr "Срок действия аренды" msgstr "Срок действия аренды"
@ -81,7 +80,7 @@ msgid "Log file"
msgstr "Файл журнала" msgstr "Файл журнала"
msgid "Multicast address" msgid "Multicast address"
msgstr "Групповой адрес" msgstr "Адрес групповой передачи"
msgid "Operation mode" msgid "Operation mode"
msgstr "Режим работы" msgstr "Режим работы"
@ -90,7 +89,7 @@ msgid "Port"
msgstr "Порт" msgstr "Порт"
msgid "Protocol family" msgid "Protocol family"
msgstr "Протокол" msgstr "Семейство протоколов"
msgid "Served interfaces" msgid "Served interfaces"
msgstr "Используемые интерфейсы" msgstr "Используемые интерфейсы"
@ -99,13 +98,13 @@ msgid "Server"
msgstr "Сервер" msgstr "Сервер"
msgid "Specifies the announced IPv4 and IPv6 NTP servers" msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Определяет IPv4 и IPv6 NTP-серверы" msgstr "Задайте IPv4 и IPv6 NTP-серверы."
msgid "Specifies the announced IPv4 and IPv6 name servers" msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Определяет IPv4 и IPv6 DNS-серверы" msgstr "Задайте IPv4 и IPv6 DNS-серверы."
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Определяет IPv4- и IPv6-префиксы сети в нотации CIDR" msgstr "Задайте IPv4- и IPv6-префиксы сети в нотации CIDR."
msgid "The AHCP Service is not running." msgid "The AHCP Service is not running."
msgstr "Служба AHCP не запущена." msgstr "Служба AHCP не запущена."

View file

@ -7,7 +7,6 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for Asterisk LUCI_TITLE:=LuCI Support for Asterisk
LUCI_DEPENDS:=+ahcpd
include ../../luci.mk include ../../luci.mk

View file

@ -1,41 +1,43 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-10-15 16:48+0200\n"
"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
"Language-Team: none\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: commands\n"
"POT-Creation-Date: 2013-10-15 16:48+0300\n"
"PO-Revision-Date: 2018-01-14 11:42+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "A short textual description of the configured command" msgid "A short textual description of the configured command"
msgstr "Короткое текстовое описание команды" msgstr "Короткое текстовое описание команды"
msgid "Access command with" msgid "Access command with"
msgstr "Доступ к команде через" msgstr ""
#, fuzzy
msgid "" msgid ""
"Allow executing the command and downloading its output without prior " "Allow executing the command and downloading its output without prior "
"authentication" "authentication"
msgstr "" msgstr ""
"Разрешить выполнение команды и загрузку ее вывода без предварительной " "Разрешить выполнение команды и загрузку ее выходных данных без ввода пароля "
"аутентификации" "пользователя"
msgid "Allow the user to provide additional command line arguments" msgid "Allow the user to provide additional command line arguments"
msgstr "" msgstr ""
"Разрешить пользователям использовать дополнительные аргументы командной " "Разрешить пользователю предоставлять дополнительные аргументы командной "
"строки" "строки"
msgid "Arguments:" msgid "Arguments:"
msgstr "Аргументы:" msgstr "Аргументы:"
msgid "Binary data not displayed, download instead." msgid "Binary data not displayed, download instead."
msgstr "Двоичные данные не отображаются, вместо этого - выгружаются" msgstr "Двоичные данные не отображаются, вместо этого загружаются."
msgid "Code:" msgid "Code:"
msgstr "Код:" msgstr "Код:"
@ -47,10 +49,10 @@ msgid "Command"
msgstr "Команда" msgstr "Команда"
msgid "Command failed" msgid "Command failed"
msgstr "Команда не выполнена" msgstr "Ошибка команды"
msgid "Command line to execute" msgid "Command line to execute"
msgstr "Командная строка для выполнения" msgstr "Командная строка<br />для выполнения"
msgid "Command successful" msgid "Command successful"
msgstr "Команда выполнена" msgstr "Команда выполнена"
@ -59,7 +61,7 @@ msgid "Command:"
msgstr "Команда:" msgstr "Команда:"
msgid "Configure" msgid "Configure"
msgstr "Настроить" msgstr "Настройка панели управления"
msgid "Custom Commands" msgid "Custom Commands"
msgstr "Пользовательские команды" msgstr "Пользовательские команды"
@ -68,7 +70,7 @@ msgid "Custom arguments"
msgstr "Пользовательские аргументы" msgstr "Пользовательские аргументы"
msgid "Dashboard" msgid "Dashboard"
msgstr "Информационная панель" msgstr "Панель управления"
msgid "Description" msgid "Description"
msgstr "Описание" msgstr "Описание"
@ -95,8 +97,27 @@ msgid ""
"This page allows you to configure custom shell commands which can be easily " "This page allows you to configure custom shell commands which can be easily "
"invoked from the web interface." "invoked from the web interface."
msgstr "" msgstr ""
"Эта страница предоставляет возможность настраивать пользовательские " "Страница позволяет настроить выполнение консольных команд пользователя, "
"консольные команды, которые могут быть легко вызваны из веб-интерфейса" "которые могут быть легко вызваны из веб-интерфейса по нажатию "
"соответствующей кнопки. Здесь вы можете подписать кнопки и указать команды."
msgid "Waiting for command to complete..." msgid "Waiting for command to complete..."
msgstr "Ожидание завершения команды..." msgstr "Ожидание завершения выполнения команды..."
#~ msgid "Command executed successfully."
#~ msgstr "Команда выполнена успешно."
#~ msgid "Command exited with status code"
#~ msgstr "Команда вышла с кодом состояния."
#~ msgid "Download execution result"
#~ msgstr "Результат выполнения загрузки"
#~ msgid "Or display result"
#~ msgstr "Или отобразить результат"
#~ msgid "Standard Error"
#~ msgstr "Стандартная ошибка"
#~ msgid "Standard Output"
#~ msgstr "Стандартный вывод"

View file

@ -1,5 +1,5 @@
# #
# Copyright (C) 2008-2015 The LuCI Team <luci@lists.subsignal.org> # Copyright (C) 2008-2017 The LuCI Team <luci@lists.subsignal.org>
# #
# This is free software, licensed under the Apache License, Version 2.0 . # This is free software, licensed under the Apache License, Version 2.0 .
# #
@ -10,7 +10,7 @@ PKG_NAME:=luci-app-ddns
# Version == major.minor.patch # Version == major.minor.patch
# increase on new functionality (minor) or patches (patch) # increase on new functionality (minor) or patches (patch)
PKG_VERSION:=2.2.2 PKG_VERSION:=2.2.5
# Release == build # Release == build
# increase on changes of translation files # increase on changes of translation files
@ -33,6 +33,6 @@ help
$(PKG_MAINTAINER) $(PKG_MAINTAINER)
endef endef
include $(TOPDIR)/feeds/luci/luci.mk include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature # call BuildPackage - OpenWrt buildroot signature

View file

@ -1,7 +1,7 @@
-- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Copyright 2013 Manuel Munz <freifunk at somakoma dot de> -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
module("luci.controller.ddns", package.seeall) module("luci.controller.ddns", package.seeall)
@ -15,7 +15,8 @@ local SYS = require "luci.sys"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util" local UTIL = require "luci.util"
DDNS_MIN = "2.2.0-1" -- minimum version of service required DDNS_MIN = "2.7.6-1" -- minimum version of service required
luci_helper = "/usr/lib/ddns/dynamic_dns_lucihelper.sh"
function index() function index()
local nxfs = require "nixio.fs" -- global definitions not available local nxfs = require "nixio.fs" -- global definitions not available
@ -118,13 +119,19 @@ local function _get_status()
end end
-- try to get registered IP -- try to get registered IP
local domain = s["domain"] or "_nodomain_" local lookup_host = s["lookup_host"] or "_nolookup_"
local dnsserver = s["dns_server"] or "" local dnsserver = s["dns_server"] or ""
local force_ipversion = tonumber(s["force_ipversion"] or 0) local force_ipversion = tonumber(s["force_ipversion"] or 0)
local force_dnstcp = tonumber(s["force_dnstcp"] or 0) local force_dnstcp = tonumber(s["force_dnstcp"] or 0)
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]] local is_glue = tonumber(s["is_glue"] or 0)
command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 .. local command = luci_helper .. [[ -]]
[[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver if (use_ipv6 == 1) then command = command .. [[6]] end
if (force_ipversion == 1) then command = command .. [[f]] end
if (force_dnstcp == 1) then command = command .. [[t]] end
if (is_glue == 1) then command = command .. [[g]] end
command = command .. [[l ]] .. lookup_host
if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end
command = command .. [[ -- get_registered_ip]]
local reg_ip = SYS.exec(command) local reg_ip = SYS.exec(command)
if reg_ip == "" then if reg_ip == "" then
reg_ip = "_nodata_" reg_ip = "_nodata_"
@ -135,7 +142,7 @@ local function _get_status()
section = section, section = section,
enabled = enabled, enabled = enabled,
iface = iface, iface = iface,
domain = domain, lookup = lookup_host,
reg_ip = reg_ip, reg_ip = reg_ip,
pid = pid, pid = pid,
datelast = datelast, datelast = datelast,
@ -151,7 +158,7 @@ end
function logread(section) function logread(section)
-- read application settings -- read application settings
local uci = UCI.cursor() local uci = UCI.cursor()
local log_dir = uci:get("ddns", "global", "log_dir") or "/var/log/ddns" local log_dir = uci:get("ddns", "global", "ddns_logdir") or "/var/log/ddns"
local lfile = log_dir .. "/" .. section .. ".log" local lfile = log_dir .. "/" .. section .. ".log"
local ldata = NXFS.readfile(lfile) local ldata = NXFS.readfile(lfile)
@ -220,7 +227,8 @@ function startstop(section, enabled)
uci:unload("ddns") uci:unload("ddns")
-- start dynamic_dns_updater.sh script -- start dynamic_dns_updater.sh script
os.execute ([[/usr/lib/ddns/dynamic_dns_updater.sh %s 0 > /dev/null 2>&1 &]] % section) local command = luci_helper .. [[ -S ]] .. section .. [[ -- start]]
os.execute(command)
NX.nanosleep(3) -- 3 seconds "show time" NX.nanosleep(3) -- 3 seconds "show time"
-- status changed so return full status -- status changed so return full status

View file

@ -1,7 +1,7 @@
-- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Copyright 2013 Manuel Munz <freifunk at somakoma dot de> -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
-- Copyright 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local NX = require "nixio" local NX = require "nixio"
@ -12,6 +12,7 @@ local DISP = require "luci.dispatcher"
local WADM = require "luci.tools.webadmin" local WADM = require "luci.tools.webadmin"
local DTYP = require "luci.cbi.datatypes" local DTYP = require "luci.cbi.datatypes"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local CTRL = require "luci.controller.ddns" -- this application's controller
-- takeover arguments -- ####################################################### -- takeover arguments -- #######################################################
local section = arg[1] local section = arg[1]
@ -67,42 +68,39 @@ end
-- local IP can be read -- local IP can be read
local function _verify_ip_source() local function _verify_ip_source()
-- section is globally defined here be calling agrument (see above) -- section is globally defined here be calling agrument (see above)
local _network = "-" local _arg
local _url = "-"
local _interface = "-"
local _script = "-"
local _proxy = ""
local _ipv6 = usev6:formvalue(section) local _ipv6 = usev6:formvalue(section)
local _source = (_ipv6 == "1") local _source = (_ipv6 == "1")
and src6:formvalue(section) and src6:formvalue(section)
or src4:formvalue(section) or src4:formvalue(section)
local command = CTRL.luci_helper .. [[ -]]
if (_ipv6 == "1") then command = command .. [[6]] end
if _source == "network" then if _source == "network" then
_network = (_ipv6 == "1") _arg = (_ipv6 == "1")
and ipn6:formvalue(section) and ipn6:formvalue(section)
or ipn4:formvalue(section) or ipn4:formvalue(section)
command = command .. [[n ]] .. _arg
elseif _source == "web" then elseif _source == "web" then
_url = (_ipv6 == "1") _arg = (_ipv6 == "1")
and iurl6:formvalue(section) and iurl6:formvalue(section)
or iurl4:formvalue(section) or iurl4:formvalue(section)
command = command .. [[u ]] .. _arg
-- proxy only needed for checking url -- proxy only needed for checking url
_proxy = (pxy) and pxy:formvalue(section) or "" _arg = (pxy) and pxy:formvalue(section) or ""
if (_arg and #_arg > 0) then
command = command .. [[ -p ]] .. _arg
end
elseif _source == "interface" then elseif _source == "interface" then
_interface = ipi:formvalue(section) command = command .. [[i ]] .. ipi:formvalue(section)
elseif _source == "script" then elseif _source == "script" then
_script = ips:formvalue(section) command = command .. [[s ]] .. ips:formvalue(section)
end
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh get_local_ip ]] ..
_ipv6 .. [[ ]] .. _source .. [[ ]] .. _network .. [[ ]] ..
_url .. [[ ]] .. _interface .. [[ ']] .. _script.. [[' ]] .. _proxy
local ret = SYS.call(command)
if ret == 0 then
return true -- valid
else
return nil -- invalid
end end
command = command .. [[ -- get_local_ip]]
return (SYS.call(command) == 0)
end end
-- cbi-map definition -- ####################################################### -- cbi-map definition -- #######################################################
@ -129,9 +127,9 @@ end
-- read application settings -- ################################################ -- read application settings -- ################################################
-- date format; if not set use ISO format -- date format; if not set use ISO format
date_format = m.uci:get(m.config, "global", "date_format") or "%F %R" ddns_dateformat = m.uci:get(m.config, "global", "ddns_dateformat") or "%F %R"
-- log directory -- log directory
log_dir = m.uci:get(m.config, "global", "log_dir") or "/var/log/ddns" ddns_logdir = m.uci:get(m.config, "global", "ddns_logdir") or "/var/log/ddns"
-- cbi-section definition -- ################################################### -- cbi-section definition -- ###################################################
ns = m:section( NamedSection, section, "service", ns = m:section( NamedSection, section, "service",
@ -157,6 +155,25 @@ function en.parse(self, section)
DDNS.flag_parse(self, section) DDNS.flag_parse(self, section)
end end
-- IPv4/IPv6 - lookup_host -- #################################################
luh = ns:taboption("basic", Value, "lookup_host",
translate("Lookup Hostname"),
translate("Hostname/FQDN to validate, if IP update happen or necessary") )
luh.rmempty = false
luh.placeholder = "myhost.example.com"
function luh.validate(self, value)
if not value
or not (#value > 0)
or not DTYP.hostname(value) then
return nil, err_tab_basic(self) .. translate("invalid FQDN / required - Sample") .. ": 'myhost.example.com'"
else
return UTIL.trim(value)
end
end
--function luh.parse(self, section, novld)
-- DDNS.value_parse(self, section, novld)
--end
-- use_ipv6 (NEW) -- ########################################################## -- use_ipv6 (NEW) -- ##########################################################
usev6 = ns:taboption("basic", ListValue, "use_ipv6", usev6 = ns:taboption("basic", ListValue, "use_ipv6",
translate("IP address version"), translate("IP address version"),
@ -195,7 +212,7 @@ svc4.default = "-"
svc4:depends("use_ipv6", "0") -- only show on IPv4 svc4:depends("use_ipv6", "0") -- only show on IPv4
local services4 = { } local services4 = { }
local fd4 = io.open("/usr/lib/ddns/services", "r") local fd4 = io.open("/etc/ddns/services", "r")
if fd4 then if fd4 then
local ln local ln
@ -247,7 +264,7 @@ if not has_ipv6 then
end end
local services6 = { } local services6 = { }
local fd6 = io.open("/usr/lib/ddns/services_ipv6", "r") local fd6 = io.open("/etc/ddns/services_ipv6", "r")
if fd6 then if fd6 then
local ln local ln
@ -936,8 +953,10 @@ function dns.validate(self, value)
else else
local ipv6 = usev6:formvalue(section) local ipv6 = usev6:formvalue(section)
local force = (fipv) and fipv:formvalue(section) or "0" local force = (fipv) and fipv:formvalue(section) or "0"
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh verify_dns ]] .. local command = CTRL.luci_helper .. [[ -]]
value .. [[ ]] .. ipv6 .. [[ ]] .. force if (ipv6 == 1) then command = command .. [[6]] end
if (force == 1) then command = command .. [[f]] end
command = command .. [[d ]] .. value .. [[ -- verify_dns]]
local ret = SYS.call(command) local ret = SYS.call(command)
if ret == 0 then return value -- everything OK if ret == 0 then return value -- everything OK
elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host") elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host")
@ -1002,8 +1021,10 @@ if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
elseif has_proxy then elseif has_proxy then
local ipv6 = usev6:formvalue(section) or "0" local ipv6 = usev6:formvalue(section) or "0"
local force = (fipv) and fipv:formvalue(section) or "0" local force = (fipv) and fipv:formvalue(section) or "0"
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh verify_proxy ]] .. local command = CRTL.luci_helper .. [[ -]]
value .. [[ ]] .. ipv6 .. [[ ]] .. force if (ipv6 == 1) then command = command .. [[6]] end
if (force == 1) then command = command .. [[f]] end
command = command .. [[p ]] .. value .. [[ -- verify_proxy]]
local ret = SYS.call(command) local ret = SYS.call(command)
if ret == 0 then return value if ret == 0 then return value
elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host") elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host")
@ -1033,7 +1054,7 @@ slog:value("4", translate("Error"))
logf = ns:taboption("advanced", Flag, "use_logfile", logf = ns:taboption("advanced", Flag, "use_logfile",
translate("Log to file"), translate("Log to file"),
translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" .. translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" ..
translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] ) translate("File") .. [[: "]] .. ddns_logdir .. [[/]] .. section .. [[.log"]] )
logf.orientation = "horizontal" logf.orientation = "horizontal"
logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because
logf.default = "1" -- if not defined write to log by default logf.default = "1" -- if not defined write to log by default
@ -1156,11 +1177,13 @@ function fu.write(self, section, value)
end end
-- retry_count (NEW) -- ######################################################## -- retry_count (NEW) -- ########################################################
rc = ns:taboption("timer", Value, "retry_count", rc = ns:taboption("timer", Value, "retry_count")
translate("Error Retry Counter"), rc.title = translate("Error Retry Counter")
translate("On Error the script will stop execution after given number of retrys") ) rc.description = translate("On Error the script will stop execution after given number of retrys")
rc.default = 5 .. "<br />"
rc.rmempty = false -- validate ourselves for translatable error messages .. translate("The default setting of '0' will retry infinite.")
rc.default = 0
rc.rmempty = false -- validate ourselves for translatable error messages
function rc.validate(self, value) function rc.validate(self, value)
if not DTYP.uinteger(value) then if not DTYP.uinteger(value) then
return nil, err_tab_timer(self) .. translate("minimum value '0'") return nil, err_tab_timer(self) .. translate("minimum value '0'")
@ -1228,7 +1251,7 @@ lv.template = "ddns/detail_logview"
lv.inputtitle = translate("Read / Reread log file") lv.inputtitle = translate("Read / Reread log file")
lv.rows = 50 lv.rows = 50
function lv.cfgvalue(self, section) function lv.cfgvalue(self, section)
local lfile=log_dir .. "/" .. section .. ".log" local lfile=ddns_logdir .. "/" .. section .. ".log"
if NXFS.access(lfile) then if NXFS.access(lfile) then
return lfile .. "\n" .. translate("Please press [Read] button") return lfile .. "\n" .. translate("Please press [Read] button")
end end

View file

@ -1,4 +1,4 @@
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local NX = require "nixio" local NX = require "nixio"
@ -45,8 +45,8 @@ function ns.cfgvalue(self, section)
return self.map:get(section) return self.map:get(section)
end end
-- allow_local_ip -- ########################################################## -- upd_privateip -- ###########################################################
local ali = ns:option(Flag, "allow_local_ip") local ali = ns:option(Flag, "upd_privateip")
ali.title = translate("Allow non-public IP's") ali.title = translate("Allow non-public IP's")
ali.description = translate("Non-public and by default blocked IP's") .. ":" ali.description = translate("Non-public and by default blocked IP's") .. ":"
.. [[<br /><strong>IPv4: </strong>]] .. [[<br /><strong>IPv4: </strong>]]
@ -65,8 +65,8 @@ function ali.validate(self, value)
return value return value
end end
-- date_format -- ############################################################# -- ddns_dateformat -- #########################################################
local df = ns:option(Value, "date_format") local df = ns:option(Value, "ddns_dateformat")
df.title = translate("Date format") df.title = translate("Date format")
df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]] df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]]
.. translate("For supported codes look here") .. translate("For supported codes look here")
@ -88,8 +88,8 @@ function df.validate(self, value)
return value return value
end end
-- run_dir -- ################################################################# -- ddns_rundir -- #############################################################
local rd = ns:option(Value, "run_dir") local rd = ns:option(Value, "ddns_rundir")
rd.title = translate("Status directory") rd.title = translate("Status directory")
rd.description = translate("Directory contains PID and other status information for each running section") rd.description = translate("Directory contains PID and other status information for each running section")
rd.rmempty = true rd.rmempty = true
@ -101,8 +101,8 @@ function rd.validate(self, value)
return value return value
end end
-- log_dir -- ################################################################# -- ddns_logdir -- #############################################################
local ld = ns:option(Value, "log_dir") local ld = ns:option(Value, "ddns_logdir")
ld.title = translate("Log directory") ld.title = translate("Log directory")
ld.description = translate("Directory contains Log files for each running section") ld.description = translate("Directory contains Log files for each running section")
ld.rmempty = true ld.rmempty = true
@ -114,8 +114,8 @@ function ld.validate(self, value)
return value return value
end end
-- log_lines -- ############################################################### -- ddns_loglines -- ###########################################################
local ll = ns:option(Value, "log_lines") local ll = ns:option(Value, "ddns_loglines")
ll.title = translate("Log length") ll.title = translate("Log length")
ll.description = translate("Number of last lines stored in log files") ll.description = translate("Number of last lines stored in log files")
ll.rmempty = true ll.rmempty = true

View file

@ -1,4 +1,4 @@
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local CTRL = require "luci.controller.ddns" -- this application's controller local CTRL = require "luci.controller.ddns" -- this application's controller

View file

@ -1,4 +1,4 @@
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local NXFS = require "nixio.fs" local NXFS = require "nixio.fs"
@ -45,10 +45,13 @@ m.description = translate("Dynamic DNS allows that your router can be reached wi
m.on_after_commit = function(self) m.on_after_commit = function(self)
if self.changed then -- changes ? if self.changed then -- changes ?
local command = CTRL.luci_helper
if SYS.init.enabled("ddns") then -- ddns service enabled, restart all if SYS.init.enabled("ddns") then -- ddns service enabled, restart all
os.execute("/etc/init.d/ddns restart") command = command .. " -- restart"
os.execute(command)
else -- ddns service disabled, send SIGHUP to running else -- ddns service disabled, send SIGHUP to running
os.execute("killall -1 dynamic_dns_updater.sh") command = command .. " -- reload"
os.execute(command)
end end
end end
end end
@ -123,31 +126,34 @@ function ts.create(self, name)
HTTP.redirect( self.extedit:format(name) ) HTTP.redirect( self.extedit:format(name) )
end end
-- Domain and registered IP -- ################################################# -- Lookup_Host and registered IP -- #################################################
dom = ts:option(DummyValue, "_domainIP", dom = ts:option(DummyValue, "_lookupIP",
translate("Hostname/Domain") .. "<br />" .. translate("Registered IP") ) translate("Lookup Hostname") .. "<br />" .. translate("Registered IP") )
dom.template = "ddns/overview_doubleline" dom.template = "ddns/overview_doubleline"
function dom.set_one(self, section) function dom.set_one(self, section)
local domain = self.map:get(section, "domain") or "" local lookup = self.map:get(section, "lookup_host") or ""
if domain ~= "" then if lookup ~= "" then
return domain return lookup
else else
return [[<em>]] .. translate("config error") .. [[</em>]] return [[<em>]] .. translate("config error") .. [[</em>]]
end end
end end
function dom.set_two(self, section) function dom.set_two(self, section)
local domain = self.map:get(section, "domain") or "" local lookup_host = self.map:get(section, "lookup_host") or ""
if domain == "" then return "" end if lookup_host == "" then return "" end
local dnsserver = self.map:get(section, "dnsserver") or "" local dnsserver = self.map:get(section, "dnsserver") or ""
local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0) local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0)
local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0) local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0)
local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0) local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0)
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]] local is_glue = tonumber(self.map:get(section, "is_glue") or 0)
if not NXFS.access(command, "rwx", "rx", "rx") then local command = CTRL.luci_helper .. [[ -]]
NXFS.chmod(command, 755) if (use_ipv6 == 1) then command = command .. [[6]] end
end if (force_ipversion == 1) then command = command .. [[f]] end
command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 .. if (force_dnstcp == 1) then command = command .. [[t]] end
[[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver if (is_glue == 1) then command = command .. [[g]] end
command = command .. [[l ]] .. lookup_host
if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end
command = command .. [[ -- get_registered_ip]]
local ip = SYS.exec(command) local ip = SYS.exec(command)
if ip == "" then ip = translate("no data") end if ip == "" then ip = translate("no data") end
return ip return ip

View file

@ -1,4 +1,4 @@
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
module("luci.tools.ddns", package.seeall) module("luci.tools.ddns", package.seeall)
@ -35,17 +35,21 @@ end
-- check if Wget with SSL support or cURL installed -- check if Wget with SSL support or cURL installed
function check_ssl() function check_ssl()
if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then if NXFS.access("/usr/bin/wget-ssl") then
return true return true
elseif NXFS.access("/usr/bin/curl") then
return true
elseif NXFS.access("/usr/bin/uclient-fetch") then
return NXFS.access("/lib/libustream-ssl.so")
else else
return NXFS.access("/usr/bin/curl") return false
end end
end end
-- check if Wget with SSL or cURL with proxy support installed -- check if Wget with SSL or cURL with proxy support installed
function check_proxy() function check_proxy()
-- we prefere GNU Wget for communication -- we prefere GNU Wget for communication
if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then if NXFS.access("/usr/bin/wget-ssl") then
return true return true
-- if not installed cURL must support proxy -- if not installed cURL must support proxy
@ -54,13 +58,13 @@ function check_proxy()
-- only BusyBox Wget is installed -- only BusyBox Wget is installed
else else
return NXFS.access("/usr/bin/wget") return NXFS.access("/usr/bin/wget") or NXFS.access("/usr/bin/uclient-fetch")
end end
end end
-- check if BIND host installed -- check if BIND host installed
function check_bind_host() function check_bind_host()
return NXFS.access("/usr/bin/host") return NXFS.access("/usr/bin/host") or NXFS.access("/usr/bin/khost")
end end
-- convert epoch date to given format -- convert epoch date to given format
@ -98,8 +102,7 @@ end
-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>" -- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
function ipkg_ver_compare(ver1, comp, ver2) function ipkg_ver_compare(ver1, comp, ver2)
if not ver1 or not (#ver1 > 0) if not ver1 or not ver2
or not ver2 or not (#ver2 > 0)
or not comp or not (#comp > 0) then return nil end or not comp or not (#comp > 0) then return nil end
-- correct compare string -- correct compare string
if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
@ -116,33 +119,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
local s1 = av1[i] or "" local s1 = av1[i] or ""
local s2 = av2[i] or "" local s2 = av2[i] or ""
local n1 = tonumber(s1)
local n2 = tonumber(s2)
-- one numeric and other empty string then set other to 0 -- first "not equal" found return true
if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end if comp == "~=" and (s1 ~= s2) then return true end
if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end -- first "lower" found return true
if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
local nc = (n1 and n2) -- numeric compare -- first "greater" found return true
if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
if nc then -- not equal then return false
-- first "not equal" found return true if (s1 ~= s2) then return false end
if comp == "~=" and (n1 ~= n2) then return true end
-- first "lower" found return true
if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
-- first "greater" found return true
if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
-- not equal then return false
if (n1 ~= n2) then return false end
else
if comp == "~=" and (s1 ~= s2) then return true end
if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
if (s1 ~= s2) then return false end
end
end end
-- all equal then true
return true -- all equal and not compare greater or lower then true
return not (comp == "<" or comp == ">")
end end
-- read version information for given package if installed -- read version information for given package if installed

View file

@ -19,7 +19,7 @@
var section = data[i].section // Section to handle var section = data[i].section // Section to handle
var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled
var btn = document.getElementById("cbid.ddns." + section + "._startstop"); // Start/Stop button var btn = document.getElementById("cbid.ddns." + section + "._startstop"); // Start/Stop button
var rip = document.getElementById("cbid.ddns." + section + "._domainIP.two"); // Registered IP var rip = document.getElementById("cbid.ddns." + section + "._lookupIP.two"); // Registered IP
var lup = document.getElementById("cbid.ddns." + section + "._update.one"); // Last Update var lup = document.getElementById("cbid.ddns." + section + "._update.one"); // Last Update
var nup = document.getElementById("cbid.ddns." + section + "._update.two"); // Next Update var nup = document.getElementById("cbid.ddns." + section + "._update.two"); // Next Update
if ( !(cbx && btn && rip && lup && nup) ) { return; } // security check if ( !(cbx && btn && rip && lup && nup) ) { return; } // security check
@ -81,7 +81,7 @@
// registered IP // registered IP
// rip.innerHTML = "Registered IP"; // rip.innerHTML = "Registered IP";
if (data[i].domain == "_nodomain_") if (data[i].lookup == "_nolookup_")
rip.innerHTML = ''; rip.innerHTML = '';
else if (data[i].reg_ip == "_nodata_") else if (data[i].reg_ip == "_nodata_")
rip.innerHTML = '<em><%:No data%></em>'; rip.innerHTML = '<em><%:No data%></em>';

View file

@ -73,11 +73,11 @@
if (data[j].domain == "_nodomain_") if (data[j].domain == "_nodomain_")
tr.insertCell(-1).innerHTML = '<em><%:config error%></em>'; tr.insertCell(-1).innerHTML = '<em><%:config error%></em>';
else else
tr.insertCell(-1).innerHTML = data[j].domain; tr.insertCell(-1).innerHTML = data[j].lookup;
// registered IP // registered IP
switch (data[j].reg_ip) { switch (data[j].reg_ip) {
case "_nodomain_": case "_nolookup_":
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>'; tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
break; break;
case "_nodata_": case "_nodata_":

View file

@ -251,6 +251,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -333,6 +336,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -462,6 +468,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -581,6 +590,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -249,6 +249,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -331,6 +334,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -460,6 +466,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -579,6 +588,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -1,15 +1,15 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: luci-app-ddns\n" "Project-Id-Version: luci-app-ddns\n"
"POT-Creation-Date: 2015-02-08 18:30+0100\n" "POT-Creation-Date: 2015-05-08 21:29+0100\n"
"PO-Revision-Date: 2015-02-08 18:36+0100\n" "PO-Revision-Date: 2015-05-08 21:47+0100\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n" "Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: de\n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Poedit 1.7.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: .\n" "X-Poedit-Basepath: .\n"
@ -287,6 +287,9 @@ msgstr "Hinweise"
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "Rechnername/Domäne" msgstr "Rechnername/Domäne"
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "IP-Adressquelle" msgstr "IP-Adressquelle"
@ -385,6 +388,9 @@ msgstr "Protokoll in Datei schreiben"
msgid "Log to syslog" msgid "Log to syslog"
msgstr "Systemprotokoll verwenden" msgstr "Systemprotokoll verwenden"
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -452,7 +458,7 @@ msgstr ""
"wiederholen" "wiederholen"
msgid "On Error the script will stop execution after given number of retrys" msgid "On Error the script will stop execution after given number of retrys"
msgstr "Das Skript wird nach der gegebener Anzahlt von Fehlversuchen beendet" msgstr "Das Skript wird nach der gegebenen Anzahl von Fehlversuchen beendet."
msgid "Overview" msgid "Overview"
msgstr "Übersicht" msgstr "Übersicht"
@ -527,6 +533,9 @@ msgstr ""
"Die installierte Software 'ddns-scripts' unterstützt nicht alle verfügbaren " "Die installierte Software 'ddns-scripts' unterstützt nicht alle verfügbaren "
"Optionen." "Optionen."
msgid "The default setting of '0' will retry infinite."
msgstr "Der Standard-Wert von '0' wird es endlosen erneut versuchen."
msgid "There is no service configured." msgid "There is no service configured."
msgstr "Kein Dienst konfiguriert" msgstr "Kein Dienst konfiguriert"
@ -661,6 +670,9 @@ msgstr "installiert"
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "ungültig - Beispiel" msgstr "ungültig - Beispiel"
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "Minimum Wert '0'" msgstr "Minimum Wert '0'"

View file

@ -248,6 +248,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -330,6 +333,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -459,6 +465,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -578,6 +587,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -246,6 +246,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -328,6 +331,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -457,6 +463,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -576,6 +585,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -250,6 +250,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -332,6 +335,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -461,6 +467,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -580,6 +589,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -249,6 +249,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -331,6 +334,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -460,6 +466,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -579,6 +588,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -245,6 +245,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -327,6 +330,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -456,6 +462,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -575,6 +584,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -238,6 +238,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -320,6 +323,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -449,6 +455,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -568,6 +577,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -248,6 +248,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -330,6 +333,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -459,6 +465,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -578,6 +587,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -249,6 +249,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -331,6 +334,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -460,6 +466,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -579,6 +588,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -250,6 +250,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -332,6 +335,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -461,6 +467,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -580,6 +589,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -240,6 +240,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -322,6 +325,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -451,6 +457,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -570,6 +579,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -241,6 +241,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -323,6 +326,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -452,6 +458,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -571,6 +580,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -233,6 +233,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -315,6 +318,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -444,6 +450,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -563,6 +572,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -247,6 +247,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -329,6 +332,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -458,6 +464,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -577,6 +586,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -250,6 +250,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -332,6 +335,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -461,6 +467,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -580,6 +589,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -250,6 +250,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -332,6 +335,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -461,6 +467,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -580,6 +589,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -12,6 +12,9 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.7.5\n" "X-Generator: Poedit 1.7.5\n"
msgid "&"
msgstr ""
msgid "-- custom --" msgid "-- custom --"
msgstr "-- 自定义 --" msgstr "-- 自定义 --"
@ -30,10 +33,13 @@ msgstr "正在应用更改"
msgid "Basic Settings" msgid "Basic Settings"
msgstr "基础设置" msgstr "基础设置"
msgid "Below a list of configuration tips for your system to run Dynamic DNS updates without limitations" msgid ""
"Below a list of configuration tips for your system to run Dynamic DNS "
"updates without limitations"
msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士." msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士."
msgid "Below is a list of configured DDNS configurations and their current state." msgid ""
"Below is a list of configured DDNS configurations and their current state."
msgstr "一下是当前已经配置好的DDNS设置项列表以及它们的当前状态." msgstr "一下是当前已经配置好的DDNS设置项列表以及它们的当前状态."
msgid "Bind Network" msgid "Bind Network"
@ -42,10 +48,14 @@ msgstr "使用的接口"
msgid "Binding to a specific network not supported" msgid "Binding to a specific network not supported"
msgstr "不支持绑定到一个指定的网络" msgstr "不支持绑定到一个指定的网络"
msgid "BusyBox's nslookup and Wget do not support to specify the IP version to use for communication with DDNS Provider." msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider."
msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本." msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本."
msgid "BusyBox's nslookup does not support to specify to use TCP instead of default UDP when requesting DNS server" msgid ""
"BusyBox's nslookup does not support to specify to use TCP instead of default "
"UDP when requesting DNS server"
msgstr "BusyBox的nslookup不支持使用TCP协议代替UDP协议请求DNS记录" msgstr "BusyBox的nslookup不支持使用TCP协议代替UDP协议请求DNS记录"
msgid "Casual users should not change this setting" msgid "Casual users should not change this setting"
@ -63,7 +73,9 @@ msgstr "配置错误"
msgid "Configuration" msgid "Configuration"
msgstr "设置" msgstr "设置"
msgid "Configure here the details for all Dynamic DNS services including this LuCI application." msgid ""
"Configure here the details for all Dynamic DNS services including this LuCI "
"application."
msgstr "在这里修改动态DNS服务的详细配置" msgstr "在这里修改动态DNS服务的详细配置"
msgid "Configure here the details for selected Dynamic DNS service." msgid "Configure here the details for selected Dynamic DNS service."
@ -72,11 +84,20 @@ msgstr "在这里修改选择的DDNS服务的详细配置"
msgid "Current setting" msgid "Current setting"
msgstr "当前设置" msgstr "当前设置"
msgid "Currently DDNS updates are not started at boot or on interface events.<br />This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')" msgid ""
msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话(例如使用cron时把force_interval设置为0),这是默认设置." "Currently DDNS updates are not started at boot or on interface events.<br /"
">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
"force_interval set to '0')"
msgstr ""
"现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话"
"(例如使用cron时把force_interval设置为0),这是默认设置."
msgid "Currently DDNS updates are not started at boot or on interface events.<br />You can start/stop each configuration here. It will run until next reboot." msgid ""
msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个设置的条目.它在下次重启之前一直有效." "Currently DDNS updates are not started at boot or on interface events.<br /"
">You can start/stop each configuration here. It will run until next reboot."
msgstr ""
"现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个"
"设置的条目.它在下次重启之前一直有效."
msgid "Custom update script to be used for updating your DDNS Provider." msgid "Custom update script to be used for updating your DDNS Provider."
msgstr "用来更新动态DNS的自定义脚本" msgstr "用来更新动态DNS的自定义脚本"
@ -117,10 +138,14 @@ msgstr "设定用来读取系统IPv4地址的网络"
msgid "Defines the network to read systems IPv6-Address from" msgid "Defines the network to read systems IPv6-Address from"
msgstr "设定用来读取系统IPv6地址的网络" msgstr "设定用来读取系统IPv6地址的网络"
msgid "Defines the source to read systems IPv4-Address from, that will be send to the DDNS provider" msgid ""
"Defines the source to read systems IPv4-Address from, that will be send to "
"the DDNS provider"
msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商" msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商"
msgid "Defines the source to read systems IPv6-Address from, that will be send to the DDNS provider" msgid ""
"Defines the source to read systems IPv6-Address from, that will be send to "
"the DDNS provider"
msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商" msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商"
msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
@ -132,7 +157,8 @@ msgstr "详情:"
msgid "Directory contains Log files for each running section" msgid "Directory contains Log files for each running section"
msgstr "保存每一个运行中的设置的运行日志的目录" msgstr "保存每一个运行中的设置的运行日志的目录"
msgid "Directory contains PID and other status information for each running section" msgid ""
"Directory contains PID and other status information for each running section"
msgstr "保存每个运行中的设置的PID以及其它状态信息的目录" msgstr "保存每个运行中的设置的PID以及其它状态信息的目录"
msgid "Disabled" msgid "Disabled"
@ -141,7 +167,9 @@ msgstr "已禁用"
msgid "Dynamic DNS" msgid "Dynamic DNS"
msgstr "动态DNS" msgstr "动态DNS"
msgid "Dynamic DNS allows that your router can be reached with a fixed hostname while having a dynamically changing IP address." msgid ""
"Dynamic DNS allows that your router can be reached with a fixed hostname "
"while having a dynamically changing IP address."
msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名." msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名."
msgid "Enable secure communication with DDNS provider" msgid "Enable secure communication with DDNS provider"
@ -171,8 +199,12 @@ msgstr "文件未找到"
msgid "File not found or empty" msgid "File not found or empty"
msgstr "文件未找到或为空" msgstr "文件未找到或为空"
msgid "Follow this link<br />You will find more hints to optimize your system to run DDNS scripts with all options" msgid ""
msgstr "打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS脚本的提示." "Follow this link<br />You will find more hints to optimize your system to "
"run DDNS scripts with all options"
msgstr ""
"打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS"
"脚本的提示."
msgid "For detailed information about parameter settings look here." msgid "For detailed information about parameter settings look here."
msgstr "请看这里获得关于参数设置的详细信息" msgstr "请看这里获得关于参数设置的详细信息"
@ -201,7 +233,9 @@ msgstr "格式"
msgid "Format: IP or FQDN" msgid "Format: IP or FQDN"
msgstr "格式:IP或者FQDN" msgstr "格式:IP或者FQDN"
msgid "GNU Wget will use the IP of given network, cURL will use the physical interface." msgid ""
"GNU Wget will use the IP of given network, cURL will use the physical "
"interface."
msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口" msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口"
msgid "Global Settings" msgid "Global Settings"
@ -216,6 +250,9 @@ msgstr "提示"
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "主机名/域名" msgstr "主机名/域名"
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "IP地址来源" msgstr "IP地址来源"
@ -228,8 +265,13 @@ msgstr "IPv4地址"
msgid "IPv6 address must be given in square brackets" msgid "IPv6 address must be given in square brackets"
msgstr "IPv6地址必须填写在中括号(\"[ ]\")内" msgstr "IPv6地址必须填写在中括号(\"[ ]\")内"
msgid "IPv6 is currently not (fully) supported by this system<br />Please follow the instructions on OpenWrt's homepage to enable IPv6 support<br />or update your system to the latest OpenWrt Release" msgid ""
msgstr "当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持<br />或者更新你的系统到最新OpenWrt版本" "IPv6 is currently not (fully) supported by this system<br />Please follow "
"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
"your system to the latest OpenWrt Release"
msgstr ""
"当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持"
"<br />或者更新你的系统到最新OpenWrt版本"
msgid "IPv6 not supported" msgid "IPv6 not supported"
msgstr "IPv6不被支持" msgstr "IPv6不被支持"
@ -240,13 +282,21 @@ msgstr "IPv6地址"
msgid "If both cURL and GNU Wget are installed, Wget is used by default." msgid "If both cURL and GNU Wget are installed, Wget is used by default."
msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用." msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用."
msgid "If this service section is disabled it could not be started.<br />Neither from LuCI interface nor from console" msgid ""
msgstr "如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端." "If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgstr ""
"如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端."
msgid "If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" msgid ""
msgstr "如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例如'myddns_ipv4'和'myddns_ipv6')" "If you want to send updates for IPv4 and IPv6 you need to define two "
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
"如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例"
"如'myddns_ipv4'和'myddns_ipv6')"
msgid "In some versions cURL/libcurl in OpenWrt is compiled without proxy support." msgid ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持" msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持"
msgid "Info" msgid "Info"
@ -255,11 +305,18 @@ msgstr "信息"
msgid "Interface" msgid "Interface"
msgstr "接口" msgstr "接口"
msgid "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds are not supported" msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgstr "检查IP是否改变的时间隔<br />不支持低于5分钟(300秒)的数值." msgstr "检查IP是否改变的时间隔<br />不支持低于5分钟(300秒)的数值."
msgid "Interval to force updates send to DDNS Provider<br />Setting this parameter to 0 will force the script to only run once<br />Values lower 'Check Interval' except '0' are not supported" msgid ""
msgstr "强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次<br />不支持低于\"检查时间周期\"的数值(除了0)." "Interval to force updates send to DDNS Provider<br />Setting this parameter "
"to 0 will force the script to only run once<br />Values lower 'Check "
"Interval' except '0' are not supported"
msgstr ""
"强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次"
"<br />不支持低于\"检查时间周期\"的数值(除了0)."
msgid "It is NOT recommended for casual users to change settings on this page." msgid "It is NOT recommended for casual users to change settings on this page."
msgstr "强烈不建议初次使用的用户修改本页设定." msgstr "强烈不建议初次使用的用户修改本页设定."
@ -285,10 +342,17 @@ msgstr "把日志记录到文件"
msgid "Log to syslog" msgid "Log to syslog"
msgstr "把日志记录到系统日志" msgstr "把日志记录到系统日志"
msgid "Neither GNU Wget with SSL nor cURL installed to select a network to use for communication." msgid "Lookup Hostname"
msgstr ""
msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication."
msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信." msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信."
msgid "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS protocol." msgid ""
"Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
"protocol."
msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS" msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS"
msgid "Network" msgid "Network"
@ -405,9 +469,14 @@ msgstr "状态目录"
msgid "Stopped" msgid "Stopped"
msgstr "已停止" msgstr "已停止"
msgid "The currently installed 'ddns-scripts' package did not support all available settings." msgid ""
"The currently installed 'ddns-scripts' package did not support all available "
"settings."
msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项" msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项"
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "没有已经配置好的服务项" msgstr "没有已经配置好的服务项"
@ -429,8 +498,11 @@ msgstr "用于检测的URL"
msgid "Unknown error" msgid "Unknown error"
msgstr "未知错误" msgstr "未知错误"
msgid "Update URL to be used for updating your DDNS Provider.<br />Follow instructions you will find on their WEB page." msgid ""
msgstr "DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL." "Update URL to be used for updating your DDNS Provider.<br />Follow "
"instructions you will find on their WEB page."
msgstr ""
"DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL."
msgid "Update error" msgid "Update error"
msgstr "更新错误" msgstr "更新错误"
@ -462,10 +534,13 @@ msgstr "正在应用更改..."
msgid "Warning" msgid "Warning"
msgstr "等待" msgstr "等待"
msgid "Writes detailed messages to log file. File will be truncated automatically." msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr "向日志中写入详细信息.文件将会被自动减小." msgstr "向日志中写入详细信息.文件将会被自动减小."
msgid "Writes log messages to syslog. Critical Errors will always be written to syslog." msgid ""
"Writes log messages to syslog. Critical Errors will always be written to "
"syslog."
msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志" msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志"
msgid "You should install BIND host package for DNS requests." msgid "You should install BIND host package for DNS requests."
@ -522,6 +597,9 @@ msgstr "已安装"
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "不合法 - 示例" msgstr "不合法 - 示例"
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "最小值0" msgstr "最小值0"

View file

@ -244,6 +244,9 @@ msgstr ""
msgid "Hostname/Domain" msgid "Hostname/Domain"
msgstr "" msgstr ""
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
msgid "IP address source" msgid "IP address source"
msgstr "" msgstr ""
@ -326,6 +329,9 @@ msgstr ""
msgid "Log to syslog" msgid "Log to syslog"
msgstr "" msgstr ""
msgid "Lookup Hostname"
msgstr ""
msgid "" msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for " "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication." "communication."
@ -455,6 +461,9 @@ msgid ""
"settings." "settings."
msgstr "" msgstr ""
msgid "The default setting of '0' will retry infinite."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -574,6 +583,9 @@ msgstr ""
msgid "invalid - Sample" msgid "invalid - Sample"
msgstr "" msgstr ""
msgid "invalid FQDN / required - Sample"
msgstr ""
msgid "minimum value '0'" msgid "minimum value '0'"
msgstr "" msgstr ""

View file

@ -1,21 +1,22 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: diag_core\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2012-08-15 11:44+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: diag_core\n"
"POT-Creation-Date: 2012-08-15 11:44+0300\n"
"PO-Revision-Date: 2018-01-07 19:47+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Configure Diagnostics" msgid "Configure Diagnostics"
msgstr "Настройки диагностики" msgstr "Настройка диагностики"
msgid "Diagnostics" msgid "Diagnostics"
msgstr "Диагностика" msgstr "Диагностика"
@ -23,23 +24,18 @@ msgstr "Диагностика"
msgid "" msgid ""
"The diagnostics available under this menu depend on what modules you have " "The diagnostics available under this menu depend on what modules you have "
"installed on your device." "installed on your device."
msgstr "" msgstr "Доступные виды диагностики зависят от установленных плагинов. "
"Доступные в данном меню виды диагностики зависят от установленных на вашем "
"устройстве модулей. "
msgid "" msgid ""
"The entries in the menu allow you to perform diagnostic tests on your system " "The entries in the menu allow you to perform diagnostic tests on your system "
"to aid in troubleshooting." "to aid in troubleshooting."
msgstr "" msgstr ""
"Записи в меню позволять вам выполнить диагностику системы, чтобы помочь в " "Настройки позволять вам выполнить диагностику системы, чтобы помочь в "
"обнаружении проблем." "обнаружении проблем."
msgid "" msgid ""
"With this menu you can configure network diagnostics, such as network device " "With this menu you can configure network diagnostics, such as network device "
"scans and ping tests." "scans and ping tests."
msgstr "" msgstr ""
"Используя это меню, вы можете настроить диагностику сети, например, " "На этой странице вы можете настроить диагностику сети, например, "
"сканирование сетевых устройств или ping-тест." "сканирование сетевых устройств или ping-тест."
#~ msgid "l_d_diag"
#~ msgstr "l_d_diag"

View file

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Diagnostics Tools (Device Info) LUCI_TITLE:=LuCI Diagnostics Tools (Device Info)
LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN
include ../../luci.mk include ../../luci.mk

View file

@ -60,7 +60,7 @@ s:tab("advanced", translate("Advanced Settings"))
name = s:taboption("general", Value, "name", translate("Name")) name = s:taboption("general", Value, "name", translate("Name"))
name.optional = false name.optional = false
name.forcewrite = true name.forcewrite = true
name.datatype = "uciname" name.datatype = "and(uciname,maxlength(11))"
function name.write(self, section, value) function name.write(self, section, value)
if zone:name() ~= value then if zone:name() ~= value then

View file

@ -1,19 +1,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: firewall\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-03-30 17:00+0200\n"
"PO-Revision-Date: 2013-09-05 16:02+0200\n"
"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: firewall\n"
"POT-Creation-Date: 2013-09-05 16:02+0200\n"
"PO-Revision-Date: 2018-01-21 17:18+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n"
"X-Poedit-SourceCharset: UTF-8\n" "%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "%s in %s" msgid "%s in %s"
msgstr "%s в %s" msgstr "%s в %s"
@ -34,7 +34,7 @@ msgid "(Unnamed SNAT)"
msgstr "(SNAT без имени)" msgstr "(SNAT без имени)"
msgid "-- Please choose --" msgid "-- Please choose --"
msgstr "-- Пожалуйста, выберите --" msgstr "-- Сделайте выбор --"
msgid "-- custom --" msgid "-- custom --"
msgstr "-- пользовательский --" msgstr "-- пользовательский --"
@ -58,13 +58,13 @@ msgid "Add and edit..."
msgstr "Добавить и редактировать..." msgstr "Добавить и редактировать..."
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Расширенные настройки" msgstr "Дополнительные настройки"
msgid "Allow forward from <em>source zones</em>:" msgid "Allow forward from <em>source zones</em>:"
msgstr "Разрешить перенаправление из <em>зон-источников</em>:" msgstr "Разрешить перенаправление из <em>'зон-источников'</em>:"
msgid "Allow forward to <em>destination zones</em>:" msgid "Allow forward to <em>destination zones</em>:"
msgstr "Разрешить перенаправление в <em>зоны назначения</em>:" msgstr "Разрешить перенаправление в <em>'зоны назначения'</em>:"
msgid "Any" msgid "Any"
msgstr "Любой" msgstr "Любой"
@ -81,9 +81,9 @@ msgid ""
"each firewall restart, right after the default ruleset has been loaded." "each firewall restart, right after the default ruleset has been loaded."
msgstr "" msgstr ""
"Пользовательские правила позволяют выполнять произвольные команды iptables, " "Пользовательские правила позволяют выполнять произвольные команды iptables, "
"которые так или иначе не покрываются данным фреймворком межсетевого экрана. " "которые не охвачены рамками межсетевого экрана.<br />Команды выполняются "
"Команды выполняются при каждом перезапуске межсетевого экрана, сразу после " "после каждой перезагрузки межсетевого экрана, сразу после загрузки набора "
"того, как загружен набор правил по умолчанию." "правил по умолчанию."
msgid "Destination IP address" msgid "Destination IP address"
msgstr "IP-адрес назначения" msgstr "IP-адрес назначения"
@ -101,17 +101,16 @@ msgid "Do not rewrite"
msgstr "Не перезаписывать" msgstr "Не перезаписывать"
msgid "Drop invalid packets" msgid "Drop invalid packets"
msgstr "Не пропускать некорректные пакеты" msgstr "Не пропускать<br />некорректные пакеты"
msgid "Enable" msgid "Enable"
msgstr "Включить" msgstr "Включить"
#, fuzzy
msgid "Enable NAT Loopback" msgid "Enable NAT Loopback"
msgstr "Включить NAT Loopback" msgstr "Включить NAT Loopback"
msgid "Enable SYN-flood protection" msgid "Enable SYN-flood protection"
msgstr "Включить защиту от SYN-flood атак" msgstr "Включить защиту<br />от SYN-flood атак"
msgid "Enable logging on this zone" msgid "Enable logging on this zone"
msgstr "Включить журналирование в этой зоне" msgstr "Включить журналирование в этой зоне"
@ -126,7 +125,7 @@ msgid "External zone"
msgstr "Внешняя зона" msgstr "Внешняя зона"
msgid "Extra arguments" msgid "Extra arguments"
msgstr "Дополнительные аргументы" msgstr "Дополнительные<br />аргументы"
msgid "Firewall" msgid "Firewall"
msgstr "Межсетевой экран" msgstr "Межсетевой экран"
@ -150,7 +149,7 @@ msgid "Forward"
msgstr "Перенаправление" msgstr "Перенаправление"
msgid "Forward to" msgid "Forward to"
msgstr "Перенаправлять в" msgstr "Перенаправлять из"
msgid "From %s in %s" msgid "From %s in %s"
msgstr "Из %s в %s" msgstr "Из %s в %s"
@ -162,7 +161,7 @@ msgid "From %s in %s with source %s and %s"
msgstr "Из %s в %s с источниками %s и %s" msgstr "Из %s в %s с источниками %s и %s"
msgid "General Settings" msgid "General Settings"
msgstr "Общие настройки" msgstr "Основные настройки"
msgid "IPv4" msgid "IPv4"
msgstr "IPv4" msgstr "IPv4"
@ -180,7 +179,7 @@ msgid "IPv6 only"
msgstr "Только IPv6" msgstr "Только IPv6"
msgid "Input" msgid "Input"
msgstr "Входящий" msgstr "Входящий трафик"
msgid "Inter-Zone Forwarding" msgid "Inter-Zone Forwarding"
msgstr "Перенаправление между зонами" msgstr "Перенаправление между зонами"
@ -203,12 +202,11 @@ msgstr "Ограничение MSS"
msgid "Masquerading" msgid "Masquerading"
msgstr "Маскарадинг" msgstr "Маскарадинг"
#, fuzzy
msgid "Match" msgid "Match"
msgstr "Выбирать" msgstr "Перенаправлять в"
msgid "Match ICMP type" msgid "Match ICMP type"
msgstr "Соответствовать ICMP типу" msgstr "Соответствовать<br />ICMP типу"
msgid "Match forwarded traffic to the given destination port or port range." msgid "Match forwarded traffic to the given destination port or port range."
msgstr "" msgstr ""
@ -219,8 +217,8 @@ msgid ""
"Match incoming traffic directed at the given destination port or port range " "Match incoming traffic directed at the given destination port or port range "
"on this host" "on this host"
msgstr "" msgstr ""
"Выбирать входящий трафик, направленный на порт или диапазон портов данного " "Порт который будет принимать входящий трафик из источника 'Внутренний "
"хоста" "порт' (см.ниже)."
msgid "" msgid ""
"Match incoming traffic originating from the given source port or port range " "Match incoming traffic originating from the given source port or port range "
@ -248,7 +246,9 @@ msgid "New source NAT"
msgstr "Новый SNAT" msgstr "Новый SNAT"
msgid "Only match incoming traffic directed at the given IP address." msgid "Only match incoming traffic directed at the given IP address."
msgstr "Выбирать только входящий трафик, направленный на указанный IP-адрес." msgstr ""
"IP-адрес который будет принимать входящий трафик из источника 'Внутренний IP-"
"адрес' (см.ниже) ."
msgid "Only match incoming traffic from these MACs." msgid "Only match incoming traffic from these MACs."
msgstr "Выбирать только входящий трафик от этих MAC-адресов." msgstr "Выбирать только входящий трафик от этих MAC-адресов."
@ -271,14 +271,15 @@ msgid "Other..."
msgstr "Другое..." msgstr "Другое..."
msgid "Output" msgid "Output"
msgstr "Исходящий" msgstr "Исходящий трафик"
msgid "Passes additional arguments to iptables. Use with care!" msgid "Passes additional arguments to iptables. Use with care!"
msgstr "" msgstr ""
"Передаёт дополнительные аргументы iptables. Используйте с осторожностью!" "Передаёт дополнительные аргументы таблице iptables. Используйте с "
"осторожностью!"
msgid "Port Forwards" msgid "Port Forwards"
msgstr "Перенаправления портов" msgstr "Перенаправление портов"
msgid "" msgid ""
"Port forwarding allows remote computers on the Internet to connect to a " "Port forwarding allows remote computers on the Internet to connect to a "
@ -292,10 +293,13 @@ msgstr "Протокол"
msgid "" msgid ""
"Redirect matched incoming traffic to the given port on the internal host" "Redirect matched incoming traffic to the given port on the internal host"
msgstr "Перенаправить входящий трафик на указанный порт хоста внутренней сети" msgstr ""
"Перенаправить исходящий трафик с данного порта на 'Внешний порт' (см.выше)."
msgid "Redirect matched incoming traffic to the specified internal host" msgid "Redirect matched incoming traffic to the specified internal host"
msgstr "Перенаправить входящий трафик на указанный хост внутренней сети" msgstr ""
"Перенаправить исходящий трафик с данного IP-адреса на 'Внешний IP-адрес' (см."
"выше)."
msgid "Restrict Masquerading to given destination subnets" msgid "Restrict Masquerading to given destination subnets"
msgstr "Использовать маскарадинг только для указанных подсетей-получателей" msgstr "Использовать маскарадинг только для указанных подсетей-получателей"
@ -304,7 +308,7 @@ msgid "Restrict Masquerading to given source subnets"
msgstr "Использовать маскарадинг только для указанных подсетей-отправителей" msgstr "Использовать маскарадинг только для указанных подсетей-отправителей"
msgid "Restrict to address family" msgid "Restrict to address family"
msgstr "Использовать только семейство протоколов" msgstr "Использовать протокол"
msgid "Rewrite matched traffic to the given address." msgid "Rewrite matched traffic to the given address."
msgstr "Перенаправлять соответствующий трафик к указанному адресу." msgstr "Перенаправлять соответствующий трафик к указанному адресу."
@ -328,27 +332,6 @@ msgstr "IP-адрес SNAT"
msgid "SNAT port" msgid "SNAT port"
msgstr "Порт SNAT" msgstr "Порт SNAT"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# msgid "Traffic Redirection"
# msgstr ""
# msgid ""
# "Traffic redirection allows you to change the destination address of "
# "forwarded packets."
# msgstr ""
# msgid "Overview"
# msgstr ""
# msgid "Name"
# msgstr ""
# msgid "Source zone"
# msgstr ""
# msgid "Source MAC-address"
# msgstr ""
# msgid "Source port"
# msgstr ""
# msgid "Protocol"
# msgstr ""
msgid "Source IP address" msgid "Source IP address"
msgstr "IP-адрес источника" msgstr "IP-адрес источника"
@ -356,7 +339,7 @@ msgid "Source MAC address"
msgstr "MAC-адрес источника" msgstr "MAC-адрес источника"
msgid "Source NAT" msgid "Source NAT"
msgstr "SNAT" msgstr "NAT источника"
msgid "" msgid ""
"Source NAT is a specific form of masquerading which allows fine grained " "Source NAT is a specific form of masquerading which allows fine grained "
@ -375,7 +358,7 @@ msgid "Source port"
msgstr "Порт источника" msgstr "Порт источника"
msgid "Source zone" msgid "Source zone"
msgstr "Зона-источник" msgstr "Зона источника"
msgid "" msgid ""
"The firewall creates zones over your network interfaces to control network " "The firewall creates zones over your network interfaces to control network "
@ -390,28 +373,27 @@ msgid ""
"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does " "rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
"<em>not</em> imply a permission to forward from wan to lan as well." "<em>not</em> imply a permission to forward from wan to lan as well."
msgstr "" msgstr ""
"Данные настройки управляют перенаправлением между этой (%s) и другими " "Данные настройки управляют политиками перенаправления между этой (%s) и "
"зонами. Трафиком <em>зон-получателей</em> является трафик <strong>исходящий " "другими зонами. Трафиком <em>'зон-назначения'</em> является перенаправленный "
"из %q</strong>. Трафиком <em>зон-источников</em> является трафик " "трафик <strong>'исходящий из %q'</strong>. Трафиком <em>'зон-источников'</"
"<strong>направленый в %q</strong>. Перенаправление является " "em> является трафик <strong>'направленый в %q'</strong>. Перенаправление "
"<em>однонаправленным</em>, то есть перанаправление из lan в wan <em>не</em> " "является <em>'однонаправленным'</em>, то есть перенаправление из lan в wan "
"допускает перенаправление трафика из wan в lan." "<em>'не'</em> допускает перенаправление трафика из wan в lan."
msgid "" msgid ""
"This page allows you to change advanced properties of the port forwarding " "This page allows you to change advanced properties of the port forwarding "
"entry. In most cases there is no need to modify those settings." "entry. In most cases there is no need to modify those settings."
msgstr "" msgstr ""
"На этой странице можно изменить расширенные настройки перенаправления " "На этой странице можно изменить расширенные настройки перенаправления портов."
"портов. В большинстве случаев нет необходимости изменять эти параметры." "<br />В большинстве случаев нет необходимости изменять эти параметры."
msgid "" msgid ""
"This page allows you to change advanced properties of the traffic rule " "This page allows you to change advanced properties of the traffic rule "
"entry, such as matched source and destination hosts." "entry, such as matched source and destination hosts."
msgstr "" msgstr ""
"На этой странице можно изменить расширенные настройки правил для трафика. В " "На этой странице можно изменить расширенные настройки правил для трафика."
"большинстве случаев нет необходимости изменять эти параметры." "<br />В большинстве случаев нет необходимости изменять эти параметры."
#, fuzzy
msgid "" msgid ""
"This section defines common properties of %q. The <em>input</em> and " "This section defines common properties of %q. The <em>input</em> and "
"<em>output</em> options set the default policies for traffic entering and " "<em>output</em> options set the default policies for traffic entering and "
@ -419,12 +401,12 @@ msgid ""
"forwarded traffic between different networks within the zone. <em>Covered " "forwarded traffic between different networks within the zone. <em>Covered "
"networks</em> specifies which available networks are members of this zone." "networks</em> specifies which available networks are members of this zone."
msgstr "" msgstr ""
"Данная секция позволяет изменять общие настройки %q. Опции <em>входящий</em> " "Страница содержит общие свойства %q. Режимы <em>'Входящий трафик'</em> и "
"и <em>исходящий</em> устанавливают политику по умолчанию для входящего и " "<em>'Исходящий трафик'</em> устанавливают политики по умолчанию для трафика, "
"исходящего трафика. Опция <em>перенаправление</em> позволяет установить " "поступающего и покидающего эту зону, в то время как режим "
"политику для трафика, который перенаправляется через несколько сетей в зоне. " "<em>'Перенаправление'</em> описывает политику пересылки трафика между "
"Пункт <em>использовать сети</em> позволяет указать, какие сети являются " "различными сетями внутри зоны. <em>'Использовать сети'</em> указывает, какие "
"частью данной зоны." "доступные сети являются членами этой зоны."
msgid "To %s at %s on <var>this device</var>" msgid "To %s at %s on <var>this device</var>"
msgstr "К %s, порту %s на <var>этом устройстве</var>" msgstr "К %s, порту %s на <var>этом устройстве</var>"
@ -453,7 +435,7 @@ msgid ""
"the router." "the router."
msgstr "" msgstr ""
"Правила для трафика определяют политику прохождения пакетов между разными " "Правила для трафика определяют политику прохождения пакетов между разными "
"зонами, например, запрет трафика между некоторыми хостами или открытие WAN-" "зонами, например запрет трафика между некоторыми хостами или открытие WAN-"
"портов маршрутизатора." "портов маршрутизатора."
msgid "Via %s" msgid "Via %s"
@ -466,7 +448,7 @@ msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering " "You may specify multiple by selecting \"-- custom --\" and then entering "
"protocols separated by space." "protocols separated by space."
msgstr "" msgstr ""
"Вы можете указать несколько, выбрав \"-- пользовательский --\" и перечислив " "Вы можете указать несколько, выбрав '-- пользовательский --' и перечислив "
"через пробел названия протоколов." "через пробел названия протоколов."
msgid "Zone %q" msgid "Zone %q"
@ -503,177 +485,4 @@ msgid "reject"
msgstr "отвергать" msgstr "отвергать"
msgid "traffic" msgid "traffic"
msgstr "" msgstr "трафик"
#~ msgid "Destination"
#~ msgstr "Назначение"
#~ msgid "Family"
#~ msgstr "Семейство"
#~ msgid "SNAT"
#~ msgstr "SNAT"
#~ msgid "Source"
#~ msgstr "Источник"
#~ msgid "To %s"
#~ msgstr "к %s"
#~ msgid "To %s at %s"
#~ msgstr "к %s на %s"
#~ msgid "Via"
#~ msgstr "Через"
#~ msgid "Accept forward"
#~ msgstr "Принимать перенаправление"
#~ msgid "Accept input"
#~ msgstr "Принимать входящие"
#~ msgid "Disable"
#~ msgstr "Отключить"
#~ msgid "Discard forward"
#~ msgstr "Отвергать перенаправление"
#~ msgid "Discard input"
#~ msgstr "Выбрасывать входящие пакеты"
#~ msgid "Do not track forward"
#~ msgstr "Не отслеживать перенаправление"
#~ msgid "Do not track input"
#~ msgstr "Не отслеживать входные пакеты"
#~ msgid "IP"
#~ msgstr "IP-адрес"
#~ msgid "IP range"
#~ msgstr "Диапазон IP-адресов"
#~ msgid "IPs"
#~ msgstr "IP-адреса"
#~ msgid "MAC"
#~ msgstr "MAC-адрес"
#~ msgid "MACs"
#~ msgstr "MAC-адреса"
#~ msgid "Refuse forward"
#~ msgstr "Отвергать перенаправление"
#~ msgid "Refuse input"
#~ msgstr "Отвергать входящий трафик"
#~ msgid "Rule is disabled"
#~ msgstr "Правило выключено"
#~ msgid "Rule is enabled"
#~ msgstr "Правило включено"
#~ msgid "day"
#~ msgstr "день"
#~ msgid "hour"
#~ msgstr "час"
#~ msgid "minute"
#~ msgstr "мин"
#~ msgid "not"
#~ msgstr "не"
#~ msgid "port"
#~ msgstr "порт"
#~ msgid "ports"
#~ msgstr "порты"
#~ msgid "second"
#~ msgstr "сек"
#~ msgid "type"
#~ msgstr "тип"
#~ msgid "types"
#~ msgstr "типы"
#~ msgid "(optional)"
#~ msgstr "(необязательно)"
#~ msgid "Intended destination address"
#~ msgstr "Адрес назначения"
#~ msgid "Internal port (optional)"
#~ msgstr "Внутренний порт (необязательно)"
#~ msgid "Advanced Options"
#~ msgstr "Расширенные опции"
#~ msgid "Advanced Rules"
#~ msgstr "Расширенные правила"
#~ msgid ""
#~ "Advanced rules let you customize the firewall to your needs. Only new "
#~ "connections will be matched. Packets belonging to already open "
#~ "connections are automatically allowed to pass the firewall."
#~ msgstr ""
#~ "Расширенные правила позволяют настроить сетевой экран в соответствии с "
#~ "вашими потребностями. Только новые соединения будут обработаны. Пакеты, "
#~ "принадлежащие уже существующим соединениям, будут автоматически пропущены "
#~ "через сетевой экран."
#~ msgid "Custom Rules (/etc/firewall.user)"
#~ msgstr "Пользовательские правила (/etc/firewall.user)"
#~ msgid "Device"
#~ msgstr "Устройство"
#~ msgid ""
#~ "For DNAT, match incoming traffic directed at the given destination ip "
#~ "address. For SNAT rewrite the source address to the given address."
#~ msgstr ""
#~ "Для DNAT соответствующий трафик перенаправляется на введенный адрес "
#~ "назначения. Для SNAT подменяется адрес источника на введенный."
#~ msgid ""
#~ "Match incoming traffic originating from the given source port or port "
#~ "range on the client host"
#~ msgstr ""
#~ "Выбирать исходящий трафик отправленный с порта или диапазона портов "
#~ "внешнего хоста"
#~ msgid "Overview"
#~ msgstr "Назад к обзору"
#~ msgid "Port forwarding"
#~ msgstr "Перенаправление портов"
#~ msgid ""
#~ "Port forwarding allows to provide network services in the internal "
#~ "network to an external network."
#~ msgstr ""
#~ "Перенаправление портов позволяет открыть доступ к внутренним службам из "
#~ "внешней сети."
#~ msgid "Redirection type"
#~ msgstr "Тип перенаправления"
#~ msgid "Redirections"
#~ msgstr "Перенаправления"
#~ msgid "Rules"
#~ msgstr "Правила"
#~ msgid "Traffic Redirection"
#~ msgstr "Перенаправление трафика"
#~ msgid ""
#~ "Traffic redirection allows you to change the destination address of "
#~ "forwarded packets."
#~ msgstr ""
#~ "Перенаправление трафика позволяет изменить адрес получателя для "
#~ "проходящих пакетов."

View file

@ -0,0 +1,17 @@
#
# Copyright (C) 2015 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the GNU General Public License v2.
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=Fwknopd config - web config for the firewall knock daemon
LUCI_DEPENDS:=+fwknopd +qrencode
PKG_VERSION:=1.0
PKG_RELEASE:=1
PKG_LICENSE:=GPLv2
PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz>
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,15 @@
-- Copyright 2015 Jonathan Bennett <jbennett@incomsystems.biz>
-- Licensed to the public under the GNU General Public License v2.
module("luci.controller.fwknopd", package.seeall)
function index()
if not nixio.fs.access("/etc/config/fwknopd") then
return
end
local page
page = entry({"admin", "services", "fwknopd"}, cbi("fwknopd"), _("Firewall Knock Daemon"))
page.dependent = true
end

View file

@ -0,0 +1,54 @@
-- Copyright 2015 Jonathan Bennett <jbennett@incomsystems.biz>
-- Licensed to the public under the GNU General Public License v2.
m = Map("fwknopd", translate("Firewall Knock Operator"))
s = m:section(TypedSection, "global", translate("Enable Uci/Luci control")) -- Set uci control on or off
s.anonymous=true
s:option(Flag, "uci_enabled", translate("Enable config overwrite"), translate("When unchecked, the config files in /etc/fwknopd will be used as is, ignoring any settings here."))
qr = s:option(DummyValue, "note0", "dummy")
qr.template = "fwknopd-qr"
qr:depends("uci_enabled", "1")
s = m:section(TypedSection, "access", translate("access.conf stanzas")) -- set the access.conf settings
s.anonymous=true
s.addremove=true
s.dynamic=true
s:option(Value, "SOURCE", "SOURCE", translate("Use ANY for any source ip"))
k1 = s:option(Value, "KEY", "KEY", translate("Define the symmetric key used for decrypting an incoming SPA packet that is encrypted by the fwknop client with Rijndael."))
k1:depends("keytype", translate("Normal Key"))
k2 = s:option(Value, "KEY_BASE64", "KEY_BASE64", translate("Define the symmetric key used for decrypting an incoming SPA \
packet that is encrypted by the fwknop client with Rijndael."))
k2:depends("keytype", translate("Base 64 key"))
l1 = s:option(ListValue, "keytype", "Key type")
l1:value("Normal Key", "Normal Key")
l1:value("Base 64 key", "Base 64 key")
k3 = s:option(Value, "HMAC_KEY", "HMAC_KEY", "The hmac key")
k3:depends("hkeytype", "Normal Key")
k4 = s:option(Value, "HMAC_KEY_BASE64", "HMAC_KEY_BASE64", translate("The base64 hmac key"))
k4:depends("hkeytype", "Base 64 key")
l2 = s:option(ListValue, "hkeytype", "HMAC Key type")
l2:value("Normal Key", "Normal Key")
l2:value("Base 64 key", "Base 64 key")
s:option(Value, "OPEN_PORTS", "OPEN_PORTS", translate("Define a set of ports and protocols (tcp or udp) that will be opened if a valid knock sequence is seen. \
If this entry is not set, fwknopd will attempt to honor any proto/port request specified in the SPA data \
(unless of it matches any RESTRICT_PORTS entries). Multiple entries are comma-separated."))
s:option(Value, "FW_ACCESS_TIMEOUT", "FW_ACCESS_TIMEOUT", translate("Define the length of time access will be granted by fwknopd through the firewall after a \
valid knock sequence from a source IP address. If FW_ACCESS_TIMEOUT is not set then the default \
timeout of 30 seconds will automatically be set."))
s:option(Value, "REQUIRE_SOURCE_ADDRESS", "REQUIRE_SOURCE_ADDRESS", translate("Force all SPA packets to contain a real IP address within the encrypted data. \
This makes it impossible to use the -s command line argument on the fwknop client command line, so either -R \
has to be used to automatically resolve the external address (if the client behind a NAT) or the client must \
know the external IP and set it via the -a argument."))
s:option(DummyValue, "note1", translate("Enter custom access.conf variables below:"))
s = m:section(TypedSection, "config", translate("fwknopd.conf config options"))
s.anonymous=true
s.dynamic=true
s:option(Value, "MAX_SPA_PACKET_AGE", "MAX_SPA_PACKET_AGE", translate("Maximum age in seconds that an SPA packet will be accepted. defaults to 120 seconds"))
s:option(Value, "PCAP_INTF", "PCAP_INTF", translate("Specify the ethernet interface on which fwknopd will sniff packets."))
s:option(Value, "ENABLE_IPT_FORWARDING", "ENABLE_IPT_FORWARDING", translate("Allow SPA clients to request access to services through an iptables firewall instead of just to it."))
s:option(DummyValue, "note2", translate("Enter custom fwknopd.conf variables below:"))
return m

View file

@ -0,0 +1 @@
<% print(luci.sys.exec("sh /usr/sbin/gen-qr.sh")) %>

View file

@ -0,0 +1,113 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2015-05-12 21:03-0500\n"
"Last-Translator: Jonathan Bennett <JBennett@incomsystems.biz>\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"
msgid ""
"Allow SPA clients to request access to services through an iptables firewall "
"instead of just to it."
msgstr ""
"Allow SPA clients to request access to services through an iptables firewall "
"instead of just to it."
msgid "Base 64 key"
msgstr "Base 64 key"
msgid ""
"Define a set of ports and protocols (tcp or udp) that will be opened if a "
"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
"to honor any proto/port request specified in the SPA data (unless of it "
"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
msgstr ""
"Define a set of ports and protocols (tcp or udp) that will be opened if a "
"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
"to honor any proto/port request specified in the SPA data (unless of it "
"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
msgid ""
"Define the length of time access will be granted by fwknopd through the "
"firewall after a valid knock sequence from a source IP address. If "
"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
"automatically be set."
msgstr ""
"Define the length of time access will be granted by fwknopd through the "
"firewall after a valid knock sequence from a source IP address. If "
"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
"automatically be set."
msgid ""
"Define the symmetric key used for decrypting an incoming SPA packet that is "
"encrypted by the fwknop client with Rijndael."
msgstr ""
"Define the symmetric key used for decrypting an incoming SPA packet that is "
"encrypted by the fwknop client with Rijndael."
msgid "Enable Uci/Luci control"
msgstr "Enable Uci/Luci control"
msgid "Enable config overwrite"
msgstr "Enable config overwrite"
msgid "Enter custom access.conf variables below:"
msgstr "Enter custom access.conf variables below:"
msgid "Enter custom fwknopd.conf variables below:"
msgstr "Enter custom fwknopd.conf variables below:"
msgid "Firewall Knock Daemon"
msgstr "Firewall Knock Daemon"
msgid "Firewall Knock Operator"
msgstr "Firewall Knock Operator"
msgid ""
"Force all SPA packets to contain a real IP address within the encrypted "
"data. This makes it impossible to use the -s command line argument on the "
"fwknop client command line, so either -R has to be used to automatically "
"resolve the external address (if the client behind a NAT) or the client must "
"know the external IP and set it via the -a argument."
msgstr ""
"Force all SPA packets to contain a real IP address within the encrypted "
"data. This makes it impossible to use the -s command line argument on the "
"fwknop client command line, so either -R has to be used to automatically "
"resolve the external address (if the client behind a NAT) or the client must "
"know the external IP and set it via the -a argument."
msgid ""
"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
"seconds"
msgstr ""
"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
"seconds"
msgid "Normal Key"
msgstr "Normal Key"
msgid "Specify the ethernet interface on which fwknopd will sniff packets."
msgstr "Specify the ethernet interface on which fwknopd will sniff packets."
msgid "The base64 hmac key"
msgstr "The base64 hmac key"
msgid "Use ANY for any source ip"
msgstr "Use ANY for any source ip"
msgid ""
"When unchecked, the config files in /etc/fwknopd will be used as is, "
"ignoring any settings here."
msgstr ""
"When unchecked, the config files in /etc/fwknopd will be used as is, "
"ignoring any settings here."
msgid "access.conf stanzas"
msgstr "access.conf stanzas"
msgid "fwknopd.conf config options"
msgstr "fwknopd.conf config options"

View file

@ -0,0 +1,125 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: fwknopd\n"
"POT-Creation-Date: 2017-12-01 12:15+0300\n"
"PO-Revision-Date: 2018-01-13 14:53+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7.1\n"
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid ""
"Allow SPA clients to request access to services through an iptables firewall "
"instead of just to it."
msgstr ""
"Разрешить SPA клиентам запрашивать доступ к сервисам через iptables "
"межсетевого экрана, а не напрямую."
msgid "Base 64 key"
msgstr "64-битный ключ"
msgid ""
"Define a set of ports and protocols (tcp or udp) that will be opened if a "
"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
"to honor any proto/port request specified in the SPA data (unless of it "
"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
msgstr ""
"Задайте порты и протоколы (TCP или UDP), которые будут открыты, если задана "
"допустимая последовательность защищенного постукивания. Если порты и "
"протоколы не заданы, fwknopd постарается исполнить любой прото/порт запрос, "
"указанный в SPA данных (если он соответствует любой 'RESTRICT_PORTS' "
"записи). Последовательность данных, разделенных запятыми."
msgid ""
"Define the length of time access will be granted by fwknopd through the "
"firewall after a valid knock sequence from a source IP address. If "
"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
"automatically be set."
msgstr ""
"Задайте промежуток времени, в течение которого демоном fwknopd будет "
"предоставлен доступ через межсетевой экран, после допустимой "
"последовательности защищенного постукивания из исходящего IP-адреса. Если "
"параметр 'FW_ACCESS_TIMEOUT' не установлен, то автоматически устанавливается "
"время ожидания по умолчанию 30 секунд."
msgid ""
"Define the symmetric key used for decrypting an incoming SPA packet that is "
"encrypted by the fwknop client with Rijndael."
msgstr ""
"Задайте симметричный ключ, используемый для расшифровки входящего SPA пакета "
"зашифрованного fwknop клиентом с помощью Rijndael."
msgid "Enable Uci/Luci control"
msgstr "Включить управление в Uci/LuCI"
msgid "Enable config overwrite"
msgstr "Настроить config файл"
msgid "Enter custom access.conf variables below:"
msgstr ""
msgid "Enter custom fwknopd.conf variables below:"
msgstr ""
msgid "Firewall Knock Daemon"
msgstr "Firewall Knock Daemon"
msgid "Firewall Knock Operator"
msgstr "Настройка защищенного постукивания межсетевого экрана"
msgid ""
"Force all SPA packets to contain a real IP address within the encrypted "
"data. This makes it impossible to use the -s command line argument on the "
"fwknop client command line, so either -R has to be used to automatically "
"resolve the external address (if the client behind a NAT) or the client must "
"know the external IP and set it via the -a argument."
msgstr ""
"Обязать все SPA пакеты содержать реальный IP-адрес в зашифрованных данных. "
"Это делает невозможным использование аргумента командной строки '-s' в "
"командной строке fwknop клиента, поэтому либо аргумент '-R' должен "
"использоваться для автоматического разрешения внешнего адреса (если клиент "
"за NAT), либо клиент должен знать внешний IP и установить его используя "
"аргумент '-a'."
msgid ""
"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
"seconds"
msgstr ""
"Максимальное время в секундах, в течение которых будет принят SPA пакет, по "
"умолчанию 120 секунд."
msgid "Normal Key"
msgstr "Нормальный ключ"
msgid "Specify the ethernet interface on which fwknopd will sniff packets."
msgstr "Укажите ethernet интерфейс, пакеты которого fwknopd будет снифить."
msgid "The base64 hmac key"
msgstr "Ключ Base64 HMAC."
msgid "Use ANY for any source ip"
msgstr "Использовать ЛЮБОЙ, для любого исходящего IP."
msgid ""
"When unchecked, the config files in /etc/fwknopd will be used as is, "
"ignoring any settings here."
msgstr ""
"Если не отмечено, будет использоваться дефолтный config файл fwknopd (/etc/"
"fwknopd), игнорируя любые изменения настроек fwknopd здесь. "
msgid "access.conf stanzas"
msgstr "Строки config файла access.conf"
msgid "fwknopd.conf config options"
msgstr "Настройка config файла - fwknopd.conf"
#~ msgid "Allow SPA clients to request forwarding destination by DNS name."
#~ msgstr ""
#~ "Разрешить SPA клиентам запрашивать направление переадресации по DNS-имени."

View file

@ -0,0 +1,83 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid ""
"Allow SPA clients to request access to services through an iptables firewall "
"instead of just to it."
msgstr ""
msgid "Base 64 key"
msgstr ""
msgid ""
"Define a set of ports and protocols (tcp or udp) that will be opened if a "
"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
"to honor any proto/port request specified in the SPA data (unless of it "
"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
msgstr ""
msgid ""
"Define the length of time access will be granted by fwknopd through the "
"firewall after a valid knock sequence from a source IP address. If "
"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
"automatically be set."
msgstr ""
msgid ""
"Define the symmetric key used for decrypting an incoming SPA packet that is "
"encrypted by the fwknop client with Rijndael."
msgstr ""
msgid "Enable Uci/Luci control"
msgstr ""
msgid "Enable config overwrite"
msgstr ""
msgid "Enter custom access.conf variables below:"
msgstr ""
msgid "Enter custom fwknopd.conf variables below:"
msgstr ""
msgid "Firewall Knock Daemon"
msgstr ""
msgid "Firewall Knock Operator"
msgstr ""
msgid ""
"Force all SPA packets to contain a real IP address within the encrypted "
"data. This makes it impossible to use the -s command line argument on the "
"fwknop client command line, so either -R has to be used to automatically "
"resolve the external address (if the client behind a NAT) or the client must "
"know the external IP and set it via the -a argument."
msgstr ""
msgid ""
"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
"seconds"
msgstr ""
msgid "Normal Key"
msgstr ""
msgid "Specify the ethernet interface on which fwknopd will sniff packets."
msgstr ""
msgid "The base64 hmac key"
msgstr ""
msgid "Use ANY for any source ip"
msgstr ""
msgid ""
"When unchecked, the config files in /etc/fwknopd will be used as is, "
"ignoring any settings here."
msgstr ""
msgid "access.conf stanzas"
msgstr ""
msgid "fwknopd.conf config options"
msgstr ""

View file

@ -0,0 +1,22 @@
#!/bin/sh
#-- Copyright 2015 Jonathan Bennett <jbennett@incomsystems.biz>
#-- Licensed to the public under the GNU General Public License v2.
. /lib/functions/network.sh
uci batch <<EOF
add ucitrack fwknopd
set ucitrack.@fwknopd[-1].init=fwknopd
commit ucitrack
EOF
uci delete fwknopd.@access[0].KEY
uci delete fwknopd.@access[0].HMAC_KEY
uci set fwknopd.@access[0].keytype='Base 64 key'
uci set fwknopd.@access[0].hkeytype='Base 64 key'
uci set fwknopd.@access[0].KEY_BASE64=`fwknopd --key-gen | awk '/^KEY/ {print $2;}'`
uci set fwknopd.@access[0].HMAC_KEY_BASE64=`fwknopd --key-gen | awk '/^HMAC/ {print $2;}'`
uci set fwknopd.@config[0].ENABLE_IPT_FORWARDING='y'
uci commit fwknopd
rm -f /tmp/luci-indexcache
exit 0

View file

@ -0,0 +1,22 @@
#!/bin/sh
key_base64=$(uci get fwknopd.@access[0].KEY_BASE64)
key=$(uci get fwknopd.@access[0].KEY)
hmac_key_base64=$(uci get fwknopd.@access[0].HMAC_KEY_BASE64)
hmac_key=$(uci get fwknopd.@access[0].HMAC_KEY)
if [ $key_base64 != "" ]; then
qr="KEY_BASE64:$key_base64"
fi
if [ $key != "" ]; then
qr="$qr KEY:$key"
fi
if [ $hmac_key_base64 != "" ]; then
qr="$qr HMAC_KEY_BASE64:$hmac_key_base64"
fi
if [ $hmac_key != "" ]; then
qr="$qr HMAC_KEY:$hmac_key"
fi
qrencode -o - "$qr"

View file

@ -1,19 +1,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: hd_idle\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-14 10:33+0200\n"
"PO-Revision-Date: 2012-08-15 11:24+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: hd_idle\n"
"POT-Creation-Date: 2012-08-15 11:24+0300\n"
"PO-Revision-Date: 2018-01-07 19:56+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 "
"X-Poedit-SourceCharset: UTF-8\n" "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Disk" msgid "Disk"
msgstr "Диск" msgstr "Диск"
@ -22,31 +22,40 @@ msgid "Enable"
msgstr "Включить" msgstr "Включить"
msgid "Idle-time" msgid "Idle-time"
msgstr "Время бездействия" msgstr ""
msgid "Idle-time unit" msgid "Idle-time unit"
msgstr "Единицы времени бездействия" msgstr ""
msgid "Settings" msgid "Settings"
msgstr "Настройки" msgstr "Настройка"
# Hours
msgid "h" msgid "h"
msgstr "ч" msgstr "ч"
msgid "hd-idle" msgid "hd-idle"
msgstr "hd-idle" msgstr ""
msgid "" msgid ""
"hd-idle is a utility program for spinning-down external disks after a period " "hd-idle is a utility program for spinning-down external disks after a period "
"of idle time." "of idle time."
msgstr "" msgstr ""
"Утилита hd-idle позволяет замедлять внешние диски после определённого "
"времени бездействия."
# Minutes (not minimum)
msgid "min" msgid "min"
msgstr "мин" msgstr "мин"
#~ msgid "Enable debug" #~ msgid "HDD Idle"
#~ msgstr "Включить отладку" #~ msgstr "HDD Idle"
#~ msgid ""
#~ "HDD Idle is a utility program for spinning-down external disks after a "
#~ "period of idle time."
#~ msgstr ""
#~ "Утилита HDD Idle позволяет замедлять внешние диски после определённого "
#~ "времени бездействия."
#~ msgid "Idle time"
#~ msgstr "Время бездействия"
#~ msgid "Idle time unit"
#~ msgstr "Единицы времени бездействия"

View file

@ -1,63 +1,64 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: minidlna\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2013-11-13 18:43+0200\n"
"Last-Translator: Роман <x.wserfer@gmail.com>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: minidlna\n"
"POT-Creation-Date: 2013-11-13 18:43+0200\n"
"PO-Revision-Date: 2018-01-20 13:27+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Расширенные настройки" msgstr "Дополнительные настройки"
msgid "Album art names:" msgid "Album art names:"
msgstr "Имена обложек альбома:" msgstr "Имена обложек альбома"
msgid "Announced model number:" msgid "Announced model number:"
msgstr "Номер модели:" msgstr "Объявить номер модели"
msgid "Announced serial number:" msgid "Announced serial number:"
msgstr "Серийный номер:" msgstr "Объявить серийный номер"
msgid "Browse directory" msgid "Browse directory"
msgstr "Обзор директории" msgstr "Обзор папок"
msgid "Collecting data..." msgid "Collecting data..."
msgstr "Сбор данных..." msgstr "Сбор данных..."
msgid "Database directory:" msgid "Database directory:"
msgstr "Папка базы данных:" msgstr "Папка базы данных"
msgid "Enable TIVO:" msgid "Enable TIVO:"
msgstr "Включить TIVO:" msgstr "Включить TiVo"
msgid "Enable inotify:" msgid "Enable inotify:"
msgstr "Включить inotify:" msgstr "Включить inotify"
msgid "Enable:" msgid "Enable:"
msgstr "Включить:" msgstr "Включить"
msgid "Friendly name:" msgid "Friendly name:"
msgstr "Понятное имя:" msgstr "Имя протокола"
msgid "General Settings" msgid "General Settings"
msgstr "Общие настройки" msgstr "Основные настройки"
msgid "Interfaces:" msgid "Interfaces:"
msgstr "Интерфейсы:" msgstr "Интерфейсы"
msgid "Log directory:" msgid "Log directory:"
msgstr "Папка журнала:" msgstr "Папка системного<br />журнала"
msgid "Media directories:" msgid "Media directories:"
msgstr "Папки медиа:" msgstr "Папки медиа"
msgid "" msgid ""
"MiniDLNA is server software with the aim of being fully compliant with DLNA/" "MiniDLNA is server software with the aim of being fully compliant with DLNA/"
@ -69,92 +70,83 @@ msgstr ""
msgid "" msgid ""
"Model number the miniDLNA daemon will report to clients in its XML " "Model number the miniDLNA daemon will report to clients in its XML "
"description." "description."
msgstr "" msgstr "Номер модели miniDLNA будет показан клиентам в своём XML-описании."
"Номер модели который, miniDLNA будет сообщать клиентам в своём XML-описании."
msgid "Music" msgid "Music"
msgstr "Музыка" msgstr "Музыка"
msgid "Network interfaces to serve." msgid "Network interfaces to serve."
msgstr "Обслуживаемые сетевые интерфейсы." msgstr "Использовать сетевые интерфейсы."
msgid "Notify interval in seconds." msgid "Notify interval in seconds."
msgstr "Интервал уведомления (секунды)." msgstr "Интервал уведомления в секундах."
msgid "Notify interval:" msgid "Notify interval:"
msgstr "Интервал уведомления:" msgstr "Интервал уведомления"
msgid "Pictures" msgid "Pictures"
msgstr "Картинки" msgstr "Картинки"
msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic."
msgstr "Порт для HTTP-трафика (описания, SOAP, передача мультимедиа)" msgstr "Задайте порт для HTTP-трафика (описания, SOAP, передача мультимедиа)."
msgid "Port:" msgid "Port:"
msgstr "Порт:" msgstr "Порт"
msgid "Presentation URL:" msgid "Presentation URL:"
msgstr "URL представления:" msgstr "Задать URL-адрес"
msgid "Root container:" msgid "Root container:"
msgstr "Корневой контейнер:" msgstr "Root контейнер"
msgid "" msgid ""
"Serial number the miniDLNA daemon will report to clients in its XML " "Serial number the miniDLNA daemon will report to clients in its XML "
"description." "description."
msgstr "" msgstr "Серийный номер miniDLNA будет показан клиентам в своём XML-описании."
"Серийный номер, который miniDLNA будет сообщать клиентам в своём XML-"
"описании."
msgid "" msgid ""
"Set this if you want to customize the name that shows up on your clients." "Set this if you want to customize the name that shows up on your clients."
msgstr "Изменение имени отображения для клиентов." msgstr "Выберите имя отображения для клиентов."
msgid "" msgid ""
"Set this if you would like to specify the directory where you want MiniDLNA " "Set this if you would like to specify the directory where you want MiniDLNA "
"to store its database and album art cache." "to store its database and album art cache."
msgstr "" msgstr ""
"Папка, в которой miniDLNA будет хранить свою базу данных и кэш обложек " "Выберите папку, в которой miniDLNA будет хранить свою базу данных и кэш "
"альбомов." "обложек альбомов."
msgid "" msgid ""
"Set this if you would like to specify the directory where you want MiniDLNA " "Set this if you would like to specify the directory where you want MiniDLNA "
"to store its log file." "to store its log file."
msgstr "Папка, в которой miniDLNA будет хранить свой файл журнала." msgstr "Выберите папку для хранения файла журнала miniDLNA."
msgid "" msgid ""
"Set this to enable inotify monitoring to automatically discover new files." "Set this to enable inotify monitoring to automatically discover new files."
msgstr "" msgstr "Включите 'inotify' для автоматического обнаружения новых файлов."
"Включение наблюдения inotify для автоматического обнаружения новых файлов."
msgid "" msgid ""
"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " "Set this to enable support for streaming .jpg and .mp3 files to a TiVo "
"supporting HMO." "supporting HMO."
msgstr "" msgstr ""
"Установите для включения поддержки потокового воспроизведения файлов .jpg и ." "Выберите для включения поддержки потокового воспроизведения файлов .jpg и ."
"mp3 для TiVo с поддержкой HMO." "mp3 для 'TiVo' с поддержкой HMO."
msgid "" msgid ""
"Set this to strictly adhere to DLNA standards. This will allow server-side " "Set this to strictly adhere to DLNA standards. This will allow server-side "
"downscaling of very large JPEG images, which may hurt JPEG serving " "downscaling of very large JPEG images, which may hurt JPEG serving "
"performance on (at least) Sony DLNA products." "performance on (at least) Sony DLNA products."
msgstr "" msgstr ""
"Установите для строгого соответствия стандартам DLNA. Это разрешит " "Выберите для строгого следования стандартам DLNA. Это позволит уменьшить "
"уменьшение размера слишком больших JPEG-изображений на стороне сервера, что " "размер слишком больших JPEG-изображений на стороне сервера (например "
"может повредить производительности (по крайней мере) DLNA-продуктов Sony." "технология - Sony DLNA), чтобы помочь уменьшить нагрузку на ваш "
"маршрутизатор."
#, fuzzy
msgid "" msgid ""
"Set this to the directory you want scanned. If you want to restrict the " "Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for " "directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." "(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
msgstr "" msgstr ""
"Директории, которые необходимо сканировать. Если вы хотите установить "
"ограничение на определённый тип содержимого в директории, вы можете написать "
"тип ('A' для аудио, 'V' для видео, 'P' для изображений) перед путём к "
"директории, за которым следует запятая (напр. media_dir=A,/mnt/media/Music). "
"Может быть указано несколько директорий."
msgid "Specify the path to the MiniSSDPd socket." msgid "Specify the path to the MiniSSDPd socket."
msgstr "Укажите путь к сокету MiniSSDPd." msgstr "Укажите путь к сокету MiniSSDPd."
@ -163,20 +155,20 @@ msgid "Standard container"
msgstr "Стандартный контейнер" msgstr "Стандартный контейнер"
msgid "Strict to DLNA standard:" msgid "Strict to DLNA standard:"
msgstr "Строгий стандарт DLNA:" msgstr "Следовать стандарту DLNA"
msgid "" msgid ""
"The miniDLNA service is active, serving %d audio, %d video and %d image " "The miniDLNA service is active, serving %d audio, %d video and %d image "
"files." "files."
msgstr "" msgstr ""
"Сервис miniDLNA запущен, обслуживает %d аудио-, %d видео- и %d файлов с " "Сервис miniDLNA запущен, сервер обслуживает %d аудио-, %d видео- и %d "
"изображениями." "файл(ов) изображений."
msgid "The miniDLNA service is not running." msgid "The miniDLNA service is not running."
msgstr "Сервис miniDLNA не запущен." msgstr "Сервис miniDLNA не запущен."
msgid "This is a list of file names to check for when searching for album art." msgid "This is a list of file names to check for when searching for album art."
msgstr "Это список файлов, среди которых необходимо искать обложки альбомов." msgstr "Этот список имен файлов используется для поиска обложек альбомов."
msgid "Video" msgid "Video"
msgstr "Видео" msgstr "Видео"
@ -185,7 +177,28 @@ msgid "miniDLNA"
msgstr "miniDLNA" msgstr "miniDLNA"
msgid "miniDLNA Status" msgid "miniDLNA Status"
msgstr "Статус miniDLNA" msgstr "Состояние miniDLNA"
msgid "miniSSDP socket:" msgid "miniSSDP socket:"
msgstr "Сокет miniSSDP:" msgstr "miniSSDP сокет"
#~ msgid "Allow wide links:"
#~ msgstr "Разрешить ссылки"
#~ msgid ""
#~ "Set this to allow serving content outside the media root (via symlinks)."
#~ msgstr ""
#~ "Разрешить использовать папки за пределами корневой директории ./root "
#~ "используя символические ссылки."
#~ msgid ""
#~ "Set this to the directory you want scanned. If you want to restrict the "
#~ "directory to a specific content type, you can prepend the type ('A' for "
#~ "audio, 'V' for video, 'P' for images), followed by a comma, to the "
#~ "directory (eg. A,/mnt/media/Music). Multiple directories can be specified."
#~ msgstr ""
#~ "Выберите папку, которую необходимо отсканировать. Если вы хотите выбрать "
#~ "в папке только видео или музыку, вы должны добавить букву ('A' для аудио, "
#~ "'V' для видео, 'P' для изображений) перед указанием пути к папке, за "
#~ "буквой следует запятая (пишется так, например: A,/mnt/media/Music). Можно "
#~ "выбрать сразу несколько папок."

View file

@ -0,0 +1,177 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: mjpg-streamer\n"
"POT-Creation-Date: 2017-10-17 14:30+0300\n"
"PO-Revision-Date: 2018-01-18 22:25+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7.1\n"
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Allow ringbuffer to exceed limit by this amount"
msgstr ""
"Позволить кольцевому буферу превысить ограничение, установив данное значение."
msgid "Ask for username and password on connect"
msgstr "Задать доступ по имени и паролю."
msgid "Authentication required"
msgstr "Логин и пароль"
msgid "Auto"
msgstr "Автоматически"
msgid "Automatic disabling of MJPEG mode"
msgstr "Автоматически отключится MJPEG."
msgid "Blink"
msgstr "Мигает"
msgid "Check to save the stream to an mjpeg file"
msgstr "Проверка сохранения потока в mjpeg файл."
msgid "Command to run"
msgstr "Введите команду"
msgid "Device"
msgstr "Устройство"
msgid "Do not initalize dynctrls of Linux-UVC driver"
msgstr "Не задействует dynctrls драйвера Linux-UVC."
msgid "Don't initalize dynctrls"
msgstr "Отключить dynctrls"
msgid "Drop frames smaller then this limit"
msgstr "Ограничить кол-во кадров"
msgid "Enable YUYV format"
msgstr "Включить YUYV формат"
msgid "Exceed"
msgstr "Превышение"
msgid ""
"Execute command after saving picture. Mjpg-streamer parse the filename as "
"first parameter to your script."
msgstr ""
"Выполнить команду после сохранения изображения.<br />Mjpg-streamer задаст "
"имя файла в качестве первого параметра вашего скрипта."
msgid "File input"
msgstr "Файл ввода"
msgid "File output"
msgstr "Вывод в файл"
msgid "Folder"
msgstr "Папка"
msgid "Folder that contains webpages"
msgstr "Содержимое вебстраницы, находится в этой папке."
msgid "Frames per second"
msgstr "Кадров в секунду"
msgid "HTTP output"
msgstr "HTTP вывод"
msgid "Interval between saving pictures"
msgstr "Интервал между снимками"
msgid "JPEG compression quality"
msgstr "Качество JPEG"
msgid "Led control"
msgstr "Управление светодиодным индикатором вебкамеры"
msgid "MJPG-streamer"
msgstr "MJPG-streamer"
msgid "Max. number of pictures to hold"
msgstr "Размер кольцевого буфера."
msgid "Mjpeg output"
msgstr "Mjpeg вывод"
msgid "Off"
msgstr "Выключено"
msgid "On"
msgstr "Включено"
msgid "Password"
msgstr "Пароль"
msgid "Port"
msgstr "Порт"
msgid "Resolution"
msgstr "Разрешение"
msgid "Ring buffer size"
msgstr "Задать размер буфера"
msgid "Set folder to save pictures"
msgstr "Задать папку для сохранения снимков."
msgid "Set the inteval in millisecond"
msgstr "Задать интервал в миллисекундах."
msgid ""
"Set the minimum size if the webcam produces small-sized garbage frames. May "
"happen under low light conditions"
msgstr ""
"Задайте минимальное значение, если вебкамера не справляется при плохом "
"освещении."
msgid ""
"Set the quality in percent. This setting activates YUYV format, disables "
"MJPEG"
msgstr ""
"Задать качество в процентах. Данная настройка активирует YUYV формат "
"отключая MJPEG."
msgid "TCP port for this HTTP server"
msgstr "Задать TCP порт для HTTP сервера."
msgid "UVC input"
msgstr "UVC ввод"
msgid "Username"
msgstr "Имя пользователя"
msgid "WWW folder"
msgstr "WWW папка"
msgid ""
"mjpg streamer is a streaming application for Linux-UVC compatible webcams"
msgstr ""
"Приложение для трансляции потокового видео, для Linux-UVC совместимых веб-"
"камер.<br />Просмотр в браузере по умолчанию http://192.168.1.1:8080/?"
"action=stream"
#~ msgid "Enable MJPG-streamer"
#~ msgstr "Включить MJPG-streamer"
#~ msgid "Enabled"
#~ msgstr "Включено"
#~ msgid "General"
#~ msgstr "Основные настройки"
#~ msgid "Input plugin"
#~ msgstr "Плагин ввода"
#~ msgid "Output plugin"
#~ msgstr "Плагин вывода"
#~ msgid "Plugin settings"
#~ msgstr "Настроить плагины"

View file

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=OLSR configuration and status module LUCI_TITLE:=OLSR configuration and status module
LUCI_DEPENDS:=+olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl LUCI_DEPENDS:=+olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl +luci-lib-json
include ../../luci.mk include ../../luci.mk

View file

@ -80,12 +80,15 @@ end
function action_json() function action_json()
local http = require "luci.http" local http = require "luci.http"
local utl = require "luci.util" local utl = require "luci.util"
local uci = require "luci.model.uci".cursor_state() local uci = require "luci.model.uci".cursor()
local jsonreq4 local jsonreq4
local jsonreq6 local jsonreq6
jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090") local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090
jsonreq6 = utl.exec("echo /status | nc ::1 9090") local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090
jsonreq4 = utl.exec("(echo /status | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null" )
jsonreq6 = utl.exec("(echo /status | nc ::1 " .. v6_port .. ") 2>/dev/null")
http.prepare_content("application/json") http.prepare_content("application/json")
if not jsonreq4 or jsonreq4 == "" then if not jsonreq4 or jsonreq4 == "" then
jsonreq4 = "{}" jsonreq4 = "{}"
@ -368,8 +371,11 @@ function fetch_jsoninfo(otable)
local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion") local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
local jsonreq4 = "" local jsonreq4 = ""
local jsonreq6 = "" local jsonreq6 = ""
jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090") local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090
jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090") local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090
jsonreq4 = utl.exec("(echo /" .. otable .. " | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null")
jsonreq6 = utl.exec("(echo /" .. otable .. " | nc ::1 " .. v6_port .. ") 2>/dev/null")
local jsondata4 = {} local jsondata4 = {}
local jsondata6 = {} local jsondata6 = {}
local data4 = {} local data4 = {}

View file

@ -6,7 +6,9 @@
-%> -%>
<% <%
local ipv = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion", "4")
has_ipv4_conf = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion")
has_ipv6_conf = luci.model.uci.cursor():get_first("olsrd6", "olsrd", "IpVersion")
function write_conf(conf, file) function write_conf(conf, file)
local fs = require "nixio.fs" local fs = require "nixio.fs"
@ -19,23 +21,23 @@ end
conf = luci.http.formvalue() conf = luci.http.formvalue()
if conf.openwrt then if conf.openwrt_v4 then
write_conf("/etc/config/olsrd", "olsrd") write_conf("/etc/config/olsrd", "olsrd")
return false return false
end end
if conf.conf_v4 then if conf.openwrt_v6 then
write_conf("/var/etc/olsrd.conf.ipv4", "olsrd.conf.ipv4") write_conf("/etc/config/olsrd6", "olsrd6")
return false
end
if conf.conf_v4 then
write_conf("/var/etc/olsrd.conf", "olsrd.conf")
return false return false
end end
if conf.conf_v6 then if conf.conf_v6 then
write_conf("/var/etc/olsrd.conf.ipv6", "olsrd.conf.ipv6") write_conf("/var/etc/olsrd6.conf", "olsrd6.conf")
return false
end
if conf.conf then
write_conf("/var/etc/olsrd.conf", "olsrd.conf")
return false return false
end end
@ -200,13 +202,18 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { },
<span id="version">-<span> <span id="version">-<span>
</td></tr> </td></tr>
<tr><td width="33%"><%:Download Config%></td><td> <tr><td width="33%"><%:Download Config%></td><td>
<a href="<%=REQUEST_URI%>?openwrt">OpenWrt</a>, <% if has_ipv4_conf then %>
<% if ipv == "6and4" then %> <a href="<%=REQUEST_URI%>?openwrt_v4">OpenWrt (IPv4)</a>,
<a href="<%=REQUEST_URI%>?conf_v4">OLSRD IPv4</a>, <% end %>
<a href="<%=REQUEST_URI%>?conf_v6">OLSRD IPv6</a> <% if has_ipv6_conf then %>
<% else %> <a href="<%=REQUEST_URI%>?openwrt_v6">OpenWrt (IPv6)</a>,
<a href="<%=REQUEST_URI%>?conf">OLSRD</a> <% end %>
<% end %> <% if has_ipv4_conf then %>
<a href="<%=REQUEST_URI%>?conf_v4">OLSRD (IPv4)</a>,
<% end %>
<% if has_ipv6_conf then %>
<a href="<%=REQUEST_URI%>?conf_v6">OLSRD (IPv6)</a>
<% end %>
</td></tr> </td></tr>
</table> </table>
</fieldset> </fieldset>

View file

@ -1,19 +1,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: p910nd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2012-08-15 11:42+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: p910nd\n"
"POT-Creation-Date: 2012-08-15 11:42+0300\n"
"PO-Revision-Date: 2018-01-19 23:33+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Bidirectional mode" msgid "Bidirectional mode"
msgstr "Двунаправленный режим" msgstr "Двунаправленный режим"
@ -25,33 +25,26 @@ msgid ""
"First you have to install the packages to get support for USB (kmod-usb-" "First you have to install the packages to get support for USB (kmod-usb-"
"printer) or parallel port (kmod-lp)." "printer) or parallel port (kmod-lp)."
msgstr "" msgstr ""
"Для начала вам необходимо установить пакеты для поддержки USB (kmod-usb-" "Сначала вы должны установить пакеты, чтобы получить поддержку для USB (kmod-"
"printer) или параллельного порта (kmod-lp)." "usb-printer) или параллельный порт (kmod-lp)."
msgid "Interface" msgid "Interface"
msgstr "" msgstr "Интерфейс"
msgid "Port" msgid "Port"
msgstr "Порт" msgstr "Порт"
msgid "Settings" msgid "Settings"
msgstr "Настройки" msgstr "Настройка"
msgid "Specifies the interface to listen on." msgid "Specifies the interface to listen on."
msgstr "" msgstr "Задать интерфейс для входящих соединений."
msgid "TCP listener port." msgid "TCP listener port."
msgstr "Прослушиваемый TCP-порт." msgstr "Порт для входящих соединений TCP."
msgid "enable" msgid "enable"
msgstr "включить" msgstr "Включить"
msgid "p910nd - Printer server" msgid "p910nd - Printer server"
msgstr "p910nd - сервер печати" msgstr "Сервер печати p910nd"
#~ msgid "port_help"
#~ msgstr "Помощь по портам"
#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer."
#~ msgstr ""
#~ "p910nd прослушивает порт 910+N. То есть 9100 - номер первого принтера."

View file

@ -80,7 +80,7 @@ o = s:taboption("proxy", Value, "parentProxy",
"will forward the requests.")) "will forward the requests."))
o.optional = true o.optional = true
o.datatype = "ipaddr" --o.datatype = "ipaddr"
o = s:taboption("proxy", Value, "parentAuthCredentials", o = s:taboption("proxy", Value, "parentAuthCredentials",

View file

@ -1,22 +1,22 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: polipo\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2012-08-15 17:51+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: polipo\n"
"POT-Creation-Date: 2012-08-15 17:51+0300\n"
"PO-Revision-Date: 2018-01-18 22:33+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Advanced Settings" msgid "Advanced Settings"
msgstr "Расширенные настройки" msgstr "Дополнительные настройки"
msgid "Allowed clients" msgid "Allowed clients"
msgstr "Разрешённые клиенты" msgstr "Разрешённые клиенты"
@ -28,14 +28,14 @@ msgid ""
"Basic HTTP authentication supported. Provide username and password in " "Basic HTTP authentication supported. Provide username and password in "
"username:password format." "username:password format."
msgstr "" msgstr ""
"Поддерживается базовая HTTP-аутентификация. Введите имя пользователя и " "Поддерживается обычная HTTP-аутентификация. Введите имя пользователя и "
"пароль в формате имя:пароль." "пароль в формате 'имя:пароль'."
msgid "Configuration" msgid "Configuration"
msgstr "Конфигурация" msgstr "Настройка config файла"
msgid "DNS and Query Settings" msgid "DNS and Query Settings"
msgstr "Настройки DNS" msgstr "Настройка DNS и запросов"
msgid "DNS server address" msgid "DNS server address"
msgstr "Адрес DNS-сервера" msgstr "Адрес DNS-сервера"
@ -44,27 +44,25 @@ msgid "Delete cache files time"
msgstr "Время удаления кэш-файлов" msgstr "Время удаления кэш-файлов"
msgid "Disk cache location" msgid "Disk cache location"
msgstr "Местоположение кэша" msgstr "Местоположение<br />кэша на диске"
msgid "Do not query IPv6" msgid "Do not query IPv6"
msgstr "Не запрашивать IPv6" msgstr "Не запрашивать IPv6"
msgid "Enable if cache (proxy) is shared by multiple users." msgid "Enable if cache (proxy) is shared by multiple users."
msgstr "" msgstr "Включить, чтобы кэш (прокси) был общим для нескольких пользователей."
"Включите, если вы хотите, чтобы кэш (прокси) был общим для нескольких "
"пользователей."
msgid "First PMM segment size (in bytes)" msgid "First PMM segment size (in bytes)"
msgstr "Размер первого PMM-сегмента (в байтах)" msgstr "Размер первого<br />PMM-сегмента (в байтах)"
msgid "General Settings" msgid "General Settings"
msgstr "Общие настройки" msgstr "Основные настройки"
msgid "How much RAM should Polipo use for its cache." msgid "How much RAM should Polipo use for its cache."
msgstr "Количество RAM, отведенное для кеша." msgstr "Размер оперативной памяти (RAM), отведенной для кэша."
msgid "In RAM cache size (in bytes)" msgid "In RAM cache size (in bytes)"
msgstr "Размер кэша в RAM (в байтах)" msgstr "Размер кэша<br />в RAM (в байтах)"
msgid "Listen address" msgid "Listen address"
msgstr "Адрес для входящих соединений" msgstr "Адрес для входящих соединений"
@ -77,15 +75,15 @@ msgid ""
"devices is recommended, because the cache can grow considerably. Leave it " "devices is recommended, because the cache can grow considerably. Leave it "
"empty to disable on-disk cache." "empty to disable on-disk cache."
msgstr "" msgstr ""
"Директория, где Polipo хранит кэш-файлы. Рекомендуется использовать внешнее " "Папка где Polipo хранит кэш-файлы. Рекомендуется использовать внешние "
"хранилище, так как размер кэша может увеличиваться. Оставьте пустым, чтобы " "накопители, так как кэш может значительно увеличиваться. Оставьте это поле "
"отключить хранение кэша на диске." "пустым, чтобы отключить кэш на диске."
msgid "Log file location" msgid "Log file location"
msgstr "Местоположение файла журнала" msgstr "Местоположение<br />файла журнала"
msgid "Log to syslog" msgid "Log to syslog"
msgstr "Записывать сообщения в системный журнал" msgstr "Запись в журнал"
msgid "Logging and RAM" msgid "Logging and RAM"
msgstr "Журналирование и RAM" msgstr "Журналирование и RAM"
@ -94,10 +92,10 @@ msgid "Never use system DNS resolver"
msgstr "Не использовать системный DNS-клиент" msgstr "Не использовать системный DNS-клиент"
msgid "On-Disk Cache" msgid "On-Disk Cache"
msgstr "Кэширование на диске" msgstr "Настройка кэширования"
msgid "PMM segments size (in bytes)" msgid "PMM segments size (in bytes)"
msgstr "Размер PMM-сегментов (в байтах)" msgstr "Размер PMM-сегментов<br />(в байтах)"
msgid "Parent Proxy" msgid "Parent Proxy"
msgstr "Родительский прокси" msgstr "Родительский прокси"
@ -109,7 +107,7 @@ msgid ""
"Parent proxy address (in host:port format), to which Polipo will forward the " "Parent proxy address (in host:port format), to which Polipo will forward the "
"requests." "requests."
msgstr "" msgstr ""
"Адрес родительского прокси (в формате хост:порт), на который Polipo будет " "Адрес родительского прокси (в формате 'хост:порт'), на который Polipo будет "
"перенаправлять запросы." "перенаправлять запросы."
msgid "Parent proxy authentication" msgid "Parent proxy authentication"
@ -122,7 +120,7 @@ msgid "Polipo Status"
msgstr "Состояние Polipo" msgstr "Состояние Polipo"
msgid "Polipo is a small and fast caching web proxy." msgid "Polipo is a small and fast caching web proxy."
msgstr "Polipo - небольшой веб-прокси, использующий кэширование." msgstr "Polipo - миниатюрный и быстрый веб-прокси, использующий кэширование."
msgid "Poor Man's Multiplexing" msgid "Poor Man's Multiplexing"
msgstr "Poor Man's Multiplexing" msgstr "Poor Man's Multiplexing"
@ -134,15 +132,15 @@ msgid ""
"PMM enabled." "PMM enabled."
msgstr "" msgstr ""
"Poor Man's Multiplexing (PMM) - это техника, которая позволяет запрашивать " "Poor Man's Multiplexing (PMM) - это техника, которая позволяет запрашивать "
"данные из нескольких источников. Таким образом, время отклика по HTTP-" "данные из нескольких источников.<br />Таким образом, время отклика по HTTP-"
"протоколу сокращается. ПРИМЕЧАНИЕ: некоторые сайты могут не работать с " "протоколу сокращается.<br />ВНИМАНИЕ: некоторые сайты могут не работать с "
"включенным PMM." "включенным PMM."
msgid "Port on which Polipo will listen" msgid "Port on which Polipo will listen"
msgstr "Порт, на котором Polipo будет ожидать входящие соединения" msgstr "Порт, на котором Polipo будет ожидать входящие соединения."
msgid "Proxy" msgid "Proxy"
msgstr "Прокси" msgstr "Настройка прокси"
msgid "Query DNS by hostname" msgid "Query DNS by hostname"
msgstr "Запрашивать DNS, используя имя хоста" msgstr "Запрашивать DNS, используя имя хоста"
@ -157,7 +155,7 @@ msgstr ""
"хостов" "хостов"
msgid "Query DNS for IPv6" msgid "Query DNS for IPv6"
msgstr "Запрашивать DNS для IPv6" msgstr "Запрашивать DNS<br />для IPv6"
msgid "Query IPv4 and IPv6, prefer IPv4" msgid "Query IPv4 and IPv6, prefer IPv4"
msgstr "Запрашивать IPv4 и IPv6, предпочитать IPv4" msgstr "Запрашивать IPv4 и IPv6, предпочитать IPv4"
@ -172,8 +170,8 @@ msgid ""
"Set the DNS server address to use, if you want Polipo to use different DNS " "Set the DNS server address to use, if you want Polipo to use different DNS "
"server than the host system." "server than the host system."
msgstr "" msgstr ""
"Установите адрес DNS-сервера для Polipo в случае, если он отличается от " "Задайте адрес DNS-сервера, если вы хотите чтобы Polipo использовал DNS-"
"системного." "сервер отличный от системного."
msgid "Shared cache" msgid "Shared cache"
msgstr "Общий кэш" msgstr "Общий кэш"
@ -186,7 +184,7 @@ msgstr ""
"будет равен двум обычным." "будет равен двум обычным."
msgid "Size to which cached files should be truncated" msgid "Size to which cached files should be truncated"
msgstr "Размер, до которого будут сокращены файлы кэша" msgstr "Размер, до которого будут сокращены файлы кэша."
msgid "Status" msgid "Status"
msgstr "Состояние" msgstr "Состояние"
@ -198,29 +196,29 @@ msgid ""
"The interface on which Polipo will listen. To listen on all interfaces use " "The interface on which Polipo will listen. To listen on all interfaces use "
"0.0.0.0 or :: (IPv6)." "0.0.0.0 or :: (IPv6)."
msgstr "" msgstr ""
"Интерфейс, на котором Polipo будет ожидать входящие соединения. Чтобы " "Интерфейс, на котором Polipo будет ожидать входящие соединения.<br />Чтобы "
"ожидать на всех интерфейсах, используйте 0.0.0.0 или :: (IPv6)." "ожидать на всех интерфейсах, используйте 0.0.0.0 или :: (IPv6)."
msgid "Time after which cached files will be deleted" msgid "Time after which cached files will be deleted"
msgstr "Интервал, после которого файлы кэша будут удалены" msgstr "Время по истечении которого, файлы кэша будут удалены."
msgid "Time after which cached files will be truncated" msgid "Time after which cached files will be truncated"
msgstr "Интервал, после которого файлы кэша будут сокращены" msgstr "Время по истечении которого, файлы кэша будут сокращены."
msgid "To enable PMM, PMM segment size must be set to some positive value." msgid "To enable PMM, PMM segment size must be set to some positive value."
msgstr "Чтобы включить PMM, размер PMM сегмента должен быть установлен." msgstr "Чтобы включить PMM, размер PMM сегмента должен быть установлен."
msgid "Truncate cache files size (in bytes)" msgid "Truncate cache files size (in bytes)"
msgstr "Сократить размер файлов кэша (в байтах)" msgstr "Сократить размер<br />файлов кэша (в байтах)"
msgid "Truncate cache files time" msgid "Truncate cache files time"
msgstr "Время сокращения файлов кэша" msgstr "Время сокращения<br />файлов кэша"
msgid "" msgid ""
"Use of external storage device is recommended, because the log file is " "Use of external storage device is recommended, because the log file is "
"written frequently and can grow considerably." "written frequently and can grow considerably."
msgstr "" msgstr ""
"Рекомендуется использовать внешнее хранилище, так как журнал часто " "Рекомендуется использовать внешний накопитель, так как журнал часто "
"обновляется и может значительно увеличиваться в размере." "обновляется и может значительно увеличиваться в размере."
msgid "" msgid ""
@ -229,9 +227,9 @@ msgid ""
"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))"
msgstr "" msgstr ""
"Если адрес для входящих соединений установлен в 0.0.0.0 или :: (IPv6), вам " "Если адрес для входящих соединений установлен в 0.0.0.0 или :: (IPv6), вам "
"необходимо перечислить клиентов, которым разрешено подключаться. В таком " "необходимо перечислить клиентов, которым разрешено подключаться. Перечислить "
"случае формат - это IP-адрес или адрес подсети (192.168.1.123, " "в таком виде: IP-адрес или адрес подсети (192.168.1.123, 192.168.1.0/24, "
"192.168.1.0/24, 2001:660:116::/48 (IPv6))" "2001:660:116::/48 (IPv6))."
msgid "enable" msgid "enable"
msgstr "включить" msgstr "Включить"

View file

@ -10,11 +10,11 @@ PKG_NAME:=luci-app-privoxy
# Version == major.minor.patch # Version == major.minor.patch
# increase "minor" on new functionality and "patch" on patches/optimization # increase "minor" on new functionality and "patch" on patches/optimization
PKG_VERSION:=1.0.3 PKG_VERSION:=1.0.4
# Release == build # Release == build
# increase on changes of translation files # increase on changes of translation files
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com> PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
@ -33,6 +33,6 @@ help
$(PKG_MAINTAINER) $(PKG_MAINTAINER)
endef endef
include $(TOPDIR)/feeds/luci/luci.mk include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature # call BuildPackage - OpenWrt buildroot signature

View file

@ -72,8 +72,7 @@ end
-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>" -- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
function ipkg_ver_compare(ver1, comp, ver2) function ipkg_ver_compare(ver1, comp, ver2)
if not ver1 or not (#ver1 > 0) if not ver1 or not ver2
or not ver2 or not (#ver2 > 0)
or not comp or not (#comp > 0) then return nil end or not comp or not (#comp > 0) then return nil end
-- correct compare string -- correct compare string
if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
@ -90,33 +89,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
local s1 = av1[i] or "" local s1 = av1[i] or ""
local s2 = av2[i] or "" local s2 = av2[i] or ""
local n1 = tonumber(s1)
local n2 = tonumber(s2)
-- one numeric and other empty string then set other to 0 -- first "not equal" found return true
if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end if comp == "~=" and (s1 ~= s2) then return true end
if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end -- first "lower" found return true
if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
local nc = (n1 and n2) -- numeric compare -- first "greater" found return true
if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
if nc then -- not equal then return false
-- first "not equal" found return true if (s1 ~= s2) then return false end
if comp == "~=" and (n1 ~= n2) then return true end
-- first "lower" found return true
if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
-- first "greater" found return true
if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
-- not equal then return false
if (n1 ~= n2) then return false end
else
if comp == "~=" and (s1 ~= s2) then return true end
if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
if (s1 ~= s2) then return false end
end
end end
-- all equal then true
return true -- all equal and not compare greater or lower then true
return not (comp == "<" or comp == ">")
end end
-- read version information for given package if installed -- read version information for given package if installed

View file

@ -39,6 +39,7 @@ if not nixio.fs.access("/etc/config/privoxy") or not VEROK then
local f = SimpleForm("_no_config") local f = SimpleForm("_no_config")
f.title = TITLE f.title = TITLE
f.description = DESC f.description = DESC
f.embedded = true
f.submit = false f.submit = false
f.reset = false f.reset = false

View file

@ -0,0 +1,524 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: privoxy\n"
"POT-Creation-Date: 2017-12-14 16:00+0300\n"
"PO-Revision-Date: 2018-01-18 22:37+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7.1\n"
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid ""
"A URL to be displayed in the error page that users will see if access to an "
"untrusted page is denied."
msgstr ""
"URL-адрес, отображаемый на странице ошибки, который пользователи будут "
"видеть, если доступ к ненадежной странице запрещен."
msgid ""
"A URL to documentation about the local Privoxy setup, configuration or "
"policies."
msgstr ""
"URL-адрес к документации о локальной настройке, конфигурации или политиках "
"Privoxy."
msgid "A directory where Privoxy can create temporary files."
msgstr "Папка в которой Privoxy может создавать временные файлы."
msgid "Access Control"
msgstr "Контроль доступа"
msgid "Actions that are applied to all sites and maybe overruled later on."
msgstr ""
"Действия, которые применяются ко всем сайтам и могут быть отменены позже."
msgid "An alternative directory where the templates are loaded from."
msgstr "Альтернативная папка, из которой загружаются шаблоны."
msgid "An email address to reach the Privoxy administrator."
msgstr "Адрес электронной почты, чтобы связаться с администратором Privoxy."
msgid ""
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
"server."
msgstr ""
"Взятый на стороне сервера keep-alive тайм-аут (в секундах), если не указан "
"сервер."
msgid "CGI user interface"
msgstr "Пользовательский интерфейс CGI."
msgid "Common Log Format"
msgstr "Типичный формат системного журнала."
msgid ""
"Configure here the routing of HTTP requests through a chain of multiple "
"proxies. Note that parent proxies can severely decrease your privacy level. "
"Also specified here are SOCKS proxies."
msgstr ""
"Страница настройки маршрутизации HTTP-запросов через цепочку из нескольких "
"прокси-серверов. Обратите внимание, что родительские прокси могут "
"значительно снизить уровень конфиденциальности. Здесь же настройка SOCKS "
"прокси."
msgid "Debug GIF de-animation"
msgstr "Отладка GIF де-анимации."
msgid "Debug force feature"
msgstr "Отладка функции назначения."
msgid "Debug redirects"
msgstr "Отладка перенаправлений."
msgid "Debug regular expression filters"
msgstr "Отладка фильтров регулярных выражений."
msgid "Directory does not exist!"
msgstr "Папка не существует!"
msgid "Disabled == Transparent Proxy Mode"
msgstr "Отключен == Прозрачный Режим Прокси-Сервера."
msgid "Enable proxy authentication forwarding"
msgstr "Включить проверку подлинности прокси-сервера переадресации."
msgid ""
"Enable/Disable autostart of Privoxy on system startup and interface events"
msgstr ""
"Включить / Выключить, автозапуск Privoxy при старте системы и событиях "
"интерфейса."
msgid "Enable/Disable filtering when Privoxy starts."
msgstr "Включить / Выключить фильтрацию при запуске Privoxy."
msgid "Enabled"
msgstr "Включено"
msgid ""
"Enabling this option is NOT recommended if there is no parent proxy that "
"requires authentication!"
msgstr ""
"Включение этой опции не рекомендуется, если отсутствует родительский прокси, "
"который требует аутентификации!"
msgid "File '%s' not found inside Configuration Directory"
msgstr "Файл '%S' не найден в папке с config файлами"
msgid "File not found or empty"
msgstr "Файл не найден или пустой"
msgid "Files and Directories"
msgstr "Файлы и папки"
msgid "For help use link at the relevant option"
msgstr "Для помощи используйте ссылку по соответствующей опции."
msgid "Forwarding"
msgstr "Маршрутизация"
msgid ""
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
"should not be able to bypass any blocks."
msgstr ""
"Если включено, Privoxy скрывает 'идти туда в любом случае'. Пользователь не "
"сможет обойти блокировку."
msgid ""
"If you intend to operate Privoxy for more users than just yourself, it might "
"be a good idea to let them know how to reach you, what you block and why you "
"do that, your policies, etc."
msgstr ""
"Если вы используете Privoxy, вы сможете сообщить большому количеству "
"пользователей, как связаться с вами, что вы блокируете и почему вы это "
"делаете, ваши политики и т.д."
msgid "Invalid email address"
msgstr "Неверный email адрес"
msgid "It is NOT recommended for the casual user."
msgstr "Нельзя использовать случайному пользователю."
msgid "Local Set-up"
msgstr ""
msgid "Location of the Privoxy User Manual."
msgstr "Расположение руководства пользователя Privoxy."
msgid "Log File Viewer"
msgstr "Просмотр системного журнала"
msgid "Log all data read from the network"
msgstr "Записывать в системный журнал все данные, считываемые сетью."
msgid "Log all data written to the network"
msgstr "Записывать в системный журнал все данные, отправленные в сеть."
msgid "Log the applying actions"
msgstr "Записывать в системный журнал все действия."
msgid ""
"Log the destination for each request Privoxy let through. See also 'Debug "
"1024'."
msgstr ""
"Записывать в системный журнал места назначения для каждого запроса, который "
"передает Privoxy. См. также 'Debug 1024'."
msgid ""
"Log the destination for requests Privoxy didn't let through, and the reason "
"why."
msgstr "Записывать в системный журнал неудачные попытки Privoxy и их причины."
msgid "Logging"
msgstr "Журналирование"
msgid "Main actions file"
msgstr "Дефолтные действия."
msgid "Mandatory Input: No Data given!"
msgstr "Обязательный ввод: не указаны данные!"
msgid "Mandatory Input: No Directory given!"
msgstr "Обязательный ввод: не указана папка!"
msgid "Mandatory Input: No File given!"
msgstr "Обязательный ввод: не указан файл!"
msgid "Mandatory Input: No Port given!"
msgstr "Обязательный ввод: Не указан порт!"
msgid "Mandatory Input: No files given!"
msgstr "Обязательный ввод: не указаны файлы!"
msgid "Mandatory Input: No valid IPv4 address or host given!"
msgstr "Обязательный ввод: Не указан действительный IPv4 адрес или хост!"
msgid "Mandatory Input: No valid IPv6 address given!"
msgstr "Обязательный ввод: Не указан действительный IPv6 адрес!"
msgid "Mandatory Input: No valid Port given!"
msgstr "Обязательный ввод: Не указан действительный порт!"
msgid "Maximum number of client connections that will be served."
msgstr "Максимальное число обслуживаемых клиентских подключений."
msgid "Maximum size (in KB) of the buffer for content filtering."
msgstr "Максимальный размер буфера для фильтрации содержимого (в KB)."
msgid "Miscellaneous"
msgstr "Дополнительно"
msgid "No trailing '/', please."
msgstr "Не используйте символ '/'."
msgid "Non-fatal errors - *we highly recommended enabling this*"
msgstr ""
"Отсутствуют неустранимые ошибки - *мы настоятельно рекомендуем включить эту "
"функцию*."
msgid ""
"Number of seconds after which a socket times out if no data is received."
msgstr ""
"Количество секунд по истечении которых, время сокета истекает, если данные "
"не получены."
msgid ""
"Number of seconds after which an open connection will no longer be reused."
msgstr ""
"Количество секунд по истечении которых, соединение не будет использоваться "
"повторно."
msgid ""
"Only when using 'external filters', Privoxy has to create temporary files."
msgstr ""
"Только когда используются 'сторонние фильтры', Privoxy должен создавать "
"временные файлы."
msgid "Please press [Read] button"
msgstr "Нажмите кнопку [Читать / Перечитывать системный журнал]"
msgid "Please read Privoxy manual for details!"
msgstr "Ознакомьтесь с руководством Privoxy!"
msgid "Please update to the current version!"
msgstr "Обновите до текущей версии!"
msgid "Privoxy WEB proxy"
msgstr "Privoxy WEB proxy"
msgid ""
"Privoxy can (and normally does) use a number of other files for additional "
"configuration, help and logging. This section of the configuration file "
"tells Privoxy where to find those other files."
msgstr ""
"Страница настройки расположения вспомогательных файлов Privoxy. Privoxy - "
"использует ряд других файлов для дополнительной настройки, оказания помощи и "
"ведения системного журнала. "
msgid ""
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
"enhancing privacy, modifying web page data and HTTP headers, controlling "
"access, and removing ads and other obnoxious Internet junk."
msgstr ""
"Privoxy - это свободный веб-прокси с расширенными возможностями фильтрации "
"интернет-контента для защиты конфиденциальности (приватности) пользователей "
"сети Интернет. Изменения содержания веб-страниц, управления cookies, "
"ограничения доступа к некоторым сайтам и удаления рекламы, баннеров, "
"всплывающих окон, а также любого другого нежелательного контента («интернет-"
"мусора»)."
msgid "Read / Reread log file"
msgstr "Читать / Перечитывать системный журнал"
msgid "Show I/O status"
msgstr "Показать статус ввода-вывода."
msgid "Show each connection status"
msgstr "Показать состояние каждого соединения."
msgid "Show header parsing"
msgstr "Показать анализ заголовка."
msgid "Software update required"
msgstr ""
msgid "Start"
msgstr "Старт"
msgid "Start / Stop"
msgstr "Старт / Стоп"
msgid "Start/Stop Privoxy WEB Proxy"
msgstr "Запуск и остановка Privoxy WEB proxy."
msgid "Startup banner and warnings."
msgstr "Баннер запуска и предупреждения."
msgid "Syntax:"
msgstr "Синтаксис:"
msgid "Syntax: Client header names delimited by spaces."
msgstr "Синтаксис: имя заголовка клиента, разделенное пробелами."
msgid "Syntax: target_pattern http_parent[:port]"
msgstr "Синтаксис: target_pattern http_parent[:port]"
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
msgstr "Синтаксис: target_pattern socks_proxy[:port] http_parent[:port]"
msgid ""
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
"are in fact recommended!"
msgstr ""
"Файл (или файлы) действий для использования. Желательно использовать "
"несколько строк 'Action Files'."
msgid ""
"The address and TCP port on which Privoxy will listen for client requests."
msgstr "Адрес и TCP-порт Privoxy для входящих запросов клиентов."
msgid ""
"The compression level that is passed to the zlib library when compressing "
"buffered content."
msgstr ""
"Уровень сжатия, который передается в библиотеку zlib при сжатии содержимого "
"буфера."
msgid ""
"The currently installed 'privoxy' package is not supported by LuCI "
"application."
msgstr ""
msgid ""
"The directory where all logging takes place (i.e. where the logfile is "
"located)."
msgstr "Папка в которой находится системный журнал (т.е. его файл)."
msgid "The directory where the other configuration files are located."
msgstr "Папка, в которой находятся другие config файлы."
msgid ""
"The filter files contain content modification rules that use regular "
"expressions."
msgstr ""
"Файлы фильтров содержат правила изменения содержимого, использующие "
"регулярные выражения."
msgid "The hostname shown on the CGI pages."
msgstr "Имя хоста, показанное на страницах CGI."
msgid "The log file to use. File name, relative to log directory."
msgstr ""
"Используемый файл системного журнала. Имя файла относительно папки системных "
"журналов."
msgid "The order in which client headers are sorted before forwarding them."
msgstr "Порядок сортировки заголовков клиентов перед их пересылкой."
msgid ""
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
"document."
msgstr ""
"Код статуса заблокированных Privoxy страниц с пометкой +handle-as-empty-"
"document."
msgid ""
"The trust mechanism is an experimental feature for building white-lists and "
"should be used with care."
msgstr ""
"Механизм доверия, является экспериментальной функцией для построения Белых "
"списков и должен использоваться с осторожностью."
msgid ""
"The value of this option only matters if the experimental trust mechanism "
"has been activated."
msgstr ""
"Этот параметр будет задействован, только если активирован экспериментальный "
"механизм доверия."
msgid ""
"This option is only there for debugging purposes. It will drastically reduce "
"performance."
msgstr ""
"Этот режим доступен только для отладки. Он существенно снизит "
"производительность."
msgid ""
"This option will be removed in future releases as it has been obsoleted by "
"the more general header taggers."
msgstr ""
"Этот параметр будет удален в будущих выпусках, поскольку он устарел "
"благодаря введению основных меток заголовков."
msgid ""
"This tab controls the security-relevant aspects of Privoxy's configuration."
msgstr "Страница контролирует безопасность, важные аспекты настройки Privoxy."
msgid ""
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
"specific requests should be routed."
msgstr ""
"Через какой SOCKS прокси (как вариант, с каким из родительских http-прокси) "
"конкретные запросы должны быть направлены."
msgid "To which parent HTTP proxy specific requests should be routed."
msgstr ""
"На какой родительский прокси HTTP должны быть направлены определенные "
"запросы."
msgid "User customizations"
msgstr "Пользовательские действия."
msgid "Value is not a number"
msgstr "Значение не является числом"
msgid "Value not between 0 and 9"
msgstr "Значение не от 0 до 9"
msgid "Value not between 1 and 4096"
msgstr "Значения не от 1 до 4096"
msgid "Value not greater 0 or empty"
msgstr "Значение не больше 0 или пустое"
msgid "Value range 1 to 4096, no entry defaults to 4096"
msgstr "Диапазон значений от 1 до 4096, значение по умолчанию 4096."
msgid "Version"
msgstr "Версия"
msgid "Version Information"
msgstr "Информация о версии"
msgid "Whether intercepted requests should be treated as valid."
msgstr "Следует ли рассматривать перехваченные запросы как действительные."
msgid ""
"Whether or not Privoxy recognizes special HTTP headers to change toggle "
"state."
msgstr ""
"Распознает ли Privoxy специальные заголовки HTTP для изменения состояния "
"переключения."
msgid "Whether or not buffered content is compressed before delivery."
msgstr "Сжатие буферизованного содержимого перед доставкой."
msgid ""
"Whether or not outgoing connections that have been kept alive should be "
"shared between different incoming connections."
msgstr ""
"Должны ли исходящие соединения, сохраненные в действующих, совместно "
"использоваться различными входящими соединениями."
msgid "Whether or not pipelined requests should be served."
msgstr "Могут или нет подаваться pipelined запросы."
msgid "Whether or not proxy authentication through Privoxy should work."
msgstr "Должена ли работать прокси-аутентификация через Privoxy."
msgid "Whether or not the web-based actions file editor may be used."
msgstr "Может ли использоваться редактор файлов веб-действий."
msgid "Whether or not the web-based toggle feature may be used."
msgstr "Может ли использоваться веб-функция переключения."
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
msgstr ""
"Могут ли запросы на CGI-страницы Privoxy быть заблокированы или "
"перенаправлены."
msgid ""
"Whether the CGI interface should stay compatible with broken HTTP clients."
msgstr ""
"Должен ли CGI интерфейс оставаться совместимым со сломанными http-клиентами."
msgid "Whether to run only one server thread."
msgstr "Должен ли выполняться только один серверный поток."
msgid "Who can access what."
msgstr "Кто имеет доступ."
msgid "installed"
msgstr "установлено"
msgid "or higher"
msgstr "или выше"
msgid "required"
msgstr "требовать"
#~ msgid "Boot delay"
#~ msgstr "Задержка загрузки"
#~ msgid "Delay (in seconds) during system boot before Privoxy start"
#~ msgstr "Задержка (в секундах) во время загрузки системы до запуска Privoxy."
#~ msgid "Documentation"
#~ msgstr "Информация"
#~ msgid "During delay ifup-events are not monitored !"
#~ msgstr "Во время задержки ifup-события не отслеживаются!"
#~ msgid "NOT installed"
#~ msgstr "Не установлена"
#~ msgid "Please install current version !"
#~ msgstr "Установите текущую версию !"
#~ msgid "Software package '%s' is not installed."
#~ msgstr "Программный пакет '%s' не установлен."
#~ msgid "Software package '%s' is outdated."
#~ msgstr "Программный пакет '%s' устарел."
#~ msgid "System"
#~ msgstr "Система"
#~ msgid "Value not between 0 and 300"
#~ msgstr "Значение не между 0 и 300"

View file

@ -0,0 +1,468 @@
msgid ""
msgstr ""
"Project-Id-Version: luci-app-privoxy\n"
"POT-Creation-Date: 2015-06-10 20:16+0100\n"
"PO-Revision-Date: 2015-06-10 20:16+0100\n"
"Last-Translator: maz-1 <ohmygod19993 at gmail dotcom>\n"
"Language-Team: \n"
"Language: zh-cn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
msgid ""
"A URL to be displayed in the error page that users will see if access to an "
"untrusted page is denied."
msgstr ""
"当用户试图访问不受信任的页面时错误页面所显示的URL。"
msgid ""
"A URL to documentation about the local Privoxy setup, configuration or "
"policies."
msgstr ""
"指向Privoxy安装、设置和规则说明文档的URL"
msgid "A directory where Privoxy can create temporary files."
msgstr "Privoxy存放临时文件的目录。"
msgid "Access Control"
msgstr "访问控制"
msgid "Actions that are applied to all sites and maybe overruled later on."
msgstr ""
"作用在所有站点上的规则,可能被后面的规则覆盖。"
msgid "An alternative directory where the templates are loaded from."
msgstr "可选的目录,放在里面的模板会被加载。"
msgid "An email address to reach the Privoxy administrator."
msgstr "用于联系privoxy管理员的邮箱地址。"
msgid ""
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
"server."
msgstr ""
"当服务端没有指定超时时间时假定的超时时间(单位秒)。"
msgid "CGI user interface"
msgstr "CGI用户界面"
msgid "Common Log Format"
msgstr "通用日志格式"
msgid ""
"Configure here the routing of HTTP requests through a chain of multiple "
"proxies. Note that parent proxies can severely decrease your privacy level. "
"Also specified here are SOCKS proxies."
msgstr ""
"在这里设置http请求所经过的多重代理链。"
"注意父级代理可能严重降低你的隐私安全度。"
"在这里还可以设置SOCKS代理。"
msgid "Debug GIF de-animation"
msgstr "GIF动画日志"
msgid "Debug force feature"
msgstr "force feature日志"
msgid "Debug redirects"
msgstr "重定向日志"
msgid "Debug regular expression filters"
msgstr "正则表达式日志"
msgid "Directory does not exist!"
msgstr "目录不存在!"
msgid "Disabled == Transparent Proxy Mode"
msgstr "禁用 == 透明代理模式"
msgid "Enable proxy authentication forwarding"
msgstr "允许转发代理认证"
msgid ""
"Enable/Disable autostart of Privoxy on system startup and interface events"
msgstr ""
"开启/关闭Privoxy在系统启动或者设置界面更改时自动启动。"
msgid "Enable/Disable filtering when Privoxy starts."
msgstr "Privoxy启动时开启/关闭过滤。"
msgid "Enabled"
msgstr "已开启"
msgid ""
"Enabling this option is NOT recommended if there is no parent proxy that "
"requires authentication!"
msgstr ""
"父级代理不需要认证时不推荐开启这个选项!"
msgid "File '%s' not found inside Configuration Directory"
msgstr "文件 '%s' 没有在设置目录中找到!"
msgid "File not found or empty"
msgstr "文件不存在或为空"
msgid "Files and Directories"
msgstr "文件和目录"
msgid "For help use link at the relevant option"
msgstr ""
"在相应选项下的连接可获取帮助。"
msgid "Forwarding"
msgstr "转发"
msgid ""
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
"should not be able to bypass any blocks."
msgstr ""
"如果启用Privoxy会隐藏'go there anyway'链接。用户显然不应能绕过屏蔽。"
msgid ""
"If you intend to operate Privoxy for more users than just yourself, it might "
"be a good idea to let them know how to reach you, what you block and why you "
"do that, your policies, etc."
msgstr ""
"如果除了你还有其他用户通过privoxy连接让他们知道如何联系你、什么内容被屏蔽了、"
"你为什么要这么做、你所制定的规范等等是一个好主意。"
msgid "Invalid email address"
msgstr "邮箱地址无效"
msgid "It is NOT recommended for the casual user."
msgstr "不推荐新手使用。"
msgid "Local Set-up"
msgstr "本地设置"
msgid "Location of the Privoxy User Manual."
msgstr "Privoxy用户手册位置"
msgid "Log File Viewer"
msgstr "日志查看器"
msgid "Log all data read from the network"
msgstr "记录所有从网络接收的数据"
msgid "Log all data written to the network"
msgstr "记录所有发送给网络的数据"
msgid "Log the applying actions"
msgstr "记录被应用的规则"
msgid ""
"Log the destination for each request Privoxy let through. See also 'Debug "
"1024'."
msgstr ""
"记录Privoxy所允许的所有请求。另请参考'Debug 1024'。"
msgid ""
"Log the destination for requests Privoxy didn't let through, and the reason "
"why."
msgstr ""
"记录被Privoxy拒绝的请求目标以及拒绝原因。"
msgid "Logging"
msgstr "日志"
msgid "Main actions file"
msgstr "主要规则文件"
msgid "Mandatory Input: No Data given!"
msgstr "必需选项: 没有设置数据!"
msgid "Mandatory Input: No Directory given!"
msgstr "必需选项: 没有设置目录!"
msgid "Mandatory Input: No File given!"
msgstr "必需选项: 没有设置文件!"
msgid "Mandatory Input: No Port given!"
msgstr "必需选项: 没有设置端口!"
msgid "Mandatory Input: No files given!"
msgstr "必需选项: 没有设置文件!"
msgid "Mandatory Input: No valid IPv4 address or host given!"
msgstr ""
"必需选项: 没有设置有效的IPV4地址或者主机"
msgid "Mandatory Input: No valid IPv6 address given!"
msgstr "必需选项: 没有设置有效的IPV6地址"
msgid "Mandatory Input: No valid Port given!"
msgstr "必需选项: 没有设置有效的端口!"
msgid "Maximum number of client connections that will be served."
msgstr "客户端数量上限。"
msgid "Maximum size (in KB) of the buffer for content filtering."
msgstr "内容过滤的最大缓冲单位KB。"
msgid "Miscellaneous"
msgstr "杂项"
msgid "No trailing '/', please."
msgstr "路径结尾不要加'/' ."
msgid "Non-fatal errors - *we highly recommended enabling this*"
msgstr ""
"非致命性错误 - * 建议开启 *"
msgid ""
"Number of seconds after which a socket times out if no data is received."
msgstr ""
"socket连接未收到数据的超时时间。"
msgid ""
"Number of seconds after which an open connection will no longer be reused."
msgstr ""
"一个开放的连接不再重复使用的超时时间。"
msgid ""
"Only when using 'external filters', Privoxy has to create temporary files."
msgstr ""
"只有使用外置规则时privoxy才需要创建临时文件。"
msgid "Please press [Read] button"
msgstr "请点击[读取]按钮"
msgid "Please read Privoxy manual for details!"
msgstr "请阅读Privoxy手册以了解详情"
msgid "Please update to the current version!"
msgstr "请升级到当前版本!"
msgid "Privoxy WEB proxy"
msgstr "Privoxy 网络代理"
msgid ""
"Privoxy can (and normally does) use a number of other files for additional "
"configuration, help and logging. This section of the configuration file "
"tells Privoxy where to find those other files."
msgstr ""
"Privoxy可以使用其他一些文件用于附加设置帮助和日志。这个区域用来告诉Privoxy从哪里找到这些文件。"
msgid ""
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
"enhancing privacy, modifying web page data and HTTP headers, controlling "
"access, and removing ads and other obnoxious Internet junk."
msgstr ""
"Privoxy是一个无缓存的网络代理具有高级过滤功能能够修改网页数据和HTTP头控制访问移除广告等。"
msgid "Read / Reread log file"
msgstr "读取/刷新日志文件"
msgid "Show I/O status"
msgstr "显示 I/O 状态"
msgid "Show each connection status"
msgstr "显示每个连接的状态"
msgid "Show header parsing"
msgstr "Show header parsing"
msgid "Software update required"
msgstr "需要升级软件"
msgid "Start"
msgstr "启动"
msgid "Start / Stop"
msgstr "启动 / 停止"
msgid "Start/Stop Privoxy WEB Proxy"
msgstr "启动/停止 Privoxy 网络代理"
msgid "Startup banner and warnings."
msgstr "启动标语和警告。"
msgid "Syntax:"
msgstr "格式:"
msgid "Syntax: Client header names delimited by spaces."
msgstr "格式: Client header names delimited by spaces."
msgid "Syntax: target_pattern http_parent[:port]"
msgstr "格式: target_pattern http_parent[:port]"
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
msgstr "格式: target_pattern socks_proxy[:port] http_parent[:port]"
msgid ""
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
"are in fact recommended!"
msgstr ""
"所使用的规则文件。允许并且推荐使用多个规则文件。"
msgid ""
"The address and TCP port on which Privoxy will listen for client requests."
msgstr ""
"Privoxy接收客户端请求时监听的地址和TCP端口。"
msgid ""
"The compression level that is passed to the zlib library when compressing "
"buffered content."
msgstr ""
"使用zlib压缩缓冲内容时的压缩级别。"
msgid ""
"The currently installed 'privoxy' package is not supported by LuCI "
"application."
msgstr ""
"目前安装的privoxy版本不被luci支持。"
msgid ""
"The directory where all logging takes place (i.e. where the logfile is "
"located)."
msgstr "所有日志所在的目录。"
msgid "The directory where the other configuration files are located."
msgstr "其他设置文件所在的目录。"
msgid ""
"The filter files contain content modification rules that use regular "
"expressions."
msgstr ""
"过滤文件包含了使用正则表达式编写的内容修改规则"
msgid "The hostname shown on the CGI pages."
msgstr "CGI页面显示的主机名。"
msgid "The log file to use. File name, relative to log directory."
msgstr ""
"日志文件名称,与日志路径相对。"
msgid "The order in which client headers are sorted before forwarding them."
msgstr ""
"转发数据前client headers的排序。"
msgid ""
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
"document."
msgstr ""
"当页面因为handle-as-empty-document规则被阻止时返回的状态码选上为200 OK不选上为403 Forbidden"
msgid ""
"The trust mechanism is an experimental feature for building white-lists and "
"should be used with care."
msgstr ""
"信任机制是一个实验性的白名单特性,使用时应小心。"
msgid ""
"The value of this option only matters if the experimental trust mechanism "
"has been activated."
msgstr ""
"只有开启了信任机制时这个选项的值才有效"
msgid ""
"This option is only there for debugging purposes. It will drastically reduce "
"performance."
msgstr ""
"这个选项仅用于调试,开启后会极大地降低性能。"
msgid ""
"This option will be removed in future releases as it has been obsoleted by "
"the more general header taggers."
msgstr "这个选项在以后的版本中将被移除因为它被header taggers所取代了。"
msgid ""
"This tab controls the security-relevant aspects of Privoxy's configuration."
msgstr ""
"这个标签用于设置与安全相关的Privoxy选项。"
msgid ""
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
"specific requests should be routed."
msgstr ""
"指定的请求应该通过哪一个SOCKS代理并且通过哪一个HTTP父代理可选"
msgid "To which parent HTTP proxy specific requests should be routed."
msgstr ""
"请求应转发至哪一个父级HTTP代理。"
msgid "User customizations"
msgstr "用户自定义"
msgid "Value is not a number"
msgstr "输入值不是数字"
msgid "Value not between 0 and 9"
msgstr "输入值不在0和9之间。"
msgid "Value not between 1 and 4096"
msgstr "输入值不在1和4096之间"
msgid "Value not greater 0 or empty"
msgstr "输入值为空或者不是大于零。"
msgid "Value range 1 to 4096, no entry defaults to 4096"
msgstr "输入值为1到4096默认为4096"
msgid "Version"
msgstr "版本"
msgid "Version Information"
msgstr "版本信息"
msgid "Whether intercepted requests should be treated as valid."
msgstr "被拦截的请求是否应被当作有效的。"
msgid ""
"Whether or not Privoxy recognizes special HTTP headers to change toggle "
"state."
msgstr ""
"Privoxy是否识别特殊的HTTP头以切换状态。"
msgid "Whether or not buffered content is compressed before delivery."
msgstr ""
"缓冲内容在传递之前是否压缩。"
msgid ""
"Whether or not outgoing connections that have been kept alive should be "
"shared between different incoming connections."
msgstr ""
"持久出站连接是否应在不同的入站连接之间共享。"
msgid "Whether or not pipelined requests should be served."
msgstr "是否处理管道化的请求。"
msgid "Whether or not proxy authentication through Privoxy should work."
msgstr "是否可以通过Privoxy进行代理验证。"
msgid "Whether or not the web-based actions file editor may be used."
msgstr "是否使用基于网页的规则编辑器。"
msgid "Whether or not the web-based toggle feature may be used."
msgstr "是否启用基于网页的切换功能。"
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
msgstr "访问Privoxy CGI页面的请求是否可以被拦截或重定向。"
msgid ""
"Whether the CGI interface should stay compatible with broken HTTP clients."
msgstr ""
"CGI界面是否应兼容过时的HTTP客户端。"
msgid "Whether to run only one server thread."
msgstr "是否只运行一个服务线程。"
msgid "Who can access what."
msgstr "谁可以访问什么。"
msgid "installed"
msgstr "已安装"
msgid "or higher"
msgstr "或更高"
msgid "required"
msgstr "需要"

View file

@ -1,37 +1,37 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: qos\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-03-25 22:10+0100\n"
"PO-Revision-Date: 2012-08-15 12:02+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: qos\n"
"POT-Creation-Date: 2012-08-15 12:02+0300\n"
"PO-Revision-Date: 2018-01-18 22:40+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Calculate overhead" msgid "Calculate overhead"
msgstr "Подсчитывать накладные расходы" msgstr "Подсчитывать<br />накладные расходы"
msgid "Classification Rules" msgid "Classification Rules"
msgstr "Правила классификации" msgstr "Правила классификации"
msgid "Classification group" msgid "Classification group"
msgstr "Классификация" msgstr "Классификация групп"
msgid "Comment" msgid "Comment"
msgstr "" msgstr "Комментарий"
msgid "Destination host" msgid "Destination host"
msgstr "Хост назначения" msgstr "Хост назначения"
msgid "Download speed (kbit/s)" msgid "Download speed (kbit/s)"
msgstr "Скорость загрузки (кбит/с)" msgstr "Скорость получения<br />данных (кбит/с)"
msgid "Enable" msgid "Enable"
msgstr "Включить" msgstr "Включить"
@ -58,23 +58,24 @@ msgid "Quality of Service"
msgstr "Качество обслуживания (QoS)" msgstr "Качество обслуживания (QoS)"
msgid "Service" msgid "Service"
msgstr "Служба" msgstr ""
msgid "Source host" msgid "Source host"
msgstr "Хост источника" msgstr "Хост источника"
msgid "Target" msgid "Target"
msgstr "Цель" msgstr "Назначение"
msgid "Upload speed (kbit/s)" msgid "Upload speed (kbit/s)"
msgstr "Скорость отдачи (кбит/с)" msgstr "орость передачи<br />данных (кбит/с)"
msgid "" msgid ""
"With <abbr title=\"Quality of Service\">QoS</abbr> you can prioritize " "With <abbr title=\"Quality of Service\">QoS</abbr> you can prioritize "
"network traffic selected by addresses, ports or services." "network traffic selected by addresses, ports or services."
msgstr "" msgstr ""
"Используя <abbr title=\"Quality of Service\">QoS</abbr>, вы можете " "Используя <abbr title=\"Качество обслуживания\">QoS</abbr>, вы можете "
"приоритезаровать сетевой трафик по адресам, портам и сервисам." "уделять первостепенное внимание сетевому трафику по адресам, портам и "
"сервисам."
msgid "all" msgid "all"
msgstr "все" msgstr "все"
@ -89,16 +90,7 @@ msgid "low"
msgstr "низкий" msgstr "низкий"
msgid "normal" msgid "normal"
msgstr "обычный" msgstr "нормально"
msgid "priority" msgid "priority"
msgstr "приоритетный" msgstr "приоритетный"
#~ msgid "Downlink"
#~ msgstr "Нисходящий канал"
#~ msgid "Internet Connection"
#~ msgstr "Интернет-соединение"
#~ msgid "Uplink"
#~ msgstr "Восходящий канал"

View file

@ -0,0 +1,41 @@
#
# Copyright (C) 2008-2015 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-radicale
# Version == major.minor.patch
# increase "minor" on new functionality and "patch" on patches/optimization
PKG_VERSION:=1.0.1
# Release == build
# increase on changes of translation files
PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Radicale CardDAV/CalDAV
LUCI_DEPENDS:=+luci-mod-admin-full
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
# shown in make menuconfig <Help>
help
$(LUCI_TITLE)
.
!!! Package "radicale-py2" or "radicale-py3" needs to be !!!
!!! installed sepearatly. There is no buildin dependency set !!!
.
Version: $(PKG_VERSION)-$(PKG_RELEASE)
$(PKG_MAINTAINER)
endef
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,195 @@
-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed under the Apache License, Version 2.0
module("luci.controller.radicale", package.seeall)
local NX = require("nixio")
local NXFS = require("nixio.fs")
local DISP = require "luci.dispatcher"
local HTTP = require("luci.http")
local I18N = require("luci.i18n") -- not globally avalible here
local UTIL = require("luci.util")
local SYS = require("luci.sys")
function index()
entry( {"admin", "services", "radicale"}, alias("admin", "services", "radicale", "edit"), _("CalDAV/CardDAV"), 58)
entry( {"admin", "services", "radicale", "edit"}, cbi("radicale") ).leaf = true
entry( {"admin", "services", "radicale", "logview"}, call("_logread") ).leaf = true
entry( {"admin", "services", "radicale", "startstop"}, call("_startstop") ).leaf = true
entry( {"admin", "services", "radicale", "status"}, call("_status") ).leaf = true
end
-- called by XHR.get from detail_logview.htm
function _logread()
-- read application settings
local uci = UCI.cursor()
local logfile = uci:get("radicale", "radicale", "logfile") or "/var/log/radicale"
uci:unload("radicale")
local ldata=NXFS.readfile(logfile)
if not ldata or #ldata == 0 then
ldata="_nodata_"
end
HTTP.write(ldata)
end
-- called by XHR.get from detail_startstop.htm
function _startstop()
local pid = get_pid()
if pid > 0 then
SYS.call("/etc/init.d/radicale stop")
NX.nanosleep(1) -- sleep a second
if NX.kill(pid, 0) then -- still running
NX.kill(pid, 9) -- send SIGKILL
end
pid = 0
else
SYS.call("/etc/init.d/radicale start")
NX.nanosleep(1) -- sleep a second
pid = get_pid()
if pid > 0 and not NX.kill(pid, 0) then
pid = 0 -- process did not start
end
end
HTTP.write(tostring(pid)) -- HTTP needs string not number
end
-- called by XHR.poll from detail_startstop.htm
function _status()
local pid = get_pid()
HTTP.write(tostring(pid)) -- HTTP needs string not number
end
-- Application / Service specific information functions ########################
function luci_app_name()
return "luci-app-radicale"
end
function service_name()
return "radicale"
end
function service_required()
return "0.10-1"
end
function service_installed()
local v = ipkg_ver_installed("radicale-py2")
if not v or #v == 0 then v = ipkg_ver_installed("radicale-py3") end
if not v or #v == 0 then v = "0" end
return v
end
function service_ok()
return ipkg_ver_compare(service_installed(),">=",service_required())
end
function app_title_main()
return [[</a><a href="javascript:alert(']]
.. I18N.translate("Version Information")
.. [[\n\n]] .. luci_app_name()
.. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
.. (ipkg_ver_installed(luci_app_name()) == ""
and I18N.translate("NOT installed")
or ipkg_ver_installed(luci_app_name()) )
.. [[\n\n]] .. service_name() .. [[ ]] .. I18N.translate("required") .. [[:]]
.. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
.. service_required() .. [[ ]] .. I18N.translate("or higher")
.. [[\n\n]] .. service_name() .. [[ ]] .. I18N.translate("installed") .. [[:]]
.. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
.. (service_installed() == "0"
and I18N.translate("NOT installed")
or service_installed())
.. [[\n\n]]
.. [[')">]]
.. I18N.translate("Radicale CalDAV/CardDAV Server")
end
function app_title_back()
return [[</a><a href="]]
.. DISP.build_url("admin", "services", "radicale")
.. [[">]]
.. I18N.translate("Radicale CalDAV/CardDAV Server")
end
function app_description()
return I18N.translate("The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.") .. [[<br />]]
.. I18N.translate("Calendars and address books are available for both local and remote access, possibly limited through authentication policies.") .. [[<br />]]
.. I18N.translate("They can be viewed and edited by calendar and contact clients on mobile phones or computers.")
end
-- other multiused functions ###################################################
--return pid of running process
function get_pid()
return tonumber(SYS.exec([[ps | grep "[p]ython.*[r]adicale" 2>/dev/null | awk '{print $1}']])) or 0
end
-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
function ipkg_ver_compare(ver1, comp, ver2)
if not ver1 or not ver2
or not comp or not (#comp > 0) then return nil end
-- correct compare string
if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<="
elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">="
elseif comp == "=" or comp == "==" then comp = "=="
elseif comp == "<<" then comp = "<"
elseif comp == ">>" then comp = ">"
else return nil end
local av1 = UTIL.split(ver1, "[%.%-]", nil, true)
local av2 = UTIL.split(ver2, "[%.%-]", nil, true)
for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
local s1 = av1[i] or ""
local s2 = av2[i] or ""
-- first "not equal" found return true
if comp == "~=" and (s1 ~= s2) then return true end
-- first "lower" found return true
if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
-- first "greater" found return true
if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
-- not equal then return false
if (s1 ~= s2) then return false end
end
-- all equal and not compare greater or lower then true
return not (comp == "<" or comp == ">")
end
-- read version information for given package if installed
function ipkg_ver_installed(pkg)
local version = ""
local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r")
if control then
local ln
repeat
ln = control:read("*l")
if ln and ln:match("^Version: ") then
version = ln:gsub("^Version: ", "")
break
end
until not ln
control:close()
end
return version
end
-- replacement of build-in Flag.parse of cbi.lua
-- modified to mark section as changed if value changes
-- current parse did not do this, but it is done AbstaractValue.parse()
function flag_parse(self, section)
local fexists = self.map:formvalue(
luci.cbi.FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option)
if fexists then
local fvalue = self:formvalue(section) and self.enabled or self.disabled
local cvalue = self:cfgvalue(section)
if fvalue ~= self.default or (not self.optional and not self.rmempty) then
self:write(section, fvalue)
else
self:remove(section)
end
if (fvalue ~= cvalue) then self.section.changed = true end
else
self:remove(section)
self.section.changed = true
end
end

View file

@ -0,0 +1,748 @@
-- Copyright 2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed under the Apache License, Version 2.0
local NXFS = require("nixio.fs")
local DISP = require("luci.dispatcher")
local DTYP = require("luci.cbi.datatypes")
local HTTP = require("luci.http")
local UTIL = require("luci.util")
local UCI = require("luci.model.uci")
local SYS = require("luci.sys")
local TOOLS = require("luci.controller.radicale") -- this application's controller and multiused functions
-- #################################################################################################
-- takeover arguments if any -- ################################################
-- then show/edit selected file
if arg[1] then
local argument = arg[1]
local filename = ""
-- SimpleForm ------------------------------------------------
local ft = SimpleForm("_text")
ft.title = TOOLS.app_title_back()
ft.description = TOOLS.app_description()
ft.redirect = DISP.build_url("admin", "services", "radicale") .. "#cbi-radicale-" .. argument
if argument == "logger" then
ft.reset = false
ft.submit = translate("Reload")
local uci = UCI.cursor()
filename = uci:get("radicale", "logger", "file_path") or "/var/log/radicale"
uci:unload("radicale")
filename = filename .. "/radicale"
elseif argument == "auth" then
ft.submit = translate("Save")
filename = "/etc/radicale/users"
elseif argument == "rights" then
ft.submit = translate("Save")
filename = "/etc/radicale/rights"
else
error("Invalid argument given as section")
end
if argument ~= "logger" and not NXFS.access(filename) then
NXFS.writefile(filename, "")
end
-- SimpleSection ---------------------------------------------
local fs = ft:section(SimpleSection)
if argument == "logger" then
fs.title = translate("Log-file Viewer")
fs.description = translate("Please press [Reload] button below to reread the file.")
elseif argument == "auth" then
fs.title = translate("Authentication")
fs.description = translate("Place here the 'user:password' pairs for your users which should have access to Radicale.")
.. [[<br /><strong>]]
.. translate("Keep in mind to use the correct hashing algorithm !")
.. [[</strong>]]
else -- rights
fs.title = translate("Rights")
fs.description = translate("Authentication login is matched against the 'user' key, "
.. "and collection's path is matched against the 'collection' key.") .. " "
.. translate("You can use Python's ConfigParser interpolation values %(login)s and %(path)s.") .. " "
.. translate("You can also get groups from the user regex in the collection with {0}, {1}, etc.")
.. [[<br />]]
.. translate("For example, for the 'user' key, '.+' means 'authenticated user'" .. " "
.. "and '.*' means 'anybody' (including anonymous users).")
.. [[<br />]]
.. translate("Section names are only used for naming the rule.")
.. [[<br />]]
.. translate("Leading or ending slashes are trimmed from collection's path.")
end
-- TextValue -------------------------------------------------
local tt = fs:option(TextValue, "_textvalue")
tt.rmempty = true
if argument == "logger" then
tt.readonly = true
tt.rows = 30
function tt.write()
HTTP.redirect(DISP.build_url("admin", "services", "radicale", "edit", argument))
end
else
tt.rows = 15
function tt.write(self, section, value)
if not value then value = "" end
NXFS.writefile(filename, value:gsub("\r\n", "\n"))
return true --HTTP.redirect(DISP.build_url("admin", "services", "radicale", "edit") .. "#cbi-radicale-" .. argument)
end
end
function tt.cfgvalue()
return NXFS.readfile(filename) or
string.format(translate("File '%s' not found !"), filename)
end
return ft
end
-- #################################################################################################
-- Error handling if not installed or wrong version -- #########################
if not TOOLS.service_ok() then
local f = SimpleForm("_no_config")
f.title = TOOLS.app_title_main()
f.description = TOOLS.app_description()
f.submit = false
f.reset = false
local s = f:section(SimpleSection)
local v = s:option(DummyValue, "_update_needed")
v.rawhtml = true
if TOOLS.service_installed() == "0" then
v.value = [[<h3><strong><br /><font color="red">&nbsp;&nbsp;&nbsp;&nbsp;]]
.. translate("Software package '" .. TOOLS.service_name() .. "' is not installed.")
.. [[</font><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]
.. translate("required") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_required()
.. [[<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;]]
.. [[<a href="]] .. DISP.build_url("admin", "system", "packages") ..[[">]]
.. translate("Please install current version !")
.. [[</a><br />&nbsp;</strong></h3>]]
else
v.value = [[<h3><strong><br /><font color="red">&nbsp;&nbsp;&nbsp;&nbsp;]]
.. translate("Software package '" .. TOOLS.service_name() .. "' is outdated.")
.. [[</font><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]
.. translate("installed") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_installed()
.. [[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]
.. translate("required") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_required()
.. [[<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;]]
.. [[<a href="]] .. DISP.build_url("admin", "system", "packages") ..[[">]]
.. translate("Please update to current version !")
.. [[</a><br />&nbsp;</strong></h3>]]
end
return f
end
-- #################################################################################################
-- Error handling if no config, create an empty one -- #########################
if not NXFS.access("/etc/config/radicale") then
NXFS.writefile("/etc/config/radicale", "")
end
-- cbi-map -- ##################################################################
local m = Map("radicale")
m.title = TOOLS.app_title_main()
m.description = TOOLS.app_description()
function m.commit_handler(self)
if self.changed then -- changes ?
os.execute("/etc/init.d/radicale reload &") -- reload configuration
end
end
-- cbi-section "System" -- #####################################################
local sys = m:section( NamedSection, "_system" )
sys.title = translate("System")
sys.description = nil
function sys.cfgvalue(self, section)
return "_dummysection"
end
-- start/stop button -----------------------------------------------------------
local btn = sys:option(DummyValue, "_startstop")
btn.template = "radicale/btn_startstop"
btn.inputstyle = nil
btn.rmempty = true
btn.title = translate("Start / Stop")
btn.description = translate("Start/Stop Radicale server")
function btn.cfgvalue(self, section)
local pid = TOOLS.get_pid(true)
if pid > 0 then
btn.inputtitle = "PID: " .. pid
btn.inputstyle = "reset"
btn.disabled = false
else
btn.inputtitle = translate("Start")
btn.inputstyle = "apply"
btn.disabled = false
end
return true
end
-- enabled ---------------------------------------------------------------------
local ena = sys:option(Flag, "_enabled")
ena.title = translate("Auto-start")
ena.description = translate("Enable/Disable auto-start of Radicale on system start-up and interface events")
ena.orientation = "horizontal" -- put description under the checkbox
ena.rmempty = false -- we need write
function ena.cfgvalue(self, section)
return (SYS.init.enabled("radicale")) and "1" or "0"
end
function ena.write(self, section, value)
if value == "1" then
return SYS.init.enable("radicale")
else
return SYS.init.disable("radicale")
end
end
-- cbi-section "Server" -- #####################################################
local srv = m:section( NamedSection, "server", "setting" )
srv.title = translate("Server")
srv.description = nil
function srv.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- hosts -----------------------------------------------------------------------
local sh = srv:option( DynamicList, "hosts" )
sh.title = translate("Address:Port")
sh.description = translate("'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on")
.. [[<br /><strong>]]
.. translate("Port numbers below 1024 (Privileged ports) are not supported")
.. [[</strong>]]
sh.placeholder = "0.0.0.0:5232"
sh.rmempty = true
-- realm -----------------------------------------------------------------------
local alm = srv:option( Value, "realm" )
alm.title = translate("Logon message")
alm.description = translate("Message displayed in the client when a password is needed.")
alm.default = "Radicale - Password Required"
alm.rmempty = false
function alm.parse(self, section)
AbstractValue.parse(self, section, "true") -- otherwise unspecific validate error
end
function alm.validate(self, value)
if value then
return value
else
return self.default
end
end
function alm.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- ssl -------------------------------------------------------------------------
local ssl = srv:option( Flag, "ssl" )
ssl.title = translate("Enable HTTPS")
ssl.description = nil
ssl.rmempty = false
function ssl.parse(self, section)
TOOLS.flag_parse(self, section)
end
function ssl.write(self, section, value)
if value == "0" then -- delete all if not https enabled
self.map:del(section, "protocol") -- protocol
self.map:del(section, "certificate") -- certificate
self.map:del(section, "key") -- private key
self.map:del(section, "ciphers") -- ciphers
return self.map:del(section, self.option)
else
return self.map:set(section, self.option, value)
end
end
-- protocol --------------------------------------------------------------------
local prt = srv:option( ListValue, "protocol" )
prt.title = translate("SSL Protocol")
prt.description = translate("'AUTO' selects the highest protocol version that client and server support.")
prt.widget = "select"
prt.default = "PROTOCOL_SSLv23"
prt:depends ("ssl", "1")
prt:value ("PROTOCOL_SSLv23", translate("AUTO"))
prt:value ("PROTOCOL_SSLv2", "SSL v2")
prt:value ("PROTOCOL_SSLv3", "SSL v3")
prt:value ("PROTOCOL_TLSv1", "TLS v1")
prt:value ("PROTOCOL_TLSv1_1", "TLS v1.1")
prt:value ("PROTOCOL_TLSv1_2", "TLS v1.2")
-- certificate -----------------------------------------------------------------
local crt = srv:option( Value, "certificate" )
crt.title = translate("Certificate file")
crt.description = translate("Full path and file name of certificate")
crt.placeholder = "/etc/radicale/ssl/server.crt"
crt.rmempty = false -- force validate/write
crt:depends ("ssl", "1")
function crt.parse(self, section)
local _ssl = ssl:formvalue(section) or "0"
local novld = (_ssl == "0")
AbstractValue.parse(self, section, novld) -- otherwise unspecific validate error
end
function crt.validate(self, value)
local _ssl = ssl:formvalue(srv.section) or "0"
if _ssl == "0" then
return "" -- ignore if not https enabled
end
if value then -- otherwise errors in datatype check
if DTYP.file(value) then
return value
else
return nil, self.title .. " - " .. translate("File not found !")
end
else
return nil, self.title .. " - " .. translate("Path/File required !")
end
end
function crt.write(self, section, value)
if not value or #value == 0 then
return self.map:del(section, self.option)
else
return self.map:set(section, self.option, value)
end
end
-- key -------------------------------------------------------------------------
local key = srv:option( Value, "key" )
key.title = translate("Private key file")
key.description = translate("Full path and file name of private key")
key.placeholder = "/etc/radicale/ssl/server.key"
key.rmempty = false -- force validate/write
key:depends ("ssl", "1")
function key.parse(self, section)
local _ssl = ssl:formvalue(section) or "0"
local novld = (_ssl == "0")
AbstractValue.parse(self, section, novld) -- otherwise unspecific validate error
end
function key.validate(self, value)
local _ssl = ssl:formvalue(srv.section) or "0"
if _ssl == "0" then
return "" -- ignore if not https enabled
end
if value then -- otherwise errors in datatype check
if DTYP.file(value) then
return value
else
return nil, self.title .. " - " .. translate("File not found !")
end
else
return nil, self.title .. " - " .. translate("Path/File required !")
end
end
function key.write(self, section, value)
if not value or #value == 0 then
return self.map:del(section, self.option)
else
return self.map:set(section, self.option, value)
end
end
-- ciphers ---------------------------------------------------------------------
--local cip = srv:option( Value, "ciphers" )
--cip.title = translate("Ciphers")
--cip.description = translate("OPTIONAL: See python's ssl module for available ciphers")
--cip.rmempty = true
--cip:depends ("ssl", "1")
-- cbi-section "Authentication" -- #############################################
local aut = m:section( NamedSection, "auth", "setting" )
aut.title = translate("Authentication")
aut.description = translate("Authentication method to allow access to Radicale server.")
function aut.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- type -----------------------------------------------------------------------
local aty = aut:option( ListValue, "type" )
aty.title = translate("Authentication method")
aty.description = nil
aty.widget = "select"
aty.default = "None"
aty:value ("None", translate("None"))
aty:value ("htpasswd", translate("htpasswd file"))
--aty:value ("IMAP", "IMAP") -- The IMAP authentication module relies on the imaplib module.
--aty:value ("LDAP", "LDAP") -- The LDAP authentication module relies on the python-ldap module.
--aty:value ("PAM", "PAM") -- The PAM authentication module relies on the python-pam module.
--aty:value ("courier", "courier")
--aty:value ("HTTP", "HTTP") -- The HTTP authentication module relies on the requests module
--aty:value ("remote_user", "remote_user")
--aty:value ("custom", translate("custom"))
function aty.write(self, section, value)
if value ~= "htpasswd" then
self.map:del(section, "htpasswd_encryption")
elseif value ~= "IMAP" then
self.map:del(section, "imap_hostname")
self.map:del(section, "imap_port")
self.map:del(section, "imap_ssl")
end
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- htpasswd_encryption ---------------------------------------------------------
local hte = aut:option( ListValue, "htpasswd_encryption" )
hte.title = translate("Encryption method")
hte.description = nil
hte.widget = "select"
hte.default = "crypt"
hte:depends ("type", "htpasswd")
hte:value ("crypt", translate("crypt"))
hte:value ("plain", translate("plain"))
hte:value ("sha1", translate("SHA-1"))
hte:value ("ssha", translate("salted SHA-1"))
-- htpasswd_file (dummy) -------------------------------------------------------
local htf = aut:option( DummyValue, "_htf" )
htf.title = translate("htpasswd file")
htf.description = [[<strong>]]
.. translate("Read only!")
.. [[</strong> ]]
.. translate("Radicale uses '/etc/radicale/users' as htpasswd file.")
.. [[<br /><a href="]]
.. DISP.build_url("admin", "services", "radicale", "edit") .. [[/auth]]
.. [[">]]
.. translate("To edit the file follow this link!")
.. [[</a>]]
htf.keylist = {} -- required by template
htf.vallist = {} -- required by template
htf.template = "radicale/ro_value"
htf.readonly = true
htf:depends ("type", "htpasswd")
function htf.cfgvalue()
return "/etc/radicale/users"
end
-- cbi-section "Rights" -- #####################################################
local rig = m:section( NamedSection, "rights", "setting" )
rig.title = translate("Rights")
rig.description = translate("Control the access to data collections.")
function rig.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- type -----------------------------------------------------------------------
local rty = rig:option( ListValue, "type" )
rty.title = translate("Rights backend")
rty.description = nil
rty.widget = "select"
rty.default = "None"
rty:value ("None", translate("Full access for everybody (including anonymous)"))
rty:value ("authenticated", translate("Full access for authenticated Users") )
rty:value ("owner_only", translate("Full access for Owner only") )
rty:value ("owner_write", translate("Owner allow write, authenticated users allow read") )
rty:value ("from_file", translate("Rights are based on a regexp-based file") )
--rty:value ("custom", "Custom handler")
function rty.write(self, section, value)
if value ~= "custom" then
self.map:del(section, "custom_handler")
end
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- from_file (dummy) -----------------------------------------------------------
local rtf = rig:option( DummyValue, "_rtf" )
rtf.title = translate("RegExp file")
rtf.description = [[<strong>]]
.. translate("Read only!")
.. [[</strong> ]]
.. translate("Radicale uses '/etc/radicale/rights' as regexp-based file.")
.. [[<br /><a href="]]
.. DISP.build_url("admin", "services", "radicale", "edit") .. [[/rights]]
.. [[">]]
.. translate("To edit the file follow this link!")
.. [[</a>]]
rtf.keylist = {} -- required by template
rtf.vallist = {} -- required by template
rtf.template = "radicale/ro_value"
rtf.readonly = true
rtf:depends ("type", "from_file")
function rtf.cfgvalue()
return "/etc/radicale/rights"
end
-- cbi-section "Storage" -- ####################################################
local sto = m:section( NamedSection, "storage", "setting" )
sto.title = translate("Storage")
sto.description = nil
function sto.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- type -----------------------------------------------------------------------
local sty = sto:option( ListValue, "type" )
sty.title = translate("Storage backend")
sty.description = translate("WARNING: Only 'File-system' is documented and tested by Radicale development")
sty.widget = "select"
sty.default = "filesystem"
sty:value ("filesystem", translate("File-system"))
--sty:value ("multifilesystem", translate("") )
--sty:value ("database", translate("Database") )
--sty:value ("custom", translate("Custom") )
function sty.write(self, section, value)
if value ~= "filesystem" then
self.map:del(section, "filesystem_folder")
end
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
--filesystem_folder ------------------------------------------------------------
local sfi = sto:option( Value, "filesystem_folder" )
sfi.title = translate("Directory")
sfi.description = nil
sfi.default = "/srv/radicale"
sfi.rmempty = false -- force validate/write
sfi:depends ("type", "filesystem")
function sfi.parse(self, section)
local _typ = sty:formvalue(sto.section) or ""
local novld = (_typ ~= "filesystem")
AbstractValue.parse(self, section, novld) -- otherwise unspecific validate error
end
function sfi.validate(self, value)
local _typ = sty:formvalue(sto.section) or ""
if _typ ~= "filesystem" then
return "" -- ignore if not htpasswd
end
if value then -- otherwise errors in datatype check
if DTYP.directory(value) then
return value
else
return nil, self.title .. " - " .. translate("Directory not exists/found !")
end
else
return nil, self.title .. " - " .. translate("Directory required !")
end
end
-- cbi-section "Logging" -- ####################################################
local log = m:section( NamedSection, "logger", "logging" )
log.title = translate("Logging")
log.description = nil
function log.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- console_level ---------------------------------------------------------------
local lco = log:option( ListValue, "console_level" )
lco.title = translate("Console Log level")
lco.description = nil
lco.widget = "select"
lco.default = "ERROR"
lco:value ("DEBUG", translate("Debug"))
lco:value ("INFO", translate("Info") )
lco:value ("WARNING", translate("Warning") )
lco:value ("ERROR", translate("Error") )
lco:value ("CRITICAL", translate("Critical") )
function lco.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- syslog_level ----------------------------------------------------------------
local lsl = log:option( ListValue, "syslog_level" )
lsl.title = translate("Syslog Log level")
lsl.description = nil
lsl.widget = "select"
lsl.default = "WARNING"
lsl:value ("DEBUG", translate("Debug"))
lsl:value ("INFO", translate("Info") )
lsl:value ("WARNING", translate("Warning") )
lsl:value ("ERROR", translate("Error") )
lsl:value ("CRITICAL", translate("Critical") )
function lsl.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- file_level ------------------------------------------------------------------
local lfi = log:option( ListValue, "file_level" )
lfi.title = translate("File Log level")
lfi.description = nil
lfi.widget = "select"
lfi.default = "INFO"
lfi:value ("DEBUG", translate("Debug"))
lfi:value ("INFO", translate("Info") )
lfi:value ("WARNING", translate("Warning") )
lfi:value ("ERROR", translate("Error") )
lfi:value ("CRITICAL", translate("Critical") )
function lfi.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- file_path -------------------------------------------------------------------
local lfp = log:option( Value, "file_path" )
lfp.title = translate("Log-file directory")
lfp.description = translate("Directory where the rotating log-files are stored")
.. [[<br /><a href="]]
.. DISP.build_url("admin", "services", "radicale", "edit") .. [[/logger]]
.. [[">]]
.. translate("To view latest log file follow this link!")
.. [[</a>]]
lfp.default = "/var/log/radicale"
function lfp.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- file_maxbytes ---------------------------------------------------------------
local lmb = log:option( Value, "file_maxbytes" )
lmb.title = translate("Log-file size")
lmb.description = translate("Maximum size of each rotation log-file.")
.. [[<br /><strong>]]
.. translate("Setting this parameter to '0' will disable rotation of log-file.")
.. [[</strong>]]
lmb.default = "8196"
lmb.rmempty = false
function lmb.validate(self, value)
if value then -- otherwise errors in datatype check
if DTYP.uinteger(value) then
return value
else
return nil, self.title .. " - " .. translate("Value is not an Integer >= 0 !")
end
else
return nil, self.title .. " - " .. translate("Value required ! Integer >= 0 !")
end
end
function lmb.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- file_backupcount ------------------------------------------------------------
local lbc = log:option( Value, "file_backupcount" )
lbc.title = translate("Log-backup Count")
lbc.description = translate("Number of backup files of log to create.")
.. [[<br /><strong>]]
.. translate("Setting this parameter to '0' will disable rotation of log-file.")
.. [[</strong>]]
lbc.default = "1"
lbc.rmempty = false
function lbc.validate(self, value)
if value then -- otherwise errors in datatype check
if DTYP.uinteger(value) then
return value
else
return nil, self.title .. " - " .. translate("Value is not an Integer >= 0 !")
end
else
return nil, self.title .. " - " .. translate("Value required ! Integer >= 0 !")
end
end
function lbc.write(self, section, value)
if value ~= self.default then
return self.map:set(section, self.option, value)
else
return self.map:del(section, self.option)
end
end
-- cbi-section "Encoding" -- ###################################################
local enc = m:section( NamedSection, "encoding", "setting" )
enc.title = translate("Encoding")
enc.description = translate("Change here the encoding Radicale will use instead of 'UTF-8' "
.. "for responses to the client and/or to store data inside collections.")
function enc.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- request ---------------------------------------------------------------------
local enr = enc:option( Value, "request" )
enr.title = translate("Response Encoding")
enr.description = translate("Encoding for responding requests.")
enr.default = "utf-8"
enr.optional = true
-- stock -----------------------------------------------------------------------
local ens = enc:option( Value, "stock" )
ens.title = translate("Storage Encoding")
ens.description = translate("Encoding for storing local collections.")
ens.default = "utf-8"
ens.optional = true
-- cbi-section "Headers" -- ####################################################
local hea = m:section( NamedSection, "headers", "setting" )
hea.title = translate("Additional HTTP headers")
hea.description = translate("Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources (e.g. fonts, JavaScript, etc.) "
.. "on a web page to be requested from another domain outside the domain from which the resource originated.")
function hea.cfgvalue(self, section)
if not self.map:get(section) then -- section might not exist
self.map:set(section, nil, self.sectiontype)
end
return self.map:get(section)
end
-- Access_Control_Allow_Origin -------------------------------------------------
local heo = hea:option( DynamicList, "Access_Control_Allow_Origin" )
heo.title = translate("Access-Control-Allow-Origin")
heo.description = nil
heo.default = "*"
heo.optional = true
-- Access_Control_Allow_Methods ------------------------------------------------
local hem = hea:option( DynamicList, "Access_Control_Allow_Methods" )
hem.title = translate("Access-Control-Allow-Methods")
hem.description = nil
hem.optional = true
-- Access_Control_Allow_Headers ------------------------------------------------
local heh = hea:option( DynamicList, "Access_Control_Allow_Headers" )
heh.title = translate("Access-Control-Allow-Headers")
heh.description = nil
heh.optional = true
-- Access_Control_Expose_Headers -----------------------------------------------
local hee = hea:option( DynamicList, "Access_Control_Expose_Headers" )
hee.title = translate("Access-Control-Expose-Headers")
hee.description = nil
hee.optional = true
return m

View file

@ -0,0 +1,49 @@
<!-- ++ BEGIN ++ Radicale ++ btn_startstop.htm ++ -->
<script type="text/javascript">//<![CDATA[
// show XHR.poll/XHR.get response on button
function _data2elements(x) {
var btn = document.getElementById("cbid.radicale._system._startstop");
if ( ! btn ) { return; } // security check
if (x.responseText == "0") {
btn.value = "<%:Start%>";
btn.className = "cbi-button cbi-button-apply";
btn.disabled = false;
} else {
btn.value = "PID: " + x.responseText;
btn.className = "cbi-button cbi-button-reset";
btn.disabled = false;
}
}
// event handler for start/stop button
function onclick_startstop(id) {
// do start/stop
var btnXHR = new XHR();
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "radicale", "startstop")%>', null,
function(x) { _data2elements(x); }
);
}
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "radicale", "status")%>', null,
function(x, data) { _data2elements(x); }
);
//]]></script>
<%+cbi/valueheader%>
<% if self:cfgvalue(section) ~= false then
-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
<!-- type="button" onclick="..." enable standard onclick functionalty -->
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
%> />
<% end %>
<%+cbi/valuefooter%>
<!-- ++ END ++ Radicale ++ btn_startstop.htm ++ -->

View file

@ -0,0 +1,35 @@
<%+cbi/valueheader%>
<input type="<%=self.password and 'password" class="cbi-input-password' or 'text" class="cbi-input-text' %>" onchange="cbi_d_update(this.id)"<%=
attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) ..
ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder") .. ifattr(self.readonly, "readonly")
%> />
<% if self.password then %><img src="<%=resource%>/cbi/reload.gif" style="vertical-align:middle" title="<%:Reveal/hide password%>" onclick="var e = document.getElementById('<%=cbid%>'); e.type = (e.type=='password') ? 'text' : 'password';" /><% end %>
<% if #self.keylist > 0 or self.datatype then -%>
<script type="text/javascript">//<![CDATA[
<% if #self.keylist > 0 then -%>
cbi_combobox_init('<%=cbid%>', {
<%-
for i, k in ipairs(self.keylist) do
-%>
<%-=string.format("%q", k) .. ":" .. string.format("%q", self.vallist[i])-%>
<%-if i<#self.keylist then-%>,<%-end-%>
<%-
end
-%>
}, '<%- if not self.rmempty and not self.optional then -%>
<%-: -- Please choose -- -%>
<%- elseif self.placeholder then -%>
<%-= pcdata(self.placeholder) -%>
<%- end -%>', '
<%- if self.combobox_manual then -%>
<%-=self.combobox_manual-%>
<%- else -%>
<%-: -- custom -- -%>
<%- end -%>');
<%- end %>
<% if self.datatype then -%>
cbi_validate_field('<%=cbid%>', <%=tostring((self.optional or self.rmempty) == true)%>, '<%=self.datatype:gsub("'", "\\'")%>');
<%- end %>
//]]></script>
<% end -%>
<%+cbi/valuefooter%>

View file

@ -0,0 +1,435 @@
msgid ""
msgstr ""
"Project-Id-Version: luci-app-radicale\n"
"POT-Creation-Date: 2015-05-02 19:32+0100\n"
"PO-Revision-Date: 2015-05-02 22:43+0100\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.7.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
msgid ""
"'AUTO' selects the highest protocol version that client and server support."
msgstr ""
"'AUTO' wählt die höchste Protokollversion, die Client und Server "
"unterstützen."
msgid ""
"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
msgstr ""
"'Hostname:Port' oder 'IPv4:Port' oder '[IPv6]:Port' die Radicale überwachen "
"soll."
msgid "-- Please choose --"
msgstr "-- Bitte auswählen --"
msgid "-- custom --"
msgstr "-- benutzerdefiniert --"
msgid "AUTO"
msgstr "AUTO"
msgid "Access-Control-Allow-Headers"
msgstr "Access-Control-Allow-Headers"
msgid "Access-Control-Allow-Methods"
msgstr "Access-Control-Allow-Methods"
msgid "Access-Control-Allow-Origin"
msgstr "Access-Control-Allow-Origin"
msgid "Access-Control-Expose-Headers"
msgstr "Access-Control-Expose-Headers"
msgid "Additional HTTP headers"
msgstr "Zusätzliche HTTP headers"
msgid "Address:Port"
msgstr "Adresse:Port"
msgid "Authentication"
msgstr "Authentifizierung"
msgid ""
"Authentication login is matched against the 'user' key, and collection's "
"path is matched against the 'collection' key."
msgstr ""
"Der Login wird gegen die 'user' Schlüssel und die Pfadsammlung gegen die "
"'collection' Schlüssel abgestimmt."
msgid "Authentication method"
msgstr "Authentifizierungsmethode"
msgid "Authentication method to allow access to Radicale server."
msgstr ""
"Authentifizierungsmethode um den Zugang zum Radicale Server zu kontrollieren."
msgid "Auto-start"
msgstr "Autostart"
msgid "CalDAV/CardDAV"
msgstr "CalDAV/CardDAV"
msgid ""
"Calendars and address books are available for both local and remote access, "
"possibly limited through authentication policies."
msgstr ""
"Auf Kalender und Adressbücher kann sowohl Lokal als auch Remote zugegriffen "
"werden, soweit nicht durch Authentifizierungsrichtlinien begrenzt."
msgid "Certificate file"
msgstr "Zertifikat Datei"
msgid ""
"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
"to the client and/or to store data inside collections."
msgstr ""
"Ändern Sie hier die Zeichenkodierung die Radicale anstelle von \"UTF-8\" für "
"Antworten an den Client und/oder zum Speichern von Daten in einer Sammlung "
"verwendet."
msgid "Ciphers"
msgstr "Chiffren"
msgid "Console Log level"
msgstr "Konsole Protokoll Level"
msgid "Control the access to data collections."
msgstr "Kontrolliert den Zugriff auf die Daten Sammlungen."
msgid "Critical"
msgstr "Kritisch"
msgid ""
"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
"another domain outside the domain from which the resource originated."
msgstr ""
"Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, um Webbrowsern "
"oder auch anderen Webclients Cross-Origin-Requests zu ermöglichen."
msgid "Custom"
msgstr "Benutzerdefiniert"
msgid "Database"
msgstr "Datenbank"
msgid "Debug"
msgstr "Debug"
msgid "Directory"
msgstr "Verzeichnis"
msgid "Directory not exists/found !"
msgstr "Verzeichnis nicht gefunden / existiert nicht !"
msgid "Directory required !"
msgstr "Verzeichnis benötigt !"
msgid "Directory where the rotating log-files are stored"
msgstr ""
"Verzeichnis in dem die rollierenden Protokolldateien gespeichert werden"
msgid "Enable HTTPS"
msgstr "Verwende HTTPS"
msgid ""
"Enable/Disable auto-start of Radicale on system start-up and interface events"
msgstr ""
"Aktiviert/Deaktiviert den Autostart von Radicale beim Systemstart und bei "
"Schnittstellenereignissen."
msgid "Encoding"
msgstr "Zeichenkodierung"
msgid "Encoding for responding requests."
msgstr "Zeichenkodierung für die Beantwortung von Anfragen."
msgid "Encoding for storing local collections."
msgstr "Zeichenkodierung für die Speicherung von lokalen Sammlungen."
msgid "Encryption method"
msgstr "Verschlüsselungsmethode"
msgid "Error"
msgstr "Fehler"
msgid "File '%s' not found !"
msgstr "Datei '%s' wurde nicht gefunden!"
msgid "File Log level"
msgstr "Datei Protokoll Level"
msgid "File not found !"
msgstr "Datei nicht gefunden !"
msgid "File-system"
msgstr "Dateisystem"
msgid ""
"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
"means 'anybody' (including anonymous users)."
msgstr ""
"Beispiel für den 'user' Schlüssel: '. +' bedeutet 'authentifizierten "
"Benutzer' und '. *' bedeutet 'jeder' (einschließlich anonyme Benutzer)."
msgid "Full access for Owner only"
msgstr "Voller Zugriff nur für den Besitzer"
msgid "Full access for authenticated Users"
msgstr "Voller Zugriff für authentifizierte Benutzer"
msgid "Full access for everybody (including anonymous)"
msgstr "Vollzugriff für jedermann (auch anonyme)"
msgid "Full path and file name of certificate"
msgstr "Vollständiger Pfad und Dateiname der Zertifikat Datei"
msgid "Full path and file name of private key"
msgstr "Vollständiger Pfad und Dateiname der Privaten Schlüsseldatei"
msgid "Info"
msgstr "Informationen"
msgid "Keep in mind to use the correct hashing algorithm !"
msgstr "Denken Sie daran, den korrekten Hash-Algorithmus zu verwenden!"
msgid "Leading or ending slashes are trimmed from collection's path."
msgstr ""
"Schrägstriche ('/') am Anfang und Ende der Pfadangabe der Sammlung werden "
"von der Pfadangabe abgeschnitten."
msgid "Log-backup Count"
msgstr "Protokoll Backup Zähler"
msgid "Log-file Viewer"
msgstr "Protokolldatei Betrachter"
msgid "Log-file directory"
msgstr "Protokoll-Datei Verzeichnis"
msgid "Log-file size"
msgstr "Protokoll Dateigröße"
msgid "Logging"
msgstr "Protokollierung"
msgid "Logon message"
msgstr "Anmelde-Hinweis"
msgid "Maximum size of each rotation log-file."
msgstr "Maximale Größe jeder rollierenden Protokoll-Datei."
msgid "Message displayed in the client when a password is needed."
msgstr "Meldung im Client, wenn ein Kennwort erforderlich ist."
msgid "NOT installed"
msgstr "nicht installiert"
msgid "None"
msgstr "Keine"
msgid "Number of backup files of log to create."
msgstr "Anzahl der Protokoll Backup Dateien, die angelegt werden."
msgid "OPTIONAL: See python's ssl module for available ciphers"
msgstr "OPTIONAL: Siehe Python SSL-Modul Dokumentation"
msgid "Owner allow write, authenticated users allow read"
msgstr ""
"Besitzer haben Schreibrechte, Authentifizierten Benutzer dürfen nur lesen."
msgid "Path/File required !"
msgstr "Pfad/Datei erforderlich!"
msgid ""
"Place here the 'user:password' pairs for your users which should have access "
"to Radicale."
msgstr ""
"Speichern Sie hier die 'user: password' Paare für die Benutzer, die Zugriff "
"auf Radicale haben sollte."
msgid "Please install current version !"
msgstr "Installieren Sie bitte die aktuelle Version!"
msgid "Please press [Reload] button below to reread the file."
msgstr ""
"Bitte drücken Sie die [Neu laden]-Schaltfläche unten, um die Datei neu "
"einzulesen."
msgid "Please update to current version !"
msgstr "Aktualisieren Sie bitte auf die aktuelle Version!"
msgid "Port numbers below 1024 (Privileged ports) are not supported"
msgstr "Port Nummern unter 1024 (Privileged Ports) werden nicht unterstützt."
msgid "Private key file"
msgstr "Private Schlüssel Datei"
msgid "Radicale CalDAV/CardDAV Server"
msgstr "Radicale CalDAV/CardDAV Dienst"
msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
msgstr "Radicale verwendet '/etc/radicale/rights' als RegExp-basierte Datei."
msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
msgstr "Radicale verwendet 'etc/radicale/users' als htpasswd Datei."
msgid "Read only!"
msgstr "Nur lesbar!"
msgid "RegExp file"
msgstr "RegExp Datei"
msgid "Reload"
msgstr "Neu laden"
msgid "Response Encoding"
msgstr "Antwort Zeichenkodierung"
msgid "Reveal/hide password"
msgstr "Passwort zeigen/verstecken"
msgid "Rights"
msgstr "Zugriffsrechte"
msgid "Rights are based on a regexp-based file"
msgstr "Zugriff basiert auf RegExp-basierter Datei."
msgid "Rights backend"
msgstr "Zugagsverwaltung"
msgid "SHA-1"
msgstr "SHA-1"
msgid "SSL Protocol"
msgstr "SSL Protokol"
msgid "Save"
msgstr "Speichern"
msgid "Section names are only used for naming the rule."
msgstr "Abschnittsnamen werden nur für die Benennung der Regel verwendet."
msgid "Server"
msgstr "Server"
msgid "Setting this parameter to '0' will disable rotation of log-file."
msgstr ""
"Wenn dieser Parameter auf '0' gesetzt wird, wird die Protokolldatei nicht "
"mehr rolliert!"
msgid "Software package '"
msgstr "Software Packet '"
msgid "Start"
msgstr "Start"
msgid "Start / Stop"
msgstr "Start / Stopp"
msgid "Start/Stop Radicale server"
msgstr "Start / Stopp Radicale Dienst"
msgid "Storage"
msgstr "Datenspeicher"
msgid "Storage Encoding"
msgstr "Datenspeicher Kodierung"
msgid "Storage backend"
msgstr "Datenspeicher Verwaltung"
msgid "Syslog Log level"
msgstr "Systemlog Level"
msgid "System"
msgstr "System"
msgid ""
"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
"server solution."
msgstr ""
"Das Raidcale Projekt bietet eine vollständige CalDAV (Kalender) und CardDAV "
"(Adressbuch) Server Lösung."
msgid ""
"They can be viewed and edited by calendar and contact clients on mobile "
"phones or computers."
msgstr ""
"Diese können von Kalender- und Adressbuch-Anwendungen auf mobilen Endgeräten "
"und Computern angezeigt und bearbeitet werden."
msgid "To edit the file follow this link!"
msgstr "Um die Datei zu bearbeiten, folgend Sie dieser Verknüpfung!"
msgid "To view latest log file follow this link!"
msgstr ""
"Zur Anzeige der letzten Protokolldatei, folgen Sie dieser Verknüpfung !"
msgid "Value is not an Integer >= 0 !"
msgstr "Eingabe ist keine Ganzzahl >= 0 !"
msgid "Value required ! Integer >= 0 !"
msgstr "Eingabe erforderlich ! Ganzzahl >= 0 !"
msgid "Version"
msgstr "Version"
msgid "Version Information"
msgstr "Versionsinformationen"
msgid ""
"WARNING: Only 'File-system' is documented and tested by Radicale development"
msgstr ""
"WARNUNG: Nur 'File-system' ist vom Radicale Entwicklerteam derzeit "
"dokumentiert und getestet."
msgid "Warning"
msgstr "Warnung"
msgid ""
"You can also get groups from the user regex in the collection with {0}, {1}, "
"etc."
msgstr ""
msgid ""
"You can use Python's ConfigParser interpolation values %(login)s and "
"%(path)s."
msgstr ""
"Sie können Python ConfigParser Werte '%(login)s' und '%(path)s' verwenden."
msgid "crypt"
msgstr "crypt"
msgid "custom"
msgstr "benutzerdefiniert"
msgid "htpasswd file"
msgstr "htpasswd Datei"
msgid "installed"
msgstr "installiert"
msgid "or higher"
msgstr "oder höher"
msgid "plain"
msgstr "unverschlüsselt"
msgid "required"
msgstr "erforderlich"
msgid "salted SHA-1"
msgstr "Salted SHA-1"
#~ msgid "File"
#~ msgstr "Datei"
#~ msgid "not found !"
#~ msgstr "nicht gefunden !"

View file

@ -0,0 +1,463 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: radicale\n"
"POT-Creation-Date: 2018-01-08 23:00+0300\n"
"PO-Revision-Date: 2018-01-18 22:44+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7.1\n"
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid ""
"'AUTO' selects the highest protocol version that client and server support."
msgstr ""
"'АВТО' выбирает самую высокую версию протокола, которую поддерживают клиент "
"и сервер."
msgid ""
"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
msgstr ""
"Задайте 'Имя_хоста:порт' или 'IPv4-адрес:порт' или 'IPv6-адрес:порт' - адрес "
"и порт для входящих соединений сервера Radicale."
msgid "-- Please choose --"
msgstr ""
msgid "-- custom --"
msgstr ""
msgid "AUTO"
msgstr "АВТО"
msgid "Access-Control-Allow-Headers"
msgstr "Доступ-Контроль<br />-Разрешить-Заголовки"
msgid "Access-Control-Allow-Methods"
msgstr "Доступ-Контроль<br />-Разрешить-Методы"
msgid "Access-Control-Allow-Origin"
msgstr "Доступ-Контроль<br />-Разрешить-Источник"
msgid "Access-Control-Expose-Headers"
msgstr "Доступ-Контроль<br />-Подвергать-Заголовки"
msgid "Additional HTTP headers"
msgstr "Дополнительные заголовки HTTP"
msgid "Address:Port"
msgstr "Адрес:Порт"
msgid "Authentication"
msgstr "Аутентификация"
msgid ""
"Authentication login is matched against the 'user' key, and collection's "
"path is matched against the 'collection' key."
msgstr ""
"Имя входа для проверки подлинности сопоставляется с ключом 'пользователь', и "
"пути коллекции сопоставляется с ключом 'коллекция'."
msgid "Authentication method"
msgstr "Метод аутентификации"
msgid "Authentication method to allow access to Radicale server."
msgstr "Методы аутентификации для разрешения доступа к серверу Radicale."
msgid "Auto-start"
msgstr "Авто-старт"
msgid "CalDAV/CardDAV"
msgstr "CalDAV/CardDAV"
msgid ""
"Calendars and address books are available for both local and remote access, "
"possibly limited through authentication policies."
msgstr ""
"Календари и адресные книги доступны как для локального, так и для удаленного "
"доступа, возможно ограниченного с помощью политик проверки подлинности."
msgid "Certificate file"
msgstr "Файл сертификата"
msgid ""
"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
"to the client and/or to store data inside collections."
msgstr ""
"Выбранный здесь стандарт кодирования текстов, будет использоваться вместо "
"'UTF-8' для ответов клиенту и/или для хранения данных внутри коллекций."
msgid "Ciphers"
msgstr "Протоколы шифрования"
msgid "Console Log level"
msgstr "Уровень журнала консоли"
msgid "Control the access to data collections."
msgstr "Управляйте доступом к сбору данных коллекций."
msgid "Critical"
msgstr "Критическая ситуация"
msgid ""
"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
"another domain outside the domain from which the resource originated."
msgstr ""
"Cross-Origin Resource Sharing (CORS) - это механизм совместного "
"использования ресурсов между разными источниками, позволяющий использовать "
"ограниченные ресурсы (например, шрифты, JavaScript и т.д.) на веб-странице, "
"запрашиваемой из другого домена, за пределами домена, из которого был создан "
"ресурс."
msgid "Custom"
msgstr "Пользовательский"
msgid "Database"
msgstr "База данных"
msgid "Debug"
msgstr "Отладка"
msgid "Directory"
msgstr "Папка"
msgid "Directory not exists/found !"
msgstr "Папка не существует / не найдена !"
msgid "Directory required !"
msgstr "Папка требуется !"
msgid "Directory where the rotating log-files are stored"
msgstr "Папка в которой хранятся перезаписываемые файлы системного журнала."
msgid "Enable HTTPS"
msgstr "Включить HTTPS"
msgid ""
"Enable/Disable auto-start of Radicale on system start-up and interface events"
msgstr ""
"Автоматический запуск Radicale сервера при загрузке прошивки устройства."
msgid "Encoding"
msgstr "Кодировка"
msgid "Encoding for responding requests."
msgstr "Кодировка для ответов на запросы."
msgid "Encoding for storing local collections."
msgstr "Кодировка для хранения локальных данных коллекций."
msgid "Encryption method"
msgstr "Метод шифрования"
msgid "Error"
msgstr "Ошибка"
msgid "File '%s' not found !"
msgstr "Файл '%s' не найден !"
msgid "File Log level"
msgstr "Уровень лог файла"
msgid "File not found !"
msgstr "Файл не найден !"
msgid "File-system"
msgstr "Файловая система"
msgid ""
"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
"means 'anybody' (including anonymous users)."
msgstr ""
"Например для ключа 'пользователь', '+' означает 'аутентифицированный "
"пользователь' и '.*' означает 'кто угодно' (включая анонимных пользователей)."
msgid "Full access for Owner only"
msgstr "Полный доступ только для владельца"
msgid "Full access for authenticated Users"
msgstr "Полный доступ для авторизованных пользователей"
msgid "Full access for everybody (including anonymous)"
msgstr "Полный доступ для всех (включая анонимных)"
msgid "Full path and file name of certificate"
msgstr "Полный путь и имя файла сертификата"
msgid "Full path and file name of private key"
msgstr "Полный путь и имя файла личного ключа"
msgid "Info"
msgstr "Информация"
msgid "Keep in mind to use the correct hashing algorithm !"
msgstr "Используйте только правильный алгоритм хэширования!"
msgid "Leading or ending slashes are trimmed from collection's path."
msgstr "Начальные или конечные '/' - удаляются при указании пути."
msgid "Log-backup Count"
msgstr "Количество резервных<br />копий журнала"
msgid "Log-file Viewer"
msgstr "Показ файла системного журнала"
msgid "Log-file directory"
msgstr "Папка файла журналов"
msgid "Log-file size"
msgstr "Размер файла журнала"
msgid "Logging"
msgstr "Журналирование"
msgid "Logon message"
msgstr "Сообщение входа в систему"
msgid "Maximum size of each rotation log-file."
msgstr "Максимальный размер каждой перезаписи файла журнала."
msgid "Message displayed in the client when a password is needed."
msgstr "Отображаемое сообщение клиенту, когда требуется пароль."
msgid "NOT installed"
msgstr "Не установлена"
msgid "None"
msgstr "Ничего"
msgid "Number of backup files of log to create."
msgstr "Количество резервных копий журнала."
msgid "OPTIONAL: See python's ssl module for available ciphers"
msgstr ""
"Необязательно: используйте SSL Python плагин для доступных протоколов "
"шифрования."
msgid "Owner allow write, authenticated users allow read"
msgstr ""
"Владелец разрешает запись, прошедшие проверку пользователи разрешают чтение"
msgid "Path/File required !"
msgstr "Путь/файл требуется!"
msgid ""
"Place here the 'user:password' pairs for your users which should have access "
"to Radicale."
msgstr ""
"Разместите здесь пары 'логин:пароль' для ваших пользователей, которые должны "
"иметь доступ к Radicale."
msgid "Please install current version !"
msgstr "Установите текущую версию !"
msgid "Please press [Reload] button below to reread the file."
msgstr "Нажмите кнопку [Перезагрузить], чтобы перечитать файл."
msgid "Please update to current version !"
msgstr "Обновите текущую версию!"
msgid "Port numbers below 1024 (Privileged ports) are not supported"
msgstr "Номера портов менее 1024 (привилегированные порты) не поддерживаются."
msgid "Private key file"
msgstr "Файл Личного Ключа"
msgid "Radicale CalDAV/CardDAV Server"
msgstr "Radicale CalDAV/CardDAV сервер"
msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
msgstr ""
"Radicale использует '/etc/radicale/rights' в качестве файла на основе "
"регулярного выражения (RegExp)."
msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
msgstr "Radicale использует '/etc/radicale/users' как htpasswd файл."
msgid "Read only!"
msgstr "Только для чтения!"
msgid "RegExp file"
msgstr "Файл регулярного выражения (RegExp)"
msgid "Reload"
msgstr "Перезагрузить"
msgid "Response Encoding"
msgstr "Кодировка ответов"
msgid "Reveal/hide password"
msgstr ""
msgid "Rights"
msgstr "Права"
msgid "Rights are based on a regexp-based file"
msgstr "Права основаны на файле, основанном на регулярных выражениях"
msgid "Rights backend"
msgstr "Права доступа"
msgid "SHA-1"
msgstr "SHA-1"
msgid "SSL Protocol"
msgstr "SSL протокол"
msgid "Save"
msgstr "Сохранить"
msgid "Section names are only used for naming the rule."
msgstr "Имена строк используются только для переименования правила."
msgid "Server"
msgstr "Сервер"
msgid "Setting this parameter to '0' will disable rotation of log-file."
msgstr ""
"Установка этого параметра в значение '0' приведет к отключению перезаписи "
"файла журнала."
msgid "Software package '"
msgstr ""
msgid "Start"
msgstr "Старт"
msgid "Start / Stop"
msgstr "Старт / Стоп"
msgid "Start/Stop Radicale server"
msgstr "Запуск и остановка сервера Radicale."
msgid "Storage"
msgstr "Хранилище"
msgid "Storage Encoding"
msgstr "Кодировка хранилища"
msgid "Storage backend"
msgstr "Сервер хранения"
msgid "Syslog Log level"
msgstr "Уровень системного журнала"
msgid "System"
msgstr "Система"
msgid ""
"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
"server solution."
msgstr ""
"Radicale - это сервер, объединяющий в себе CalDAV (календарь) и CardDAV "
"(контакты)."
msgid ""
"They can be viewed and edited by calendar and contact clients on mobile "
"phones or computers."
msgstr ""
"Их можно просматривать и редактировать по календарю и связываться с "
"клиентами на мобильных телефонах или компьютерах."
msgid "To edit the file follow this link!"
msgstr "Чтобы отредактировать файл, следуйте по этой ссылке!"
msgid "To view latest log file follow this link!"
msgstr "Для просмотра последних записей в журнале, следуйте по этой ссылке!"
msgid "Value is not an Integer >= 0 !"
msgstr "Значение не является целым числом > = 0!"
msgid "Value required ! Integer >= 0 !"
msgstr "Требуемое значение ! Целое число >= 0 !"
msgid "Version"
msgstr "Версия"
msgid "Version Information"
msgstr "Информация о версии"
msgid ""
"WARNING: Only 'File-system' is documented and tested by Radicale development"
msgstr ""
"ВНИМАНИЕ: только 'Файловая система' документирована и протестирована "
"сообществом Radicale."
msgid "Warning"
msgstr "Внимание"
msgid ""
"You can also get groups from the user regex in the collection with {0}, {1}, "
"etc."
msgstr ""
"Можно также получить группы из пользовательского regex вместе с {0}, {1} и т."
"д."
msgid ""
"You can use Python's ConfigParser interpolation values %(login)s and "
"%(path)s."
msgstr ""
"Вы можете использовать ConfigParser интерполяции Python значений %(логин)ы и "
"%(путь)и."
msgid "crypt"
msgstr "crypt"
msgid "custom"
msgstr "пользовательский"
msgid "htpasswd file"
msgstr "htpasswd файл"
msgid "installed"
msgstr "установлено"
msgid "or higher"
msgstr "или выше"
msgid "plain"
msgstr "простой"
msgid "required"
msgstr "требовать"
msgid "salted SHA-1"
msgstr "salted SHA-1"
#~ msgid "Boot delay"
#~ msgstr "Задержка загрузки"
#~ msgid "Delay (in seconds) during system boot before Radicale start"
#~ msgstr ""
#~ "Задержка (в секундах) во время загрузки системы перед стартом Radicale."
#~ msgid "During delay ifup-events are not monitored !"
#~ msgstr "Во время задержки ifup-события не отслеживаются!"
#~ msgid "One or more missing/invalid fields on tab"
#~ msgstr "Одно или несколько отсутствующих/недопустимых полей на странице."
#~ msgid "Software package '%s' is not installed."
#~ msgstr "Программный пакет '%s' не установлен."
#~ msgid "Software package '%s' is outdated."
#~ msgstr "Программный пакет '%s' устарел."
#~ msgid "Software update required"
#~ msgstr "Требуется обновление программного обеспечения."
#~ msgid "Value is not a number"
#~ msgstr "Значение не является числом"
#~ msgid "Value not between 0 and 300"
#~ msgstr "Значение не между 0 и 300"
#~ msgid "no valid path given!"
#~ msgstr "не указан допустимый путь!"

View file

@ -0,0 +1,381 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid ""
"'AUTO' selects the highest protocol version that client and server support."
msgstr ""
msgid ""
"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
msgstr ""
msgid "-- Please choose --"
msgstr ""
msgid "-- custom --"
msgstr ""
msgid "AUTO"
msgstr ""
msgid "Access-Control-Allow-Headers"
msgstr ""
msgid "Access-Control-Allow-Methods"
msgstr ""
msgid "Access-Control-Allow-Origin"
msgstr ""
msgid "Access-Control-Expose-Headers"
msgstr ""
msgid "Additional HTTP headers"
msgstr ""
msgid "Address:Port"
msgstr ""
msgid "Authentication"
msgstr ""
msgid ""
"Authentication login is matched against the 'user' key, and collection's "
"path is matched against the 'collection' key."
msgstr ""
msgid "Authentication method"
msgstr ""
msgid "Authentication method to allow access to Radicale server."
msgstr ""
msgid "Auto-start"
msgstr ""
msgid "CalDAV/CardDAV"
msgstr ""
msgid ""
"Calendars and address books are available for both local and remote access, "
"possibly limited through authentication policies."
msgstr ""
msgid "Certificate file"
msgstr ""
msgid ""
"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
"to the client and/or to store data inside collections."
msgstr ""
msgid "Ciphers"
msgstr ""
msgid "Console Log level"
msgstr ""
msgid "Control the access to data collections."
msgstr ""
msgid "Critical"
msgstr ""
msgid ""
"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
"another domain outside the domain from which the resource originated."
msgstr ""
msgid "Custom"
msgstr ""
msgid "Database"
msgstr ""
msgid "Debug"
msgstr ""
msgid "Directory"
msgstr ""
msgid "Directory not exists/found !"
msgstr ""
msgid "Directory required !"
msgstr ""
msgid "Directory where the rotating log-files are stored"
msgstr ""
msgid "Enable HTTPS"
msgstr ""
msgid ""
"Enable/Disable auto-start of Radicale on system start-up and interface events"
msgstr ""
msgid "Encoding"
msgstr ""
msgid "Encoding for responding requests."
msgstr ""
msgid "Encoding for storing local collections."
msgstr ""
msgid "Encryption method"
msgstr ""
msgid "Error"
msgstr ""
msgid "File '%s' not found !"
msgstr ""
msgid "File Log level"
msgstr ""
msgid "File not found !"
msgstr ""
msgid "File-system"
msgstr ""
msgid ""
"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
"means 'anybody' (including anonymous users)."
msgstr ""
msgid "Full access for Owner only"
msgstr ""
msgid "Full access for authenticated Users"
msgstr ""
msgid "Full access for everybody (including anonymous)"
msgstr ""
msgid "Full path and file name of certificate"
msgstr ""
msgid "Full path and file name of private key"
msgstr ""
msgid "Info"
msgstr ""
msgid "Keep in mind to use the correct hashing algorithm !"
msgstr ""
msgid "Leading or ending slashes are trimmed from collection's path."
msgstr ""
msgid "Log-backup Count"
msgstr ""
msgid "Log-file Viewer"
msgstr ""
msgid "Log-file directory"
msgstr ""
msgid "Log-file size"
msgstr ""
msgid "Logging"
msgstr ""
msgid "Logon message"
msgstr ""
msgid "Maximum size of each rotation log-file."
msgstr ""
msgid "Message displayed in the client when a password is needed."
msgstr ""
msgid "NOT installed"
msgstr ""
msgid "None"
msgstr ""
msgid "Number of backup files of log to create."
msgstr ""
msgid "OPTIONAL: See python's ssl module for available ciphers"
msgstr ""
msgid "Owner allow write, authenticated users allow read"
msgstr ""
msgid "Path/File required !"
msgstr ""
msgid ""
"Place here the 'user:password' pairs for your users which should have access "
"to Radicale."
msgstr ""
msgid "Please install current version !"
msgstr ""
msgid "Please press [Reload] button below to reread the file."
msgstr ""
msgid "Please update to current version !"
msgstr ""
msgid "Port numbers below 1024 (Privileged ports) are not supported"
msgstr ""
msgid "Private key file"
msgstr ""
msgid "Radicale CalDAV/CardDAV Server"
msgstr ""
msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
msgstr ""
msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
msgstr ""
msgid "Read only!"
msgstr ""
msgid "RegExp file"
msgstr ""
msgid "Reload"
msgstr ""
msgid "Response Encoding"
msgstr ""
msgid "Reveal/hide password"
msgstr ""
msgid "Rights"
msgstr ""
msgid "Rights are based on a regexp-based file"
msgstr ""
msgid "Rights backend"
msgstr ""
msgid "SHA-1"
msgstr ""
msgid "SSL Protocol"
msgstr ""
msgid "Save"
msgstr ""
msgid "Section names are only used for naming the rule."
msgstr ""
msgid "Server"
msgstr ""
msgid "Setting this parameter to '0' will disable rotation of log-file."
msgstr ""
msgid "Software package '"
msgstr ""
msgid "Start"
msgstr ""
msgid "Start / Stop"
msgstr ""
msgid "Start/Stop Radicale server"
msgstr ""
msgid "Storage"
msgstr ""
msgid "Storage Encoding"
msgstr ""
msgid "Storage backend"
msgstr ""
msgid "Syslog Log level"
msgstr ""
msgid "System"
msgstr ""
msgid ""
"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
"server solution."
msgstr ""
msgid ""
"They can be viewed and edited by calendar and contact clients on mobile "
"phones or computers."
msgstr ""
msgid "To edit the file follow this link!"
msgstr ""
msgid "To view latest log file follow this link!"
msgstr ""
msgid "Value is not an Integer >= 0 !"
msgstr ""
msgid "Value required ! Integer >= 0 !"
msgstr ""
msgid "Version"
msgstr ""
msgid "Version Information"
msgstr ""
msgid ""
"WARNING: Only 'File-system' is documented and tested by Radicale development"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"You can also get groups from the user regex in the collection with {0}, {1}, "
"etc."
msgstr ""
msgid ""
"You can use Python's ConfigParser interpolation values %(login)s and "
"%(path)s."
msgstr ""
msgid "crypt"
msgstr ""
msgid "custom"
msgstr ""
msgid "htpasswd file"
msgstr ""
msgid "installed"
msgstr ""
msgid "or higher"
msgstr ""
msgid "plain"
msgstr ""
msgid "required"
msgstr ""
msgid "salted SHA-1"
msgstr ""

View file

@ -0,0 +1,12 @@
#!/bin/sh
# no longer needed for "Save and Apply" to restart radicale
# luci-app-radicale calls /etc/init.d/radicale reload
uci -q batch <<-EOF >/dev/null
delete ucitrack.@radicale[-1]
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0

View file

@ -1,29 +1,30 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: samba\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2012-08-15 13:48+0300\n"
"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: samba\n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2018-01-19 15:28+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Allow guests" msgid "Allow guests"
msgstr "Разрешить гостевой вход" msgstr "Разрешить гостевой вход"
msgid "Allow system users to reach their home directories via network shares" msgid "Allow system users to reach their home directories via network shares"
msgstr "" msgstr ""
"Разрешить пользователям получать доступ к их домашним директориям через сеть" "Разрешить пользователям получать доступ к их домашним папкам, через "
"локальную сеть."
msgid "Allowed users" msgid "Allowed users"
msgstr "Разрешённые пользователи" msgstr "Разрешенные пользователи"
msgid "Create mask" msgid "Create mask"
msgstr "Создать маску" msgstr "Создать маску"
@ -32,22 +33,22 @@ msgid "Description"
msgstr "Описание" msgstr "Описание"
msgid "Directory mask" msgid "Directory mask"
msgstr "Маска директории" msgstr "Маска папок"
msgid "Edit Template" msgid "Edit Template"
msgstr "Редактировать шаблон" msgstr "Настройка шаблона"
msgid "Edit the template that is used for generating the samba configuration." msgid "Edit the template that is used for generating the samba configuration."
msgstr "Редактировать шаблон, используемый для генерации конфигурации samba." msgstr "Настройка config<br />файла samba"
msgid "General Settings" msgid "General Settings"
msgstr "Общие настройки" msgstr "Основные настройки"
msgid "Hostname" msgid "Hostname"
msgstr "Имя хоста" msgstr "Имя хоста"
msgid "Mask for new directories" msgid "Mask for new directories"
msgstr "Маска для новых директорий" msgstr "Маска для новых папок"
msgid "Mask for new files" msgid "Mask for new files"
msgstr "Маска для новых файлов" msgstr "Маска для новых файлов"
@ -65,10 +66,10 @@ msgid "Read-only"
msgstr "Только для чтения" msgstr "Только для чтения"
msgid "Share home-directories" msgid "Share home-directories"
msgstr "Совместно использовать домашние директории" msgstr "Совместно использовать домашние папки"
msgid "Shared Directories" msgid "Shared Directories"
msgstr "Совместно используемые директории" msgstr "Совместно используемые папки"
msgid "" msgid ""
"This is the content of the file '/etc/samba/smb.conf.template' from which " "This is the content of the file '/etc/samba/smb.conf.template' from which "
@ -77,9 +78,19 @@ msgid ""
"Settings' tab." "Settings' tab."
msgstr "" msgstr ""
"Это содержимое файла '/etc/samba/smb.conf.template', из которого " "Это содержимое файла '/etc/samba/smb.conf.template', из которого "
"генерируется конфигурация samba. Значения, заключённые в символы \"|\", не " "генерируется config файл - samba.<br />Значения, заключенные в символы "
"должны быть изменены. Они будут автоматически заменены на значения из " "('|'), не должны быть изменены.<br />Они будут автоматически заменены на "
"вкладки 'Общие настройки'." "значения со страницы 'Основные настройки'."
msgid "Workgroup" msgid "Workgroup"
msgstr "Рабочая группа" msgstr "Рабочая группа"
#~ msgid "Browseable"
#~ msgstr "Виден в списке доступных ресурсов"
#~ msgid ""
#~ "Please add directories to share. Each directory refers to a folder on a "
#~ "mounted device."
#~ msgstr ""
#~ "Добавьте папки для совместного доступа. Каждая папка - соответствует "
#~ "разделу на подключенном устройстве."

View file

@ -1,13 +1,11 @@
#!/bin/sh #!/bin/sh
$(uci -q get luci_splash.general.redirect_url) || { $(uci -q get luci_splash.general.redirect_url) || {
set -x
touch /var/state/luci_splash_locations touch /var/state/luci_splash_locations
touch /etc/config/luci_splash_locations touch /etc/config/luci_splash_locations
MAC=$(grep "$REMOTE_HOST" /proc/net/arp | awk '{print $4}') MAC=$(grep "$REMOTE_HOST" /proc/net/arp | awk '{print $4}')
uci -P /var/state set luci_splash_locations.${MAC//:/}=redirect uci -P /var/state set luci_splash_locations.${MAC//:/}=redirect
uci -P /var/state set luci_splash_locations.${MAC//:/}.location="http://${HTTP_HOST}${REQUEST_URI}" uci -P /var/state set luci_splash_locations.${MAC//:/}.location="http://${HTTP_HOST}${REQUEST_URI}"
set +x
} }
echo -en "Cache-Control: no-cache, max-age=0, no-store, must-revalidate\r\n" echo -en "Cache-Control: no-cache, max-age=0, no-store, must-revalidate\r\n"

View file

@ -1,19 +1,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: LuCI: splash\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-26 15:10+0200\n"
"PO-Revision-Date: 2013-11-13 18:52+0200\n"
"Last-Translator: Роман <x.wserfer@gmail.com>\n"
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: splash\n"
"POT-Creation-Date: 2013-11-13 18:52+0200\n"
"PO-Revision-Date: 2018-01-19 22:46+0300\n"
"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "X-Generator: Poedit 1.8.7.1\n"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
"X-Generator: Pootle 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"X-Poedit-SourceCharset: UTF-8\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: ru\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "Accept" msgid "Accept"
msgstr "Принять" msgstr "Принять"
@ -35,17 +35,23 @@ msgid ""
"without notice for any reason, for certain devices, and/or may be blocked " "without notice for any reason, for certain devices, and/or may be blocked "
"for certain users." "for certain users."
msgstr "" msgstr ""
"Доступ к сети не гарантируется. Он может быть прерван в любое время без "
"предварительного уведомления по любой причине, для определенных устройств, и/"
"или может быть заблокирован для определенных пользователей."
msgid "Active Clients" msgid "Active Clients"
msgstr "Активные клиенты" msgstr "Активные клиенты"
msgid "Allowed hosts/subnets" msgid "Allowed hosts/subnets"
msgstr "Разрешённые хосты/подсети" msgstr "Разрешенные хосты/подсети"
msgid "" msgid ""
"As an alternative to editing the complete splash text you can also just " "As an alternative to editing the complete splash text you can also just "
"include some custom text in the default splash page by entering it here." "include some custom text in the default splash page by entering it here."
msgstr "" msgstr ""
"В качестве альтернативы редактированию полного текста заставки, можно также "
"просто включить некоторый пользовательский текст на странице заставки по "
"умолчанию, введя его здесь."
msgid "" msgid ""
"Bandwidth limit for clients is only activated when both up- and download " "Bandwidth limit for clients is only activated when both up- and download "
@ -53,14 +59,14 @@ msgid ""
"Whitelisted clients are not limited." "Whitelisted clients are not limited."
msgstr "" msgstr ""
"Ограничение полосы для клиентов активируется только при указанных лимитах " "Ограничение полосы для клиентов активируется только при указанных лимитах "
"нисходящего и восходящего каналов. Значение 0 полностью отключает " "загрузки и скачивания.<br />Значение '0' полностью отключает ограничение. "
"ограничение. Клиенты из \"белого\" списка не имеют ограничений." "Клиенты из Белого списка не имеют ограничений."
msgid "" msgid ""
"Become an active member of this community and help by operating your own node" "Become an active member of this community and help by operating your own node"
msgstr "" msgstr ""
"Станьте активным участником данного сообщества и окажите содействие, " "Станьте активным участником данного сообщества и окажите содействие, "
"запустив свой узел сети" "запустив свой узел сети."
msgid "Blacklist" msgid "Blacklist"
msgstr "Чёрный список" msgstr "Чёрный список"
@ -72,39 +78,42 @@ msgid ""
"By accepting these rules you can use this network for %s hour(s). After this " "By accepting these rules you can use this network for %s hour(s). After this "
"time you need to accept these rules again." "time you need to accept these rules again."
msgstr "" msgstr ""
"Приняв эти правила, вы можете использовать эту сеть для %s час (ы). По "
"истечении этого времени вам необходимо снова принять эти правила."
msgid "Clearance time" msgid "Clearance time"
msgstr "Разрешённое время" msgstr "Разрешённое время"
msgid "Client-Splash" msgid "Client-Splash"
msgstr "Client-Splash" msgstr "Splash-Клиент"
msgid "" msgid ""
"Client-Splash is a hotspot authentification system for wireless mesh " "Client-Splash is a hotspot authentification system for wireless mesh "
"networks." "networks."
msgstr "" msgstr ""
"Client-Splash - это система аутентификации точек доступа для беспроводных " "Splash-Клиент - это система аутентификации точек доступа для беспроводных "
"ячеистых сетей." "Mesh сетей."
msgid "" msgid ""
"Clients are redirected to this page after they have accepted the splash. If " "Clients are redirected to this page after they have accepted the splash. If "
"this is left empty they are redirected to the page they had requested." "this is left empty they are redirected to the page they had requested."
msgstr "" msgstr ""
"Клиенты перенаправляются на эту страницу после того, как они вступили в "
"Splash.<br />Если эта страница пуста, они перенаправляются на запрашиваемую "
"страницу."
msgid "Clients download speed is limited to this value (kbyte/s)" msgid "Clients download speed is limited to this value (kbyte/s)"
msgstr "" msgstr "Скорость скачивания для клиентов ограничена этим значением (КБ/c)."
"Скорость нисходящего канала для клиентов ограничена этим значением (КБ/c)"
msgid "" msgid ""
"Clients that have accepted the splash are allowed to use the network for " "Clients that have accepted the splash are allowed to use the network for "
"that many hours." "that many hours."
msgstr "" msgstr ""
"Клиенты, принявшие приглашение splash-экрана, могут использовать сеть данное " "Клиенты, принявшие приглашение Splash-экрана, могут использовать сеть данное "
"количество часов." "количество часов."
msgid "Clients upload speed is limited to this value (kbyte/s)" msgid "Clients upload speed is limited to this value (kbyte/s)"
msgstr "" msgstr "Скорость загрузки для клиентов ограничена этим значением (КБ/c)."
"Скорость восходящего канала для клиентов ограничена этим значением (КБ/c)"
msgid "Contact" msgid "Contact"
msgstr "Связаться" msgstr "Связаться"
@ -116,15 +125,17 @@ msgid ""
"Destination hosts and networks that are excluded from splashing, i.e. they " "Destination hosts and networks that are excluded from splashing, i.e. they "
"are always allowed." "are always allowed."
msgstr "" msgstr ""
"Назначенные хосты и сети, которые исключены из Splash, т.е. они всегда "
"разрешены."
msgid "Donate some money to help us keep this project alive." msgid "Donate some money to help us keep this project alive."
msgstr "Пожертвовать деньги на поддержку этого проекта." msgstr "Пожертвовать деньги на поддержку этого проекта."
msgid "Download limit" msgid "Download limit"
msgstr "Лимит загрузки" msgstr "Лимит скачивания"
msgid "Edit the complete splash text" msgid "Edit the complete splash text"
msgstr "" msgstr "Изменение полного текста заставки"
msgid "Fair Use Policy" msgid "Fair Use Policy"
msgstr "Политика добровольного использования" msgstr "Политика добровольного использования"
@ -133,16 +144,16 @@ msgid "Firewall zone"
msgstr "Зона межсетевого экрана" msgstr "Зона межсетевого экрана"
msgid "General" msgid "General"
msgstr "Общие" msgstr "Основные настройки"
msgid "Get in %s with the operator of this access point." msgid "Get in %s with the operator of this access point."
msgstr "" msgstr "Получить в% s с оператором этой точки доступа."
msgid "Hostname" msgid "Hostname"
msgstr "Имя хоста" msgstr "Имя хоста"
msgid "IP Address" msgid "IP Address"
msgstr "IP-адрес" msgstr "IP-Адрес"
msgid "" msgid ""
"If you operate your own wifi equipment use channels different from ours." "If you operate your own wifi equipment use channels different from ours."
@ -154,10 +165,10 @@ msgid "If you use this network on a regular basis we ask for your support:"
msgstr "Если вы используете эту сеть регулярно, мы просим вашей поддержки:" msgstr "Если вы используете эту сеть регулярно, мы просим вашей поддержки:"
msgid "Include your own text in the default splash" msgid "Include your own text in the default splash"
msgstr "" msgstr "Включить собственный текст в заставку по умолчанию"
msgid "Intercept client traffic on this Interface" msgid "Intercept client traffic on this Interface"
msgstr "Перехватывать клиентский трафик на этом интерфейсе" msgstr "Перехватывать клиентский трафик на этом интерфейсе."
msgid "Interfaces" msgid "Interfaces"
msgstr "Интерфейсы" msgstr "Интерфейсы"
@ -169,11 +180,11 @@ msgid ""
"KB/s (Download/Upload). You may be able to remove this limit by actively " "KB/s (Download/Upload). You may be able to remove this limit by actively "
"contributing to this project." "contributing to this project."
msgstr "" msgstr ""
"КБ/с (загрузка/отдача). Данное ограничение может быть снято при активном " "КБ/с (скачать/загрузить). Данное ограничение может быть снято при активном "
"участии в этом проекте." "участии в этом проекте."
msgid "Legally Prohibited Activities" msgid "Legally Prohibited Activities"
msgstr "" msgstr "Запрещенные законом виды деятельности"
msgid "Legally Prohibited content" msgid "Legally Prohibited content"
msgstr "Юридически запрещенный контент" msgstr "Юридически запрещенный контент"
@ -188,8 +199,8 @@ msgid ""
"MAC addresses of whitelisted clients. These do not need to accept the splash " "MAC addresses of whitelisted clients. These do not need to accept the splash "
"and are not bandwidth limited." "and are not bandwidth limited."
msgstr "" msgstr ""
"MAC-адреса клиентов из \"белого\" списка. Данные клиенты не имеют " "MAC-адреса клиентов из Белого списка. Данных клиентов не нужно принимать в "
"ограничений пропускной способности." "Splash и они не имеют ограничений по пропускной способности."
msgid "Netmask" msgid "Netmask"
msgstr "Маска сети" msgstr "Маска сети"
@ -204,14 +215,14 @@ msgid ""
"Please note that we are not an internet service provider but an experimental " "Please note that we are not an internet service provider but an experimental "
"community network." "community network."
msgstr "" msgstr ""
"Пожалуйста, обратите внимание, что мы не интернет-провайдер, а " "Обратите внимание, что мы не интернет-провайдер, а сообщество "
"экспериментальная сеть сообщества." "экспериментальной сети ."
msgid "Policy" msgid "Policy"
msgstr "Политика" msgstr "Политика"
msgid "Redirect target" msgid "Redirect target"
msgstr "" msgstr "Назначение перенаправления"
msgid "Safety" msgid "Safety"
msgstr "Безопасный" msgstr "Безопасный"
@ -220,47 +231,62 @@ msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
msgid "Splash rules are integrated in this firewall zone" msgid "Splash rules are integrated in this firewall zone"
msgstr "Правила Splash интегрированы в зону этого межсетевого экрана" msgstr "Правила Splash интегрированы в зону этого межсетевого экрана."
msgid "Splashtext" msgid "Splashtext"
msgstr "Текст splash-экрана" msgstr "Текст Splash-экрана"
msgid "" msgid ""
"The network, like the Internet, is unencrypted and open. Each participant is " "The network, like the Internet, is unencrypted and open. Each participant is "
"responsible for the safety of their own connections and devices." "responsible for the safety of their own connections and devices."
msgstr "" msgstr ""
"Сеть, как и Интернет, не зашифрована и открыта. Каждый участник несет "
"ответственность за безопасность своих собственных подключений и устройств."
msgid "" msgid ""
"The open and free wireless network of volunteers (\"Operators\") provides " "The open and free wireless network of volunteers (\"Operators\") provides "
"the necessary equipment and Internet connections (\"Infrastructure\") at " "the necessary equipment and Internet connections (\"Infrastructure\") at "
"their own expense." "their own expense."
msgstr "" msgstr ""
"Открытая и бесплатная беспроводная сеть волонтеров 'операторы' обеспечивает "
"необходимое оборудование и подключение к Интернету 'инфраструктура' за свой "
"счет."
msgid "" msgid ""
"The operator claims no liability for loss of data, unauthorized access/" "The operator claims no liability for loss of data, unauthorized access/"
"damage to devices, or financial losses that participants may suffer from the " "damage to devices, or financial losses that participants may suffer from the "
"use of the network." "use of the network."
msgstr "" msgstr ""
"Оператор не несет ответственности за потерю данных, несанкционированного "
"доступа/повреждения устройств или финансовых потерь, которые участники могут "
"пострадать от использования сети."
msgid "" msgid ""
"The participant agrees to not perform any action and refrain from acts which " "The participant agrees to not perform any action and refrain from acts which "
"may violate the law or infringe upon the rights of third parties." "may violate the law or infringe upon the rights of third parties."
msgstr "" msgstr ""
"Участник соглашается не предпринимать никаких действий и воздерживаться от "
"действий, которые могут нарушать закон или нарушать права третьих лиц."
msgid "" msgid ""
"The participant agrees to not transfer content over the network which " "The participant agrees to not transfer content over the network which "
"violates the law." "violates the law."
msgstr "" msgstr "Участник соглашается не передавать контент по сети, нарушающей закон."
msgid "" msgid ""
"The participant agrees to not use the network in any way which will harm the " "The participant agrees to not use the network in any way which will harm the "
"infrastructure, the network itself, its operators or other participants." "infrastructure, the network itself, its operators or other participants."
msgstr "" msgstr ""
"Участник соглашается не использовать сеть любым способом, который нанесет "
"ущерб инфраструктуре, самой сети, ее операторам или другим участникам."
msgid "" msgid ""
"These Terms of Use govern the use of the network by its participants' " "These Terms of Use govern the use of the network by its participants' "
"computer, PDA, or similar device (\"Devices\") within the network." "computer, PDA, or similar device (\"Devices\") within the network."
msgstr "" msgstr ""
"Настоящие условия использования регулируют использование сети компьютером "
"участников, КПК, смартфоном или аналогичным устройством 'устройствами' в "
"сети."
msgid "Time remaining" msgid "Time remaining"
msgstr "Оставшееся время" msgstr "Оставшееся время"
@ -276,29 +302,28 @@ msgid "Traffic in/out"
msgstr "Трафик вх/исх" msgstr "Трафик вх/исх"
msgid "Upload limit" msgid "Upload limit"
msgstr "Лимит отдачи" msgstr "Предел загрузки"
msgid "Usage Agreement" msgid "Usage Agreement"
msgstr "" msgstr "Соглашение об использовании"
msgid "Welcome" msgid "Welcome"
msgstr "Добро пожаловать" msgstr "Добро пожаловать"
msgid "Whitelist" msgid "Whitelist"
msgstr "\"Белый\" список" msgstr "Белый список"
msgid "You are now connected to the free wireless mesh network" msgid "You are now connected to the free wireless mesh network"
msgstr "Теперь вы подключены к бесплатной беспроводной ячеистой сети" msgstr "Теперь вы подключены к свободной беспроводной Mesh сети."
msgid "" msgid ""
"You can enter your own text that is displayed to clients here.<br />It is " "You can enter your own text that is displayed to clients here.<br />It is "
"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " "possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, "
"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." "###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###."
msgstr "" msgstr ""
"Здесь вы можете указать свой текст, который будет отображаться клиентам.<br /" "Здесь можно ввести собственный текст, отображаемый для клиентов.<br />Можно "
">Возможно использовать следующие маркеры: ###COMMUNITY###, " "использовать следующие маркеры: ###COMMUNITY###, ###COMMUNITY_URL###, "
"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and " "###CONTACTURL###, ###LEASETIME###, ###LIMIT### и ###ACCEPT###."
"###ACCEPT###."
msgid "" msgid ""
"Your access to this network has been blocked, most likely because you did " "Your access to this network has been blocked, most likely because you did "
@ -311,25 +336,25 @@ msgid "Your bandwidth is limited to"
msgstr "Ваша полоса пропускания ограничена значением" msgstr "Ваша полоса пропускания ограничена значением"
msgid "blacklisted" msgid "blacklisted"
msgstr "в \"чёрном\" списке" msgstr "в Черном списке"
msgid "expired" msgid "expired"
msgstr "истёк" msgstr "истекло"
msgid "optional when using host addresses" msgid "optional when using host addresses"
msgstr "опционально при использовании хост-адресов" msgstr "необязательно при использовании адресов хостов"
msgid "perform any kind of illegal activities" msgid "perform any kind of illegal activities"
msgstr "выполнять любые незаконные действия" msgstr "выполнять любые незаконные действия"
msgid "splashed" msgid "splashed"
msgstr "уже в splash" msgstr "вы в Splash"
msgid "temporarily blocked" msgid "temporarily blocked"
msgstr "временно заблокирован" msgstr "временно заблокирован"
msgid "unknown" msgid "unknown"
msgstr "неизвестный" msgstr "неизвестно"
msgid "use filesharing applications on this network" msgid "use filesharing applications on this network"
msgstr "использование файлообменных приложений в этой сети" msgstr "использование файлообменных приложений в этой сети"
@ -338,25 +363,4 @@ msgid "waste bandwidth with unneccesary downloads or streams"
msgstr "тратить пропускную способность на ненужные загрузки или потоки" msgstr "тратить пропускную способность на ненужные загрузки или потоки"
msgid "whitelisted" msgid "whitelisted"
msgstr "в \"белом\" списке" msgstr "в Белом списке"
#~ msgid ""
#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. "
#~ "they are always allowed."
#~ msgstr ""
#~ "Перечисленные хосты и сети не получают приглашения splash-экрана, т.е. они "
#~ "всегда разрешены."
#~ msgid "By accepting these rules you can use this network for"
#~ msgstr "Принимая эти правила, вы можете использовать данную сеть для"
#~ msgid "Edit Splash text"
#~ msgstr "Редактировать текст splash-экрана"
#~ msgid "hour(s). After this time you need to accept these rules again."
#~ msgstr ""
#~ "час(ы). После указанного времени Вы должны вновь принять эти правила."
# Здесь наверняка нужно склонить в другом падеже, надо смотреть по контексту
#~ msgid "the owner of this access point."
#~ msgstr "с владельцем этой точки доступа."

View file

@ -20,7 +20,7 @@ function index()
local labels = { local labels = {
s_output = _("Output plugins"), s_output = _("Output plugins"),
s_system = _("System plugins"), s_general = _("General plugins"),
s_network = _("Network plugins"), s_network = _("Network plugins"),
conntrack = _("Conntrack"), conntrack = _("Conntrack"),
@ -30,6 +30,7 @@ function index()
disk = _("Disk Usage"), disk = _("Disk Usage"),
dns = _("DNS"), dns = _("DNS"),
email = _("Email"), email = _("Email"),
entropy = _("Entropy"),
exec = _("Exec"), exec = _("Exec"),
interface = _("Interfaces"), interface = _("Interfaces"),
iptables = _("Firewall"), iptables = _("Firewall"),
@ -53,7 +54,7 @@ function index()
-- our collectd menu -- our collectd menu
local collectd_menu = { local collectd_menu = {
output = { "csv", "network", "rrdtool", "unixsock" }, output = { "csv", "network", "rrdtool", "unixsock" },
system = { "cpu", "df", "disk", "email", "exec", "irq", "load", "memory", "nut", "processes", "uptime" }, general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "uptime" },
network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" } network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" }
} }
@ -61,7 +62,7 @@ function index()
local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80) local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80)
st.index = true st.index = true
entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Collectd"), 10).subindex = true entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Setup"), 20).subindex = true
-- populate collectd plugin menu -- populate collectd plugin menu
@ -86,7 +87,7 @@ function index()
end end
-- output views -- output views
local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 80) local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 10)
page.setuser = "nobody" page.setuser = "nobody"
page.setgroup = "nogroup" page.setgroup = "nogroup"
@ -169,7 +170,7 @@ function statistics_render()
if #instances == 0 then if #instances == 0 then
--instances = { graph.tree:plugin_instances( plugin )[1] } --instances = { graph.tree:plugin_instances( plugin )[1] }
instances = graph.tree:plugin_instances( plugin ) instances = graph.tree:plugin_instances( plugin )
is_index = true is_index = (#instances > 1)
-- index instance requested -- index instance requested
elseif instances[1] == "-" then elseif instances[1] == "-" then

View file

@ -0,0 +1,14 @@
-- Copyright 2015 Hannu Nyman <hannu.nyman@iki.fi>
-- Licensed to the public under the Apache License 2.0.
m = Map("luci_statistics",
translate("Entropy Plugin Configuration"),
translate("The entropy plugin collects statistics about the available entropy."))
s = m:section( NamedSection, "collectd_entropy", "luci_statistics" )
enable = s:option( Flag, "enable", translate("Enable this plugin") )
enable.default = 0
return m

View file

@ -6,7 +6,7 @@ m = Map("luci_statistics",
translate( translate(
"The network plugin provides network based communication between " .. "The network plugin provides network based communication between " ..
"different collectd instances. Collectd can operate both in client " .. "different collectd instances. Collectd can operate both in client " ..
"and server mode. In client mode locally collected date is " .. "and server mode. In client mode locally collected data is " ..
"transferred to a collectd server instance, in server mode the " .. "transferred to a collectd server instance, in server mode the " ..
"local instance receives data from other hosts." "local instance receives data from other hosts."
)) ))

View file

@ -47,10 +47,16 @@ heartbeat:depends( "enable", 1 )
rrasingle = s:option( Flag, "RRASingle", rrasingle = s:option( Flag, "RRASingle",
translate("Only create average RRAs"), translate("reduces rrd size") ) translate("Only create average RRAs"), translate("reduces rrd size") )
rrasingle.default = true rrasingle.default = true
rrasingle.rmempty = true
rrasingle.optional = true
rrasingle:depends( "enable", 1 ) rrasingle:depends( "enable", 1 )
-- collectd_rrdtool.rramax (RRAMax)
rramax = s:option( Flag, "RRAMax",
translate("Show max values instead of averages"),
translate("Max values for a period can be used instead of averages when not using 'only average RRAs'") )
rramax.default = false
rramax.rmempty = true
rramax:depends( "RRASingle", 0 )
-- collectd_rrdtool.rratimespans (RRATimespan) -- collectd_rrdtool.rratimespans (RRATimespan)
rratimespans = s:option( Value, "RRATimespans", rratimespans = s:option( Value, "RRATimespans",
translate("Stored timespans"), translate("seconds; multiple separated by space") ) translate("Stored timespans"), translate("seconds; multiple separated by space") )

View file

@ -26,15 +26,6 @@ function Instance._subst( self, str, val )
return str return str
end end
function Instance._translate( self, key, alt )
local val = self.i18n.string(key)
if val ~= key then
return val
else
return alt
end
end
function Instance.title( self, plugin, pinst, dtype, dinst, user_title ) function Instance.title( self, plugin, pinst, dtype, dinst, user_title )
local title = user_title or local title = user_title or
@ -73,24 +64,17 @@ end
function Instance.ds( self, source ) function Instance.ds( self, source )
local label = source.title or self:_translate( local label = source.title or
string.format( "stat_ds_%s_%s_%s", source.type, source.instance, source.ds ), "dt=%s/di=%s/ds=%s" % {
self:_translate( (source.type and #source.type > 0) and source.type or "(nil)",
string.format( "stat_ds_%s_%s", source.type, source.instance ), (source.instance and #source.instance > 0) and source.instance or "(nil)",
self:_translate( (source.ds and #source.ds > 0) and source.ds or "(nil)"
string.format( "stat_ds_label_%s__%s", source.type, source.ds ), }
self:_translate(
string.format( "stat_ds_%s", source.type ),
source.type .. "_" .. source.instance:gsub("[^%w]","_") .. "_" .. source.ds
)
)
)
)
return self:_subst( label, { return self:_subst( label, {
dtype = source.type, dtype = source.type,
dinst = source.instance, dinst = source.instance,
dsrc = source.ds dsrc = source.ds
} ) } ):gsub(":", "\\:")
end end

View file

@ -25,6 +25,7 @@ function Graph.__init__( self, timespan, opts )
-- options -- options
opts.timespan = timespan or sections.rrdtool.default_timespan or 900 opts.timespan = timespan or sections.rrdtool.default_timespan or 900
opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle == "1" ) opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle == "1" )
opts.rramax = opts.rramax or ( sections.collectd_rrdtool.RRAMax == "1" )
opts.host = opts.host or sections.collectd.Hostname or luci.sys.hostname() opts.host = opts.host or sections.collectd.Hostname or luci.sys.hostname()
opts.width = opts.width or sections.rrdtool.image_width or 400 opts.width = opts.width or sections.rrdtool.image_width or 400
opts.rrdpath = opts.rrdpath or sections.collectd_rrdtool.DataDir or "/tmp/rrd" opts.rrdpath = opts.rrdpath or sections.collectd_rrdtool.DataDir or "/tmp/rrd"
@ -171,16 +172,29 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
-- is first source in stack or overlay source: source_stk = source_nnl -- is first source in stack or overlay source: source_stk = source_nnl
if not prev or source.overlay then if not prev or source.overlay then
if self.opts.rrasingle or not self.opts.rramax then
-- create cdef statement for cumulative stack (no NaNs) and also -- create cdef statement for cumulative stack (no NaNs) and also
-- for display (preserving NaN where no points should be displayed) -- for display (preserving NaN where no points should be displayed)
_tif( _args, "CDEF:%s_stk=%s_nnl", source.sname, source.sname ) _tif( _args, "CDEF:%s_stk=%s_nnl", source.sname, source.sname )
_tif( _args, "CDEF:%s_plot=%s_avg", source.sname, source.sname ) _tif( _args, "CDEF:%s_plot=%s_avg", source.sname, source.sname )
else
-- create cdef statement for cumulative stack (no NaNs) and also
-- for display (preserving NaN where no points should be displayed)
_tif( _args, "CDEF:%s_stk=%s_nnl", source.sname, source.sname )
_tif( _args, "CDEF:%s_plot=%s_max", source.sname, source.sname )
end
-- is subsequent source without overlay: source_stk = source_nnl + previous_stk -- is subsequent source without overlay: source_stk = source_nnl + previous_stk
else else
if self.opts.rrasingle or not self.opts.rramax then
-- create cdef statement -- create cdef statement
_tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev ) _tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev )
_tif( _args, "CDEF:%s_plot=%s_avg,%s_stk,+", source.sname, source.sname, prev ) _tif( _args, "CDEF:%s_plot=%s_avg,%s_stk,+", source.sname, source.sname, prev )
else
-- create cdef statement
_tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev )
_tif( _args, "CDEF:%s_plot=%s_max,%s_stk,+", source.sname, source.sname, prev )
end
end end
-- create multiply by minus one cdef if flip is enabled -- create multiply by minus one cdef if flip is enabled
@ -397,6 +411,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
transform_rpn = dopts.transform_rpn or "0,+", transform_rpn = dopts.transform_rpn or "0,+",
noarea = dopts.noarea or false, noarea = dopts.noarea or false,
title = dopts.title or nil, title = dopts.title or nil,
weight = dopts.weight or nil,
ds = dsource, ds = dsource,
type = dtype, type = dtype,
instance = dinst, instance = dinst,
@ -457,12 +472,24 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
_ti ( _args, "-X" ) _ti ( _args, "-X" )
_ti ( _args, opts.units_exponent ) _ti ( _args, opts.units_exponent )
end end
if opts.alt_autoscale then
_ti ( _args, "-A" )
end
if opts.alt_autoscale_max then
_ti ( _args, "-M" )
end
-- store additional rrd options -- store additional rrd options
if opts.rrdopts then if opts.rrdopts then
for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end
end end
-- sort sources
table.sort(_sources, function(a, b)
local x = a.weight or a.index or 0
local y = b.weight or b.index or 0
return x < y
end)
-- create DEF statements for each instance -- create DEF statements for each instance
for i, source in ipairs(_sources) do for i, source in ipairs(_sources) do

View file

@ -8,22 +8,23 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
return { return {
title = "%H: Processor usage on core #%pi", title = "%H: Processor usage on core #%pi",
y_min = "0", y_min = "0",
alt_autoscale_max = true,
vlabel = "Percent", vlabel = "Percent",
number_format = "%5.1lf%%", number_format = "%5.1lf%%",
data = { data = {
instances = { instances = {
cpu = { "idle", "user", "system", "nice" } cpu = { "user", "nice", "system", "softirq", "interrupt" }
}, },
options = { options = {
cpu_idle = { color = "ffffff" }, cpu_idle = { color = "ffffff", title = "Idle" },
cpu_nice = { color = "00e000" }, cpu_nice = { color = "00e000", title = "Nice" },
cpu_user = { color = "0000ff" }, cpu_user = { color = "0000ff", title = "User" },
cpu_wait = { color = "ffb000" }, cpu_wait = { color = "ffb000", title = "Wait" },
cpu_system = { color = "ff0000" }, cpu_system = { color = "ff0000", title = "System" },
cpu_softirq = { color = "ff00ff" }, cpu_softirq = { color = "ff00ff", title = "Softirq" },
cpu_interrupt = { color = "a000a0" }, cpu_interrupt = { color = "a000a0", title = "Interrupt" },
cpu_steal = { color = "000000" } cpu_steal = { color = "000000", title = "Steal" }
} }
} }
} }

View file

@ -12,21 +12,27 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
number_format = "%5.1lf%sB", number_format = "%5.1lf%sB",
data = { data = {
sources = { instances = {
df = { "free", "used" } df_complex = { "free", "used", "reserved" }
}, },
options = { options = {
df__free = { df_complex_free = {
color = "00ff00", color = "00ff00",
overlay = false, overlay = false,
title = "free" title = "free"
}, },
df__used = { df_complex_used = {
color = "ff0000", color = "ff0000",
overlay = false, overlay = false,
title = "used" title = "used"
},
df_complex_reserved = {
color = "0000ff",
overlay = false,
title = "reserved"
} }
} }
} }

View file

@ -0,0 +1,19 @@
-- Copyright 2015 Hannu Nyman <hannu.nyman@iki.fi>
-- Licensed to the public under the Apache License 2.0.
module("luci.statistics.rrdtool.definitions.entropy", package.seeall)
function rrdargs( graph, plugin, plugin_instance, dtype )
return {
title = "%H: Available entropy",
vlabel = "bits",
number_format = "%4.0lf",
data = {
types = { "entropy" },
options = { entropy = { title = "Entropy %di" } }
}
}
end

View file

@ -66,36 +66,40 @@ function rrdargs( graph, plugin, plugin_instance )
options = { options = {
-- processed packets (tx DS) -- processed packets (tx DS)
if_packets__tx = { if_packets__tx = {
weight = 1,
overlay = true, -- don't summarize overlay = true, -- don't summarize
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "00ff00", -- processed tx is green color = "00ff00", -- processed tx is green
title = "Processed (tx)" title = "Processed (TX)"
}, },
-- processed packets (rx DS) -- processed packets (rx DS)
if_packets__rx = { if_packets__rx = {
weight = 2,
overlay = true, -- don't summarize overlay = true, -- don't summarize
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "0000ff", -- processed rx is blue color = "0000ff", -- processed rx is blue
title = "Processed (rx)" title = "Processed (RX)"
}, },
-- packet errors (tx DS) -- packet errors (tx DS)
if_errors__tx = { if_errors__tx = {
weight = 0,
overlay = true, -- don't summarize overlay = true, -- don't summarize
total = true, -- report total amount of packets total = true, -- report total amount of packets
color = "ff5500", -- tx errors are orange color = "ff5500", -- tx errors are orange
title = "Errors (tx)" title = "Errors (TX)"
}, },
-- packet errors (rx DS) -- packet errors (rx DS)
if_errors__rx = { if_errors__rx = {
weight = 3,
overlay = true, -- don't summarize overlay = true, -- don't summarize
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of packets total = true, -- report total amount of packets
color = "ff0000", -- rx errors are red color = "ff0000", -- rx errors are red
title = "Errors (rx)" title = "Errors (RX)"
} }
} }
} }

View file

@ -74,6 +74,8 @@ function rrdargs( graph, plugin, plugin_instance )
local stations = { local stations = {
title = "%H: Associated stations on %pi", title = "%H: Associated stations on %pi",
vlabel = "Stations", vlabel = "Stations",
y_min = "0",
alt_autoscale_max = true,
number_format = "%3.0lf", number_format = "%3.0lf",
data = { data = {
types = { "stations" }, types = { "stations" },

View file

@ -17,6 +17,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
title = "%H: Memory usage", title = "%H: Memory usage",
vlabel = "MB", vlabel = "MB",
number_format = "%5.1lf%s", number_format = "%5.1lf%s",
y_min = "0",
alt_autoscale_max = true,
data = { data = {
instances = { instances = {
memory = { "free", "buffered", "cached", "used" } memory = { "free", "buffered", "cached", "used" }

View file

@ -22,11 +22,13 @@ function rrdargs( graph, plugin, plugin_instance )
-- special options for single data lines -- special options for single data lines
options = { options = {
if_octets__tx = { if_octets__tx = {
title = "Bytes (TX)",
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "00ff00" -- tx is green color = "00ff00" -- tx is green
}, },
if_octets__rx = { if_octets__rx = {
title = "Bytes (RX)",
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "0000ff" -- rx is blue color = "0000ff" -- rx is blue
@ -59,6 +61,8 @@ function rrdargs( graph, plugin, plugin_instance )
options = { options = {
-- processed packets (tx DS) -- processed packets (tx DS)
if_packets__tx = { if_packets__tx = {
weight = 2,
title = "Total (TX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "00ff00" -- processed tx is green color = "00ff00" -- processed tx is green
@ -66,6 +70,8 @@ function rrdargs( graph, plugin, plugin_instance )
-- processed packets (rx DS) -- processed packets (rx DS)
if_packets__rx = { if_packets__rx = {
weight = 3,
title = "Total (RX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
@ -74,6 +80,8 @@ function rrdargs( graph, plugin, plugin_instance )
-- dropped packets (tx DS) -- dropped packets (tx DS)
if_dropped__tx = { if_dropped__tx = {
weight = 1,
title = "Dropped (TX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "660055" -- dropped tx is ... dunno ;) color = "660055" -- dropped tx is ... dunno ;)
@ -81,14 +89,18 @@ function rrdargs( graph, plugin, plugin_instance )
-- dropped packets (rx DS) -- dropped packets (rx DS)
if_dropped__rx = { if_dropped__rx = {
weight = 4,
title = "Dropped (RX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of bytes total = true, -- report total amount of bytes
color = "440066" -- dropped rx is violett color = "ff00ff" -- dropped rx is violett
}, },
-- packet errors (tx DS) -- packet errors (tx DS)
if_errors__tx = { if_errors__tx = {
weight = 0,
title = "Errors (TX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
total = true, -- report total amount of packets total = true, -- report total amount of packets
color = "ff5500" -- tx errors are orange color = "ff5500" -- tx errors are orange
@ -96,6 +108,8 @@ function rrdargs( graph, plugin, plugin_instance )
-- packet errors (rx DS) -- packet errors (rx DS)
if_errors__rx = { if_errors__rx = {
weight = 5,
title = "Errors (RX)",
overlay = true, -- don't summarize overlay = true, -- don't summarize
flip = true, -- flip rx line flip = true, -- flip rx line
total = true, -- report total amount of packets total = true, -- report total amount of packets
@ -122,6 +136,7 @@ function rrdargs( graph, plugin, plugin_instance )
options = { options = {
-- multicast packets -- multicast packets
if_multicast = { if_multicast = {
title = "Packets",
total = true, -- report total amount of packets total = true, -- report total amount of packets
color = "0000ff" -- multicast is blue color = "0000ff" -- multicast is blue
} }
@ -146,6 +161,7 @@ function rrdargs( graph, plugin, plugin_instance )
options = { options = {
-- collision rate -- collision rate
if_collisions = { if_collisions = {
title = "Collisions",
total = true, -- report total amount of packets total = true, -- report total amount of packets
color = "ff0000" -- collsions are red color = "ff0000" -- collsions are red
} }
@ -173,15 +189,19 @@ function rrdargs( graph, plugin, plugin_instance )
}, },
-- special options for single data lines -- special options for single data lines
options = { -- XXX: fixme (define colors...) options = {
if_tx_errors = { if_tx_errors_aborted_value = { total = true, color = "ffff00", title = "Aborted (TX)" },
total = true if_tx_errors_carrier_value = { total = true, color = "ffcc00", title = "Carrier (TX)" },
}, if_tx_errors_fifo_value = { total = true, color = "ff9900", title = "Fifo (TX)" },
if_tx_errors_heartbeat_value = { total = true, color = "ff6600", title = "Heartbeat (TX)" },
if_tx_errors_window_value = { total = true, color = "ff3300", title = "Window (TX)" },
if_rx_errors = { if_rx_errors_length_value = { flip = true, total = true, color = "ff0000", title = "Length (RX)" },
flip = true, if_rx_errors_missed_value = { flip = true, total = true, color = "ff0033", title = "Missed (RX)" },
total = true if_rx_errors_over_value = { flip = true, total = true, color = "ff0066", title = "Over (RX)" },
} if_rx_errors_crc_value = { flip = true, total = true, color = "ff0099", title = "CRC (RX)" },
if_rx_errors_fifo_value = { flip = true, total = true, color = "ff00cc", title = "Fifo (RX)" },
if_rx_errors_frame_value = { flip = true, total = true, color = "ff00ff", title = "Frame (RX)" }
} }
} }
} }

View file

@ -44,9 +44,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
y_max = "100", y_max = "100",
number_format = "%5.1lf%%", number_format = "%5.1lf%%",
data = { data = {
sources = {
percent = { "percent" }
},
instances = { instances = {
percent = "charge" percent = "charge"
}, },
@ -77,9 +74,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
vlabel = "Minutes", vlabel = "Minutes",
number_format = "%.1lfm", number_format = "%.1lfm",
data = { data = {
sources = {
timeleft = { "timeleft" }
},
instances = { instances = {
timeleft = { "battery" } timeleft = { "battery" }
}, },

View file

@ -6,24 +6,23 @@ module("luci.statistics.rrdtool.definitions.ping", package.seeall)
function rrdargs( graph, plugin, plugin_instance, dtype ) function rrdargs( graph, plugin, plugin_instance, dtype )
return { return {
-- Ping roundtrip time -- Ping roundtrip time
{ title = "%H: ICMP Round Trip Time", vlabel = "ms", { title = "%H: ICMP Round Trip Time",
number_format = "%5.1lf ms", data = { vlabel = "ms",
number_format = "%5.1lf ms",
data = {
sources = { ping = { "value" } }, sources = { ping = { "value" } },
options = { ping__ping = { noarea = true, title = "%di" } } options = { ping__value = {
noarea = true, overlay = true, title = "%di" } }
} }, } },
-- Ping droprate -- Ping droprate
{ title = "%H: ICMP Drop Rate", vlabel = "%", { title = "%H: ICMP Drop Rate",
number_format = "%5.2lf %%", data = { vlabel = "%",
number_format = "%5.2lf %%",
data = {
types = { "ping_droprate" }, types = { "ping_droprate" },
options = { ping_droprate = { title = "%di" } } options = { ping_droprate = {
} }, noarea = true, overlay = true, title = "%di" } }
} }
-- Ping standard deviation
{ title = "%H: ICMP Standard Deviation", vlabel = "ms",
number_format = "%5.2lf ms", data = {
types = { "ping_stddev" },
options = { ping_stddev = { title = "%di" } }
} },
} }
end end

View file

@ -8,7 +8,10 @@
<h2><a id="content" name="content"><%:Statistics%></a></h2> <h2><a id="content" name="content"><%:Statistics%></a></h2>
<p><%_The statistics package is based on <a href="http://collectd.org/index.shtml">Collectd</a> <p><%_The statistics package uses <a href="https://collectd.org/">Collectd</a>
and uses <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> to render diagram images from collected data.%></p> to gather data and <a href="http://oss.oetiker.ch/rrdtool/">RRDtool</a> to
render diagram images.%></p>
<p><%_You can install additional collectd-mod-* plugins to enable more statistics.%></p>
<%+footer%> <%+footer%>

View file

@ -63,9 +63,6 @@ msgstr ""
msgid "CollectTopology" msgid "CollectTopology"
msgstr "" msgstr ""
msgid "Collectd"
msgstr "Collectd"
msgid "Collectd Settings" msgid "Collectd Settings"
msgstr "Configuració Collectd" msgstr "Configuració Collectd"
@ -132,6 +129,12 @@ msgstr "Adreça electrònica"
msgid "Enable this plugin" msgid "Enable this plugin"
msgstr "Activa aquest connector" msgstr "Activa aquest connector"
msgid "Entropy"
msgstr ""
msgid "Entropy Plugin Configuration"
msgstr ""
msgid "Exec" msgid "Exec"
msgstr "Exec" msgstr "Exec"
@ -150,6 +153,9 @@ msgstr "Neteja la memòria cau després de"
msgid "Forwarding between listen and server addresses" msgid "Forwarding between listen and server addresses"
msgstr "Readreçant entre adreces que reben connexions i adreces de servidors" msgstr "Readreçant entre adreces que reben connexions i adreces de servidors"
msgid "General plugins"
msgstr ""
msgid "Graphs" msgid "Graphs"
msgstr "Gràfics" msgstr "Gràfics"
@ -227,6 +233,11 @@ msgstr "Interfícies que reben connexions"
msgid "Load Plugin Configuration" msgid "Load Plugin Configuration"
msgstr "Configuració de connector de càrrega" msgstr "Configuració de connector de càrrega"
msgid ""
"Max values for a period can be used instead of averages when not using 'only "
"average RRAs'"
msgstr ""
msgid "Maximum allowed connections" msgid "Maximum allowed connections"
msgstr "Connexions màximes permeses" msgstr "Connexions màximes permeses"
@ -368,9 +379,15 @@ msgstr "Màquina servidor"
msgid "Server port" msgid "Server port"
msgstr "Port del servidor" msgstr "Port del servidor"
msgid "Setup"
msgstr ""
msgid "Shaping class monitoring" msgid "Shaping class monitoring"
msgstr "Monitoreig de classe shaping" msgstr "Monitoreig de classe shaping"
msgid "Show max values instead of averages"
msgstr ""
msgid "Socket file" msgid "Socket file"
msgstr "Fitxer d'endoll" msgstr "Fitxer d'endoll"
@ -418,9 +435,6 @@ msgstr "Marques de temps emmagatzemades"
msgid "System Load" msgid "System Load"
msgstr "Càrrega de sistema" msgstr "Càrrega de sistema"
msgid "System plugins"
msgstr "Connectors de sistema"
msgid "TCP Connections" msgid "TCP Connections"
msgstr "Connexions TCP" msgstr "Connexions TCP"
@ -492,6 +506,9 @@ msgstr ""
"es fa servir en conjunció amb Mail::SpamAssassin::Plugin. Plugin::Collectd " "es fa servir en conjunció amb Mail::SpamAssassin::Plugin. Plugin::Collectd "
"també es pot utilitzar d'altres maneres." "també es pot utilitzar d'altres maneres."
msgid "The entropy plugin collects statistics about the available entropy."
msgstr ""
msgid "" msgid ""
"The exec plugin starts external commands to read values from or to notify " "The exec plugin starts external commands to read values from or to notify "
"external processes when certain threshold values have been reached." "external processes when certain threshold values have been reached."
@ -545,7 +562,7 @@ msgstr ""
msgid "" msgid ""
"The network plugin provides network based communication between different " "The network plugin provides network based communication between different "
"collectd instances. Collectd can operate both in client and server mode. In " "collectd instances. Collectd can operate both in client and server mode. In "
"client mode locally collected date is transferred to a collectd server " "client mode locally collected data is transferred to a collectd server "
"instance, in server mode the local instance receives data from other hosts." "instance, in server mode the local instance receives data from other hosts."
msgstr "" msgstr ""
"El connector de xarxa proporciona comunicacions basades en xarxa entre " "El connector de xarxa proporciona comunicacions basades en xarxa entre "
@ -585,14 +602,10 @@ msgid ""
msgstr "" msgstr ""
msgid "" msgid ""
"The statistics package is based on <a href=\"http://collectd.org/index.shtml" "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
"Tool</a> to render diagram images from collected data." "render diagram images."
msgstr "" msgstr ""
"El paquet d'estadísitiques està basat en <a href=\"http://collectd.org/index."
"shtml\">Collectd</a> i utilitza l'eina <a href=\"http://oss.oetiker.ch/"
"rrdtool/\">RRD</a> per renderitzar imatges de diagrama de les dades "
"recoliildes."
msgid "" msgid ""
"The tcpconns plugin collects informations about open tcp connections on " "The tcpconns plugin collects informations about open tcp connections on "
@ -663,6 +676,10 @@ msgstr "Wireless"
msgid "Wireless iwinfo Plugin Configuration" msgid "Wireless iwinfo Plugin Configuration"
msgstr "" msgstr ""
msgid ""
"You can install additional collectd-mod-* plugins to enable more statistics."
msgstr ""
msgid "e.g. br-ff" msgid "e.g. br-ff"
msgstr "p.e. br-ff" msgstr "p.e. br-ff"
@ -684,6 +701,22 @@ msgstr "segons; múltiples separats per espais"
msgid "server interfaces" msgid "server interfaces"
msgstr "interfícies de servidor" msgstr "interfícies de servidor"
#~ msgid "Collectd"
#~ msgstr "Collectd"
#~ msgid "System plugins"
#~ msgstr "Connectors de sistema"
#~ msgid ""
#~ "The statistics package is based on <a href=\"http://collectd.org/index."
#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/"
#~ "\">RRD Tool</a> to render diagram images from collected data."
#~ msgstr ""
#~ "El paquet d'estadísitiques està basat en <a href=\"http://collectd.org/"
#~ "index.shtml\">Collectd</a> i utilitza l'eina <a href=\"http://oss.oetiker."
#~ "ch/rrdtool/\">RRD</a> per renderitzar imatges de diagrama de les dades "
#~ "recoliildes."
#~ msgid "" #~ msgid ""
#~ "The wireless plugin collects statistics about wireless signal strength, " #~ "The wireless plugin collects statistics about wireless signal strength, "
#~ "noise and quality." #~ "noise and quality."

Some files were not shown because too many files have changed in this diff Show more