Compare commits
153 commits
Author | SHA1 | Date | |
---|---|---|---|
|
5537d68ec3 | ||
|
5fa2132080 | ||
|
1201b1a171 | ||
|
13aa5ffb7c | ||
|
e18404a1f7 | ||
|
1a4fe7068c | ||
|
a3062723d3 | ||
|
78c1566a1e | ||
|
d89b022b97 | ||
|
830d1095eb | ||
|
cca792beee | ||
|
9ba4eea12a | ||
|
d4bec26286 | ||
|
90474569d2 | ||
|
6f5c46681b | ||
|
692049432c | ||
|
70a4d43cc8 | ||
|
798e7361ed | ||
|
0eef20a066 | ||
|
cfd3bb1aba | ||
|
1e4705d904 | ||
|
a64448b16b | ||
|
84083ce54d | ||
|
d2054da3a2 | ||
|
a0f22fdec9 | ||
|
7a4741ebbd | ||
|
06a32ecdca | ||
|
d7e36244dd | ||
|
30fbac75ac | ||
|
0b84fe25a6 | ||
|
234ca580c7 | ||
|
11d5867a45 | ||
|
51afb12611 | ||
|
c0ae328b63 | ||
|
b2271ea5bc | ||
|
fdc0783b88 | ||
|
605d1f1947 | ||
|
34dbc700c6 | ||
|
b7c182165f | ||
|
f2ffa30a76 | ||
|
0207cb7a17 | ||
|
2c34a421a9 | ||
|
e8b6cbb530 | ||
|
4a211573d9 | ||
|
d710d218c8 | ||
|
2e4dea8046 | ||
|
53b75d4562 | ||
|
f1190e2d07 | ||
|
b83942a596 | ||
|
4b594cb1aa | ||
|
e2f9172b21 | ||
|
cdcdfd2594 | ||
|
80a09b604b | ||
|
a23d69eb71 | ||
|
3201903e37 | ||
|
31cfd4df4c | ||
|
956be55671 | ||
|
f80351df6f | ||
|
6e179419dc | ||
|
b7fe44ab0b | ||
|
7ad426e54f | ||
|
ce36802229 | ||
|
1902e1454b | ||
|
ab31abd244 | ||
|
4e44955ab2 | ||
|
7200d69cae | ||
|
5511c29bdf | ||
|
a66c08849a | ||
|
4b048cd18c | ||
|
eb1ff5b8e6 | ||
|
d38c2394b9 | ||
|
103e5a39b0 | ||
|
ae4f8d5cd8 | ||
|
18d9c672c0 | ||
|
8a9ff2b210 | ||
|
d4b293bfb0 | ||
|
7b3fea1100 | ||
|
c8b12e7fa9 | ||
|
ce5c787989 | ||
|
3e199390f7 | ||
|
fcc24dbbc2 | ||
|
ce4ee38f46 | ||
|
321864a213 | ||
|
4bff6283af | ||
|
94d8e86941 | ||
|
8832d534e9 | ||
|
f21eb789e1 | ||
|
af9f093104 | ||
|
6787a0aa61 | ||
|
0b72c51475 | ||
|
5e7c0f0a3b | ||
|
720f76c561 | ||
|
342af521eb | ||
|
75327e3c35 | ||
|
30f6fe82af | ||
|
d91f0ef027 | ||
|
8e156d6e5c | ||
|
a2a61aae0f | ||
|
8b1de85db8 | ||
|
3836b457b6 | ||
|
b179283a67 | ||
|
8d2b5702ec | ||
|
7167d97d32 | ||
|
27ca0790ec | ||
|
f6a4436d84 | ||
|
119eaf24d8 | ||
|
18593ecf00 | ||
|
791ca8b6d2 | ||
|
21cf10ca63 | ||
|
36a7fb48da | ||
|
22f687d0b1 | ||
|
7d8163e568 | ||
|
428d181bf3 | ||
|
c595f3095b | ||
|
3a7d738e27 | ||
|
91faca4009 | ||
|
5d71ab50fb | ||
|
7d1ed597c3 | ||
|
69fd4f14ee | ||
|
69e93baa2a | ||
|
218e8f608e | ||
|
eb001ef897 | ||
|
cf2e3f6c20 | ||
|
3a9e1af526 | ||
|
e3ee086d19 | ||
|
9eb813979e | ||
|
2be6c91416 | ||
|
fe3e14a716 | ||
|
0382c12140 | ||
|
84189026ad | ||
|
1a647a9e3b | ||
|
b0d1ce83b6 | ||
|
8fa78cf0d3 | ||
|
7c7bad55d4 | ||
|
8005ecb2b9 | ||
|
aff488d5d1 | ||
|
f27ebb620c | ||
|
3d08fcb632 | ||
|
0cf485c0d1 | ||
|
4ff133fe75 | ||
|
ffd45fd9c5 | ||
|
c2d3b9ed4f | ||
|
0ccfd59325 | ||
|
e00760a753 | ||
|
65e5e0dd89 | ||
|
a497fbab4c | ||
|
12cbfc8ec4 | ||
|
fdc83620a5 | ||
|
640ed04a86 | ||
|
ce3179c6d1 | ||
|
d009a73bd1 | ||
|
7a54785ea6 | ||
|
c43879f59c |
220 changed files with 10061 additions and 4271 deletions
|
@ -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.
|
||||||
|
|
14
applications/luci-app-adblock/Makefile
Normal file
14
applications/luci-app-adblock/Makefile
Normal 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
|
12
applications/luci-app-adblock/luasrc/controller/adblock.lua
Normal file
12
applications/luci-app-adblock/luasrc/controller/adblock.lua
Normal 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
|
103
applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
Normal file
103
applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
Normal 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
|
||||||
|
|
11
applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock
Executable file
11
applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock
Executable 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
|
|
@ -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 не запущена."
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 "Стандартный вывод"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>';
|
||||||
|
|
|
@ -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_":
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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'"
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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 ""
|
||||||
|
|
||||||
|
|
|
@ -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"
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ""
|
|
||||||
#~ "Перенаправление трафика позволяет изменить адрес получателя для "
|
|
||||||
#~ "проходящих пакетов."
|
|
||||||
|
|
17
applications/luci-app-fwknopd/Makefile
Normal file
17
applications/luci-app-fwknopd/Makefile
Normal 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
|
15
applications/luci-app-fwknopd/luasrc/controller/fwknopd.lua
Normal file
15
applications/luci-app-fwknopd/luasrc/controller/fwknopd.lua
Normal 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
|
54
applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua
Normal file
54
applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua
Normal 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
|
||||||
|
|
1
applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm
Normal file
1
applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<% print(luci.sys.exec("sh /usr/sbin/gen-qr.sh")) %>
|
113
applications/luci-app-fwknopd/po/en/fwknopd.po
Normal file
113
applications/luci-app-fwknopd/po/en/fwknopd.po
Normal 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"
|
125
applications/luci-app-fwknopd/po/ru/fwknopd.po
Normal file
125
applications/luci-app-fwknopd/po/ru/fwknopd.po
Normal 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-имени."
|
83
applications/luci-app-fwknopd/po/templates/fwknopd.pot
Normal file
83
applications/luci-app-fwknopd/po/templates/fwknopd.pot
Normal 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 ""
|
|
@ -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
|
22
applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
Normal file
22
applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
Normal 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"
|
|
@ -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 "Единицы времени бездействия"
|
||||||
|
|
|
@ -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). Можно "
|
||||||
|
#~ "выбрать сразу несколько папок."
|
||||||
|
|
177
applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
Normal file
177
applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
Normal 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 "Настроить плагины"
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 = {}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 - номер первого принтера."
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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 "Включить"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
524
applications/luci-app-privoxy/po/ru/privoxy.po
Normal file
524
applications/luci-app-privoxy/po/ru/privoxy.po
Normal 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"
|
468
applications/luci-app-privoxy/po/zh-cn/privoxy.po
Normal file
468
applications/luci-app-privoxy/po/zh-cn/privoxy.po
Normal 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 "需要"
|
|
@ -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 "Cкорость передачи<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 "Восходящий канал"
|
|
||||||
|
|
41
applications/luci-app-radicale/Makefile
Normal file
41
applications/luci-app-radicale/Makefile
Normal 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
|
195
applications/luci-app-radicale/luasrc/controller/radicale.lua
Normal file
195
applications/luci-app-radicale/luasrc/controller/radicale.lua
Normal 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
|
748
applications/luci-app-radicale/luasrc/model/cbi/radicale.lua
Normal file
748
applications/luci-app-radicale/luasrc/model/cbi/radicale.lua
Normal 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"> ]]
|
||||||
|
.. translate("Software package '" .. TOOLS.service_name() .. "' is not installed.")
|
||||||
|
.. [[</font><br /><br /> ]]
|
||||||
|
.. translate("required") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_required()
|
||||||
|
.. [[<br /><br /> ]]
|
||||||
|
.. [[<a href="]] .. DISP.build_url("admin", "system", "packages") ..[[">]]
|
||||||
|
.. translate("Please install current version !")
|
||||||
|
.. [[</a><br /> </strong></h3>]]
|
||||||
|
else
|
||||||
|
v.value = [[<h3><strong><br /><font color="red"> ]]
|
||||||
|
.. translate("Software package '" .. TOOLS.service_name() .. "' is outdated.")
|
||||||
|
.. [[</font><br /><br /> ]]
|
||||||
|
.. translate("installed") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_installed()
|
||||||
|
.. [[<br /> ]]
|
||||||
|
.. translate("required") .. [[: ]] .. TOOLS.service_name() .. [[ ]] .. TOOLS.service_required()
|
||||||
|
.. [[<br /><br /> ]]
|
||||||
|
.. [[<a href="]] .. DISP.build_url("admin", "system", "packages") ..[[">]]
|
||||||
|
.. translate("Please update to current version !")
|
||||||
|
.. [[</a><br /> </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
|
|
@ -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 ++ -->
|
|
@ -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%>
|
435
applications/luci-app-radicale/po/de/radicale.po
Normal file
435
applications/luci-app-radicale/po/de/radicale.po
Normal 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 !"
|
463
applications/luci-app-radicale/po/ru/radicale.po
Normal file
463
applications/luci-app-radicale/po/ru/radicale.po
Normal 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 "не указан допустимый путь!"
|
381
applications/luci-app-radicale/po/templates/radicale.pot
Normal file
381
applications/luci-app-radicale/po/templates/radicale.pot
Normal 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 ""
|
12
applications/luci-app-radicale/root/etc/uci-defaults/luci-radicale
Executable file
12
applications/luci-app-radicale/root/etc/uci-defaults/luci-radicale
Executable 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
|
|
@ -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 ""
|
||||||
|
#~ "Добавьте папки для совместного доступа. Каждая папка - соответствует "
|
||||||
|
#~ "разделу на подключенном устройстве."
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 "с владельцем этой точки доступа."
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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."
|
||||||
))
|
))
|
||||||
|
|
|
@ -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") )
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" },
|
||||||
|
|
|
@ -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" }
|
||||||
|
|
|
@ -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)" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" }
|
||||||
},
|
},
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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%>
|
||||||
|
|
|
@ -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
Loading…
Reference in a new issue