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
|
||||
|
||||
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
|
||||
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:
|
||||
|
||||
* Have a useful subject prefixed with the component name
|
||||
(E.g.: "modules/admin-full: fix wifi channel selection on multiple STA networks")
|
||||
* Have a useful subject prefixed with the component name
|
||||
(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
|
||||
* 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>)
|
||||
|
||||
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.
|
||||
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.
|
||||
* 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
|
||||
useful pull requests and / or feedback or patches to this repository or
|
||||
OpenWrt in general. Please include your request for commit access in your
|
||||
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
|
||||
during the release stabilisation phase.
|
||||
* 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 ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: LuCI: ahcp\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2013-09-05 15:29+0200\n"
|
||||
"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
|
||||
"Language-Team: Russian <x12ozmouse@ya.ru>\n"
|
||||
"POT-Creation-Date: 2013-09-05 15:29+0200\n"
|
||||
"PO-Revision-Date: 2018-01-18 17:55+0300\n"
|
||||
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
|
||||
"Language-Team: http://cyber-place.ru\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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"
|
||||
"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"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
# Ad-Hoc Configuration Protocol - протокол автоматической конфигурации IPv6 и сетей IPv6/IPv4 двойного стека
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP-сервер"
|
||||
msgstr "AHCP сервер"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"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 where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP - это протокол автоматической конфигурации сетей IPv6 и IPv6/IPv4, "
|
||||
"AHCP - это протокол автоматической настройки сетей IPv6 и IPv6/IPv4, "
|
||||
"разработанный для использования вместо DHCP и протоколов обнаружения "
|
||||
"маршрутизаторов в сетях, где сложно или невозможно настроить сервер внутри "
|
||||
"каждой широковещательной зоны канального уровня, например, в мобильных ad-"
|
||||
"hoc сетях."
|
||||
"каждой широковещательной зоны канального уровня, например в мобильных ad-hoc "
|
||||
"сетях."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Активные арендованные AHCP-адреса"
|
||||
|
@ -44,23 +44,22 @@ msgid "Age"
|
|||
msgstr "Возраст"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Анонсируемые DNS-серверы"
|
||||
msgstr "Объявить DNS сервера"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "Анонсируемые NTP-серверы"
|
||||
msgstr "Объявить NTP сервера"
|
||||
|
||||
msgid "Announced prefixes"
|
||||
msgstr "Анонсируемые префиксы"
|
||||
msgstr "Объявить префиксы"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Сбор данных..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Forwarder"
|
||||
msgstr "Перенаправление запросов"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Общие настройки"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 и IPv6"
|
||||
|
@ -72,7 +71,7 @@ msgid "IPv6 only"
|
|||
msgstr "Только IPv6"
|
||||
|
||||
msgid "Lease directory"
|
||||
msgstr "Директория арендованных адресов"
|
||||
msgstr "Файл арендованных<br />адресов"
|
||||
|
||||
msgid "Lease validity time"
|
||||
msgstr "Срок действия аренды"
|
||||
|
@ -81,7 +80,7 @@ msgid "Log file"
|
|||
msgstr "Файл журнала"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Групповой адрес"
|
||||
msgstr "Адрес групповой передачи"
|
||||
|
||||
msgid "Operation mode"
|
||||
msgstr "Режим работы"
|
||||
|
@ -90,7 +89,7 @@ msgid "Port"
|
|||
msgstr "Порт"
|
||||
|
||||
msgid "Protocol family"
|
||||
msgstr "Протокол"
|
||||
msgstr "Семейство протоколов"
|
||||
|
||||
msgid "Served interfaces"
|
||||
msgstr "Используемые интерфейсы"
|
||||
|
@ -99,13 +98,13 @@ msgid "Server"
|
|||
msgstr "Сервер"
|
||||
|
||||
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"
|
||||
msgstr "Определяет IPv4 и IPv6 DNS-серверы"
|
||||
msgstr "Задайте IPv4 и IPv6 DNS-серверы."
|
||||
|
||||
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."
|
||||
msgstr "Служба AHCP не запущена."
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Support for Asterisk
|
||||
LUCI_DEPENDS:=+ahcpd
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
|
|
|
@ -1,41 +1,43 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\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 short textual description of the configured command"
|
||||
msgstr "Короткое текстовое описание команды"
|
||||
|
||||
msgid "Access command with"
|
||||
msgstr "Доступ к команде через"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Allow executing the command and downloading its output without prior "
|
||||
"authentication"
|
||||
msgstr ""
|
||||
"Разрешить выполнение команды и загрузку ее вывода без предварительной "
|
||||
"аутентификации"
|
||||
"Разрешить выполнение команды и загрузку ее выходных данных без ввода пароля "
|
||||
"пользователя"
|
||||
|
||||
msgid "Allow the user to provide additional command line arguments"
|
||||
msgstr ""
|
||||
"Разрешить пользователям использовать дополнительные аргументы командной "
|
||||
"Разрешить пользователю предоставлять дополнительные аргументы командной "
|
||||
"строки"
|
||||
|
||||
msgid "Arguments:"
|
||||
msgstr "Аргументы:"
|
||||
|
||||
msgid "Binary data not displayed, download instead."
|
||||
msgstr "Двоичные данные не отображаются, вместо этого - выгружаются"
|
||||
msgstr "Двоичные данные не отображаются, вместо этого загружаются."
|
||||
|
||||
msgid "Code:"
|
||||
msgstr "Код:"
|
||||
|
@ -47,10 +49,10 @@ msgid "Command"
|
|||
msgstr "Команда"
|
||||
|
||||
msgid "Command failed"
|
||||
msgstr "Команда не выполнена"
|
||||
msgstr "Ошибка команды"
|
||||
|
||||
msgid "Command line to execute"
|
||||
msgstr "Командная строка для выполнения"
|
||||
msgstr "Командная строка<br />для выполнения"
|
||||
|
||||
msgid "Command successful"
|
||||
msgstr "Команда выполнена"
|
||||
|
@ -59,7 +61,7 @@ msgid "Command:"
|
|||
msgstr "Команда:"
|
||||
|
||||
msgid "Configure"
|
||||
msgstr "Настроить"
|
||||
msgstr "Настройка панели управления"
|
||||
|
||||
msgid "Custom Commands"
|
||||
msgstr "Пользовательские команды"
|
||||
|
@ -68,7 +70,7 @@ msgid "Custom arguments"
|
|||
msgstr "Пользовательские аргументы"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Информационная панель"
|
||||
msgstr "Панель управления"
|
||||
|
||||
msgid "Description"
|
||||
msgstr "Описание"
|
||||
|
@ -95,8 +97,27 @@ msgid ""
|
|||
"This page allows you to configure custom shell commands which can be easily "
|
||||
"invoked from the web interface."
|
||||
msgstr ""
|
||||
"Эта страница предоставляет возможность настраивать пользовательские "
|
||||
"консольные команды, которые могут быть легко вызваны из веб-интерфейса"
|
||||
"Страница позволяет настроить выполнение консольных команд пользователя, "
|
||||
"которые могут быть легко вызваны из веб-интерфейса по нажатию "
|
||||
"соответствующей кнопки. Здесь вы можете подписать кнопки и указать команды."
|
||||
|
||||
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 .
|
||||
#
|
||||
|
@ -10,7 +10,7 @@ PKG_NAME:=luci-app-ddns
|
|||
|
||||
# Version == major.minor.patch
|
||||
# increase on new functionality (minor) or patches (patch)
|
||||
PKG_VERSION:=2.2.2
|
||||
PKG_VERSION:=2.2.5
|
||||
|
||||
# Release == build
|
||||
# increase on changes of translation files
|
||||
|
@ -33,6 +33,6 @@ help
|
|||
$(PKG_MAINTAINER)
|
||||
endef
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- 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.
|
||||
|
||||
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 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()
|
||||
local nxfs = require "nixio.fs" -- global definitions not available
|
||||
|
@ -118,13 +119,19 @@ local function _get_status()
|
|||
end
|
||||
|
||||
-- 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 force_ipversion = tonumber(s["force_ipversion"] or 0)
|
||||
local force_dnstcp = tonumber(s["force_dnstcp"] or 0)
|
||||
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]]
|
||||
command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 ..
|
||||
[[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver
|
||||
local is_glue = tonumber(s["is_glue"] or 0)
|
||||
local command = luci_helper .. [[ -]]
|
||||
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)
|
||||
if reg_ip == "" then
|
||||
reg_ip = "_nodata_"
|
||||
|
@ -135,7 +142,7 @@ local function _get_status()
|
|||
section = section,
|
||||
enabled = enabled,
|
||||
iface = iface,
|
||||
domain = domain,
|
||||
lookup = lookup_host,
|
||||
reg_ip = reg_ip,
|
||||
pid = pid,
|
||||
datelast = datelast,
|
||||
|
@ -151,7 +158,7 @@ end
|
|||
function logread(section)
|
||||
-- read application settings
|
||||
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 ldata = NXFS.readfile(lfile)
|
||||
|
||||
|
@ -220,7 +227,8 @@ function startstop(section, enabled)
|
|||
uci:unload("ddns")
|
||||
|
||||
-- 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"
|
||||
|
||||
-- status changed so return full status
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- 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.
|
||||
|
||||
local NX = require "nixio"
|
||||
|
@ -12,6 +12,7 @@ local DISP = require "luci.dispatcher"
|
|||
local WADM = require "luci.tools.webadmin"
|
||||
local DTYP = require "luci.cbi.datatypes"
|
||||
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
|
||||
local CTRL = require "luci.controller.ddns" -- this application's controller
|
||||
|
||||
-- takeover arguments -- #######################################################
|
||||
local section = arg[1]
|
||||
|
@ -67,42 +68,39 @@ end
|
|||
-- local IP can be read
|
||||
local function _verify_ip_source()
|
||||
-- section is globally defined here be calling agrument (see above)
|
||||
local _network = "-"
|
||||
local _url = "-"
|
||||
local _interface = "-"
|
||||
local _script = "-"
|
||||
local _proxy = ""
|
||||
local _arg
|
||||
|
||||
local _ipv6 = usev6:formvalue(section)
|
||||
local _source = (_ipv6 == "1")
|
||||
and src6:formvalue(section)
|
||||
or src4:formvalue(section)
|
||||
|
||||
local command = CTRL.luci_helper .. [[ -]]
|
||||
if (_ipv6 == "1") then command = command .. [[6]] end
|
||||
|
||||
if _source == "network" then
|
||||
_network = (_ipv6 == "1")
|
||||
_arg = (_ipv6 == "1")
|
||||
and ipn6:formvalue(section)
|
||||
or ipn4:formvalue(section)
|
||||
command = command .. [[n ]] .. _arg
|
||||
elseif _source == "web" then
|
||||
_url = (_ipv6 == "1")
|
||||
_arg = (_ipv6 == "1")
|
||||
and iurl6:formvalue(section)
|
||||
or iurl4:formvalue(section)
|
||||
command = command .. [[u ]] .. _arg
|
||||
|
||||
-- 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
|
||||
_interface = ipi:formvalue(section)
|
||||
command = command .. [[i ]] .. ipi:formvalue(section)
|
||||
elseif _source == "script" then
|
||||
_script = 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
|
||||
command = command .. [[s ]] .. ips:formvalue(section)
|
||||
end
|
||||
command = command .. [[ -- get_local_ip]]
|
||||
return (SYS.call(command) == 0)
|
||||
end
|
||||
|
||||
-- cbi-map definition -- #######################################################
|
||||
|
@ -129,9 +127,9 @@ end
|
|||
|
||||
-- read application settings -- ################################################
|
||||
-- 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_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 -- ###################################################
|
||||
ns = m:section( NamedSection, section, "service",
|
||||
|
@ -157,6 +155,25 @@ function en.parse(self, section)
|
|||
DDNS.flag_parse(self, section)
|
||||
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) -- ##########################################################
|
||||
usev6 = ns:taboption("basic", ListValue, "use_ipv6",
|
||||
translate("IP address version"),
|
||||
|
@ -195,7 +212,7 @@ svc4.default = "-"
|
|||
svc4:depends("use_ipv6", "0") -- only show on IPv4
|
||||
|
||||
local services4 = { }
|
||||
local fd4 = io.open("/usr/lib/ddns/services", "r")
|
||||
local fd4 = io.open("/etc/ddns/services", "r")
|
||||
|
||||
if fd4 then
|
||||
local ln
|
||||
|
@ -247,7 +264,7 @@ if not has_ipv6 then
|
|||
end
|
||||
|
||||
local services6 = { }
|
||||
local fd6 = io.open("/usr/lib/ddns/services_ipv6", "r")
|
||||
local fd6 = io.open("/etc/ddns/services_ipv6", "r")
|
||||
|
||||
if fd6 then
|
||||
local ln
|
||||
|
@ -936,8 +953,10 @@ function dns.validate(self, value)
|
|||
else
|
||||
local ipv6 = usev6:formvalue(section)
|
||||
local force = (fipv) and fipv:formvalue(section) or "0"
|
||||
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh verify_dns ]] ..
|
||||
value .. [[ ]] .. ipv6 .. [[ ]] .. force
|
||||
local command = CTRL.luci_helper .. [[ -]]
|
||||
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)
|
||||
if ret == 0 then return value -- everything OK
|
||||
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
|
||||
local ipv6 = usev6:formvalue(section) or "0"
|
||||
local force = (fipv) and fipv:formvalue(section) or "0"
|
||||
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh verify_proxy ]] ..
|
||||
value .. [[ ]] .. ipv6 .. [[ ]] .. force
|
||||
local command = CRTL.luci_helper .. [[ -]]
|
||||
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)
|
||||
if ret == 0 then return value
|
||||
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",
|
||||
translate("Log to file"),
|
||||
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.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
|
||||
|
@ -1156,11 +1177,13 @@ function fu.write(self, section, value)
|
|||
end
|
||||
|
||||
-- retry_count (NEW) -- ########################################################
|
||||
rc = ns:taboption("timer", Value, "retry_count",
|
||||
translate("Error Retry Counter"),
|
||||
translate("On Error the script will stop execution after given number of retrys") )
|
||||
rc.default = 5
|
||||
rc.rmempty = false -- validate ourselves for translatable error messages
|
||||
rc = ns:taboption("timer", Value, "retry_count")
|
||||
rc.title = translate("Error Retry Counter")
|
||||
rc.description = translate("On Error the script will stop execution after given number of retrys")
|
||||
.. "<br />"
|
||||
.. 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)
|
||||
if not DTYP.uinteger(value) then
|
||||
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.rows = 50
|
||||
function lv.cfgvalue(self, section)
|
||||
local lfile=log_dir .. "/" .. section .. ".log"
|
||||
local lfile=ddns_logdir .. "/" .. section .. ".log"
|
||||
if NXFS.access(lfile) then
|
||||
return lfile .. "\n" .. translate("Please press [Read] button")
|
||||
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.
|
||||
|
||||
local NX = require "nixio"
|
||||
|
@ -45,8 +45,8 @@ function ns.cfgvalue(self, section)
|
|||
return self.map:get(section)
|
||||
end
|
||||
|
||||
-- allow_local_ip -- ##########################################################
|
||||
local ali = ns:option(Flag, "allow_local_ip")
|
||||
-- upd_privateip -- ###########################################################
|
||||
local ali = ns:option(Flag, "upd_privateip")
|
||||
ali.title = translate("Allow non-public IP's")
|
||||
ali.description = translate("Non-public and by default blocked IP's") .. ":"
|
||||
.. [[<br /><strong>IPv4: </strong>]]
|
||||
|
@ -65,8 +65,8 @@ function ali.validate(self, value)
|
|||
return value
|
||||
end
|
||||
|
||||
-- date_format -- #############################################################
|
||||
local df = ns:option(Value, "date_format")
|
||||
-- ddns_dateformat -- #########################################################
|
||||
local df = ns:option(Value, "ddns_dateformat")
|
||||
df.title = translate("Date format")
|
||||
df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]]
|
||||
.. translate("For supported codes look here")
|
||||
|
@ -88,8 +88,8 @@ function df.validate(self, value)
|
|||
return value
|
||||
end
|
||||
|
||||
-- run_dir -- #################################################################
|
||||
local rd = ns:option(Value, "run_dir")
|
||||
-- ddns_rundir -- #############################################################
|
||||
local rd = ns:option(Value, "ddns_rundir")
|
||||
rd.title = translate("Status directory")
|
||||
rd.description = translate("Directory contains PID and other status information for each running section")
|
||||
rd.rmempty = true
|
||||
|
@ -101,8 +101,8 @@ function rd.validate(self, value)
|
|||
return value
|
||||
end
|
||||
|
||||
-- log_dir -- #################################################################
|
||||
local ld = ns:option(Value, "log_dir")
|
||||
-- ddns_logdir -- #############################################################
|
||||
local ld = ns:option(Value, "ddns_logdir")
|
||||
ld.title = translate("Log directory")
|
||||
ld.description = translate("Directory contains Log files for each running section")
|
||||
ld.rmempty = true
|
||||
|
@ -114,8 +114,8 @@ function ld.validate(self, value)
|
|||
return value
|
||||
end
|
||||
|
||||
-- log_lines -- ###############################################################
|
||||
local ll = ns:option(Value, "log_lines")
|
||||
-- ddns_loglines -- ###########################################################
|
||||
local ll = ns:option(Value, "ddns_loglines")
|
||||
ll.title = translate("Log length")
|
||||
ll.description = translate("Number of last lines stored in log files")
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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)
|
||||
if self.changed then -- changes ?
|
||||
local command = CTRL.luci_helper
|
||||
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
|
||||
os.execute("killall -1 dynamic_dns_updater.sh")
|
||||
command = command .. " -- reload"
|
||||
os.execute(command)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -123,31 +126,34 @@ function ts.create(self, name)
|
|||
HTTP.redirect( self.extedit:format(name) )
|
||||
end
|
||||
|
||||
-- Domain and registered IP -- #################################################
|
||||
dom = ts:option(DummyValue, "_domainIP",
|
||||
translate("Hostname/Domain") .. "<br />" .. translate("Registered IP") )
|
||||
-- Lookup_Host and registered IP -- #################################################
|
||||
dom = ts:option(DummyValue, "_lookupIP",
|
||||
translate("Lookup Hostname") .. "<br />" .. translate("Registered IP") )
|
||||
dom.template = "ddns/overview_doubleline"
|
||||
function dom.set_one(self, section)
|
||||
local domain = self.map:get(section, "domain") or ""
|
||||
if domain ~= "" then
|
||||
return domain
|
||||
local lookup = self.map:get(section, "lookup_host") or ""
|
||||
if lookup ~= "" then
|
||||
return lookup
|
||||
else
|
||||
return [[<em>]] .. translate("config error") .. [[</em>]]
|
||||
end
|
||||
end
|
||||
function dom.set_two(self, section)
|
||||
local domain = self.map:get(section, "domain") or ""
|
||||
if domain == "" then return "" end
|
||||
local lookup_host = self.map:get(section, "lookup_host") or ""
|
||||
if lookup_host == "" then return "" end
|
||||
local dnsserver = self.map:get(section, "dnsserver") or ""
|
||||
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_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0)
|
||||
local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]]
|
||||
if not NXFS.access(command, "rwx", "rx", "rx") then
|
||||
NXFS.chmod(command, 755)
|
||||
end
|
||||
command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 ..
|
||||
[[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver
|
||||
local is_glue = tonumber(self.map:get(section, "is_glue") or 0)
|
||||
local command = CTRL.luci_helper .. [[ -]]
|
||||
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 ip = SYS.exec(command)
|
||||
if ip == "" then ip = translate("no data") end
|
||||
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.
|
||||
|
||||
module("luci.tools.ddns", package.seeall)
|
||||
|
@ -35,17 +35,21 @@ end
|
|||
|
||||
-- check if Wget with SSL support or cURL installed
|
||||
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
|
||||
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
|
||||
return NXFS.access("/usr/bin/curl")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- check if Wget with SSL or cURL with proxy support installed
|
||||
function check_proxy()
|
||||
-- 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
|
||||
|
||||
-- if not installed cURL must support proxy
|
||||
|
@ -54,13 +58,13 @@ function check_proxy()
|
|||
|
||||
-- only BusyBox Wget is installed
|
||||
else
|
||||
return NXFS.access("/usr/bin/wget")
|
||||
return NXFS.access("/usr/bin/wget") or NXFS.access("/usr/bin/uclient-fetch")
|
||||
end
|
||||
end
|
||||
|
||||
-- check if BIND host installed
|
||||
function check_bind_host()
|
||||
return NXFS.access("/usr/bin/host")
|
||||
return NXFS.access("/usr/bin/host") or NXFS.access("/usr/bin/khost")
|
||||
end
|
||||
|
||||
-- convert epoch date to given format
|
||||
|
@ -98,8 +102,7 @@ end
|
|||
|
||||
-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
|
||||
function ipkg_ver_compare(ver1, comp, ver2)
|
||||
if not ver1 or not (#ver1 > 0)
|
||||
or not ver2 or not (#ver2 > 0)
|
||||
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 = "~="
|
||||
|
@ -116,33 +119,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
|
|||
for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
|
||||
local s1 = av1[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
|
||||
if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
|
||||
if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
|
||||
|
||||
local nc = (n1 and n2) -- numeric compare
|
||||
|
||||
if nc then
|
||||
-- first "not equal" found return true
|
||||
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
|
||||
-- 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 then true
|
||||
return true
|
||||
|
||||
-- all equal and not compare greater or lower then true
|
||||
return not (comp == "<" or comp == ">")
|
||||
end
|
||||
|
||||
-- read version information for given package if installed
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
var section = data[i].section // Section to handle
|
||||
var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled
|
||||
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 nup = document.getElementById("cbid.ddns." + section + "._update.two"); // Next Update
|
||||
if ( !(cbx && btn && rip && lup && nup) ) { return; } // security check
|
||||
|
@ -81,7 +81,7 @@
|
|||
|
||||
// registered IP
|
||||
// rip.innerHTML = "Registered IP";
|
||||
if (data[i].domain == "_nodomain_")
|
||||
if (data[i].lookup == "_nolookup_")
|
||||
rip.innerHTML = '';
|
||||
else if (data[i].reg_ip == "_nodata_")
|
||||
rip.innerHTML = '<em><%:No data%></em>';
|
||||
|
|
|
@ -73,11 +73,11 @@
|
|||
if (data[j].domain == "_nodomain_")
|
||||
tr.insertCell(-1).innerHTML = '<em><%:config error%></em>';
|
||||
else
|
||||
tr.insertCell(-1).innerHTML = data[j].domain;
|
||||
tr.insertCell(-1).innerHTML = data[j].lookup;
|
||||
|
||||
// registered IP
|
||||
switch (data[j].reg_ip) {
|
||||
case "_nodomain_":
|
||||
case "_nolookup_":
|
||||
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
|
||||
break;
|
||||
case "_nodata_":
|
||||
|
|
|
@ -251,6 +251,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -333,6 +336,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -462,6 +468,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -581,6 +590,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -249,6 +249,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -331,6 +334,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -460,6 +466,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -579,6 +588,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns\n"
|
||||
"POT-Creation-Date: 2015-02-08 18:30+0100\n"
|
||||
"PO-Revision-Date: 2015-02-08 18:36+0100\n"
|
||||
"POT-Creation-Date: 2015-05-08 21:29+0100\n"
|
||||
"PO-Revision-Date: 2015-05-08 21:47+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.5.4\n"
|
||||
"X-Generator: Poedit 1.7.5\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-Basepath: .\n"
|
||||
|
@ -287,6 +287,9 @@ msgstr "Hinweise"
|
|||
msgid "Hostname/Domain"
|
||||
msgstr "Rechnername/Domäne"
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr "IP-Adressquelle"
|
||||
|
||||
|
@ -385,6 +388,9 @@ msgstr "Protokoll in Datei schreiben"
|
|||
msgid "Log to syslog"
|
||||
msgstr "Systemprotokoll verwenden"
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -452,7 +458,7 @@ msgstr ""
|
|||
"wiederholen"
|
||||
|
||||
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"
|
||||
msgstr "Übersicht"
|
||||
|
@ -527,6 +533,9 @@ msgstr ""
|
|||
"Die installierte Software 'ddns-scripts' unterstützt nicht alle verfügbaren "
|
||||
"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."
|
||||
msgstr "Kein Dienst konfiguriert"
|
||||
|
||||
|
@ -661,6 +670,9 @@ msgstr "installiert"
|
|||
msgid "invalid - Sample"
|
||||
msgstr "ungültig - Beispiel"
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr "Minimum Wert '0'"
|
||||
|
||||
|
|
|
@ -248,6 +248,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -330,6 +333,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -459,6 +465,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -578,6 +587,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -246,6 +246,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -328,6 +331,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -457,6 +463,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -576,6 +585,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -250,6 +250,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -332,6 +335,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -461,6 +467,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -580,6 +589,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -249,6 +249,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -331,6 +334,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -460,6 +466,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -579,6 +588,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -245,6 +245,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -327,6 +330,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -456,6 +462,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -575,6 +584,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -238,6 +238,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -320,6 +323,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -449,6 +455,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -568,6 +577,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -248,6 +248,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -330,6 +333,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -459,6 +465,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -578,6 +587,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -249,6 +249,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -331,6 +334,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -460,6 +466,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -579,6 +588,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -250,6 +250,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -332,6 +335,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -461,6 +467,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -580,6 +589,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -240,6 +240,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -322,6 +325,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -451,6 +457,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -570,6 +579,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -241,6 +241,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -323,6 +326,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -452,6 +458,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -571,6 +580,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -233,6 +233,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -315,6 +318,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -444,6 +450,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -563,6 +572,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -329,6 +332,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -458,6 +464,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -577,6 +586,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -250,6 +250,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -332,6 +335,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -461,6 +467,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -580,6 +589,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -250,6 +250,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -332,6 +335,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -461,6 +467,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -580,6 +589,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 1.7.5\n"
|
||||
|
||||
msgid "&"
|
||||
msgstr ""
|
||||
|
||||
msgid "-- custom --"
|
||||
msgstr "-- 自定义 --"
|
||||
|
||||
|
@ -30,10 +33,13 @@ msgstr "正在应用更改"
|
|||
msgid "Basic Settings"
|
||||
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更新的设置贴士."
|
||||
|
||||
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设置项列表以及它们的当前状态."
|
||||
|
||||
msgid "Bind Network"
|
||||
|
@ -42,10 +48,14 @@ msgstr "使用的接口"
|
|||
msgid "Binding to a specific network not supported"
|
||||
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协议版本."
|
||||
|
||||
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记录"
|
||||
|
||||
msgid "Casual users should not change this setting"
|
||||
|
@ -63,7 +73,9 @@ msgstr "配置错误"
|
|||
msgid "Configuration"
|
||||
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服务的详细配置"
|
||||
|
||||
msgid "Configure here the details for selected Dynamic DNS service."
|
||||
|
@ -72,11 +84,20 @@ msgstr "在这里修改选择的DDNS服务的详细配置"
|
|||
msgid "Current setting"
|
||||
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')"
|
||||
msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话(例如使用cron时把force_interval设置为0),这是默认设置."
|
||||
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')"
|
||||
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."
|
||||
msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个设置的条目.它在下次重启之前一直有效."
|
||||
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."
|
||||
msgstr ""
|
||||
"现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个"
|
||||
"设置的条目.它在下次重启之前一直有效."
|
||||
|
||||
msgid "Custom update script to be used for updating your DDNS Provider."
|
||||
msgstr "用来更新动态DNS的自定义脚本"
|
||||
|
@ -117,10 +138,14 @@ msgstr "设定用来读取系统IPv4地址的网络"
|
|||
msgid "Defines the network to read systems IPv6-Address from"
|
||||
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提供商"
|
||||
|
||||
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提供商"
|
||||
|
||||
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"
|
||||
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以及其它状态信息的目录"
|
||||
|
||||
msgid "Disabled"
|
||||
|
@ -141,7 +167,9 @@ msgstr "已禁用"
|
|||
msgid "Dynamic 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的主机配置一个固定的可访问域名."
|
||||
|
||||
msgid "Enable secure communication with DDNS provider"
|
||||
|
@ -171,8 +199,12 @@ msgstr "文件未找到"
|
|||
msgid "File not found or empty"
|
||||
msgstr "文件未找到或为空"
|
||||
|
||||
msgid "Follow this link<br />You will find more hints to optimize your system to run DDNS scripts with all options"
|
||||
msgstr "打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS脚本的提示."
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr "请看这里获得关于参数设置的详细信息"
|
||||
|
@ -201,7 +233,9 @@ msgstr "格式"
|
|||
msgid "Format: IP or 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将会使用物理接口"
|
||||
|
||||
msgid "Global Settings"
|
||||
|
@ -216,6 +250,9 @@ msgstr "提示"
|
|||
msgid "Hostname/Domain"
|
||||
msgstr "主机名/域名"
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr "IP地址来源"
|
||||
|
||||
|
@ -228,8 +265,13 @@ msgstr "IPv4地址"
|
|||
msgid "IPv6 address must be given in square brackets"
|
||||
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"
|
||||
msgstr "当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持<br />或者更新你的系统到最新OpenWrt版本"
|
||||
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"
|
||||
msgstr ""
|
||||
"当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持"
|
||||
"<br />或者更新你的系统到最新OpenWrt版本"
|
||||
|
||||
msgid "IPv6 not supported"
|
||||
msgstr "IPv6不被支持"
|
||||
|
@ -240,13 +282,21 @@ msgstr "IPv6地址"
|
|||
msgid "If both cURL and GNU Wget are installed, Wget is used by default."
|
||||
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"
|
||||
msgstr "如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端."
|
||||
msgid ""
|
||||
"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'"
|
||||
msgstr "如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例如'myddns_ipv4'和'myddns_ipv6')"
|
||||
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'"
|
||||
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的某些版本编译时没有启用代理服务器支持"
|
||||
|
||||
msgid "Info"
|
||||
|
@ -255,11 +305,18 @@ msgstr "信息"
|
|||
msgid "Interface"
|
||||
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秒)的数值."
|
||||
|
||||
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"
|
||||
msgstr "强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次<br />不支持低于\"检查时间周期\"的数值(除了0)."
|
||||
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"
|
||||
msgstr ""
|
||||
"强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次"
|
||||
"<br />不支持低于\"检查时间周期\"的数值(除了0)."
|
||||
|
||||
msgid "It is NOT recommended for casual users to change settings on this page."
|
||||
msgstr "强烈不建议初次使用的用户修改本页设定."
|
||||
|
@ -285,10 +342,17 @@ msgstr "把日志记录到文件"
|
|||
msgid "Log to syslog"
|
||||
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均未被安装.无法选择一个网络用于通信."
|
||||
|
||||
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"
|
||||
|
||||
msgid "Network"
|
||||
|
@ -405,9 +469,14 @@ msgstr "状态目录"
|
|||
msgid "Stopped"
|
||||
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'软件包暂不支持所有可用设置项"
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr "没有已经配置好的服务项"
|
||||
|
||||
|
@ -429,8 +498,11 @@ msgstr "用于检测的URL"
|
|||
msgid "Unknown error"
|
||||
msgstr "未知错误"
|
||||
|
||||
msgid "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 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"
|
||||
msgstr "更新错误"
|
||||
|
@ -462,10 +534,13 @@ msgstr "正在应用更改..."
|
|||
msgid "Warning"
|
||||
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 "向日志中写入详细信息.文件将会被自动减小."
|
||||
|
||||
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 "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志"
|
||||
|
||||
msgid "You should install BIND host package for DNS requests."
|
||||
|
@ -522,6 +597,9 @@ msgstr "已安装"
|
|||
msgid "invalid - Sample"
|
||||
msgstr "不合法 - 示例"
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr "最小值0"
|
||||
|
||||
|
|
|
@ -244,6 +244,9 @@ msgstr ""
|
|||
msgid "Hostname/Domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address source"
|
||||
msgstr ""
|
||||
|
||||
|
@ -326,6 +329,9 @@ msgstr ""
|
|||
msgid "Log to syslog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lookup Hostname"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
|
||||
"communication."
|
||||
|
@ -455,6 +461,9 @@ msgid ""
|
|||
"settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "The default setting of '0' will retry infinite."
|
||||
msgstr ""
|
||||
|
||||
msgid "There is no service configured."
|
||||
msgstr ""
|
||||
|
||||
|
@ -574,6 +583,9 @@ msgstr ""
|
|||
msgid "invalid - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "invalid FQDN / required - Sample"
|
||||
msgstr ""
|
||||
|
||||
msgid "minimum value '0'"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,21 +1,22 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Configure Diagnostics"
|
||||
msgstr "Настройки диагностики"
|
||||
msgstr "Настройка диагностики"
|
||||
|
||||
msgid "Diagnostics"
|
||||
msgstr "Диагностика"
|
||||
|
@ -23,23 +24,18 @@ msgstr "Диагностика"
|
|||
msgid ""
|
||||
"The diagnostics available under this menu depend on what modules you have "
|
||||
"installed on your device."
|
||||
msgstr ""
|
||||
"Доступные в данном меню виды диагностики зависят от установленных на вашем "
|
||||
"устройстве модулей. "
|
||||
msgstr "Доступные виды диагностики зависят от установленных плагинов. "
|
||||
|
||||
msgid ""
|
||||
"The entries in the menu allow you to perform diagnostic tests on your system "
|
||||
"to aid in troubleshooting."
|
||||
msgstr ""
|
||||
"Записи в меню позволять вам выполнить диагностику системы, чтобы помочь в "
|
||||
"Настройки позволять вам выполнить диагностику системы, чтобы помочь в "
|
||||
"обнаружении проблем."
|
||||
|
||||
msgid ""
|
||||
"With this menu you can configure network diagnostics, such as network device "
|
||||
"scans and ping tests."
|
||||
msgstr ""
|
||||
"Используя это меню, вы можете настроить диагностику сети, например, "
|
||||
"На этой странице вы можете настроить диагностику сети, например, "
|
||||
"сканирование сетевых устройств или ping-тест."
|
||||
|
||||
#~ msgid "l_d_diag"
|
||||
#~ msgstr "l_d_diag"
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ s:tab("advanced", translate("Advanced Settings"))
|
|||
name = s:taboption("general", Value, "name", translate("Name"))
|
||||
name.optional = false
|
||||
name.forcewrite = true
|
||||
name.datatype = "uciname"
|
||||
name.datatype = "and(uciname,maxlength(11))"
|
||||
|
||||
function name.write(self, section, value)
|
||||
if zone:name() ~= value then
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "%s in %s"
|
||||
msgstr "%s в %s"
|
||||
|
@ -34,7 +34,7 @@ msgid "(Unnamed SNAT)"
|
|||
msgstr "(SNAT без имени)"
|
||||
|
||||
msgid "-- Please choose --"
|
||||
msgstr "-- Пожалуйста, выберите --"
|
||||
msgstr "-- Сделайте выбор --"
|
||||
|
||||
msgid "-- custom --"
|
||||
msgstr "-- пользовательский --"
|
||||
|
@ -58,13 +58,13 @@ msgid "Add and edit..."
|
|||
msgstr "Добавить и редактировать..."
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Расширенные настройки"
|
||||
msgstr "Дополнительные настройки"
|
||||
|
||||
msgid "Allow forward from <em>source zones</em>:"
|
||||
msgstr "Разрешить перенаправление из <em>зон-источников</em>:"
|
||||
msgstr "Разрешить перенаправление из <em>'зон-источников'</em>:"
|
||||
|
||||
msgid "Allow forward to <em>destination zones</em>:"
|
||||
msgstr "Разрешить перенаправление в <em>зоны назначения</em>:"
|
||||
msgstr "Разрешить перенаправление в <em>'зоны назначения'</em>:"
|
||||
|
||||
msgid "Any"
|
||||
msgstr "Любой"
|
||||
|
@ -81,9 +81,9 @@ msgid ""
|
|||
"each firewall restart, right after the default ruleset has been loaded."
|
||||
msgstr ""
|
||||
"Пользовательские правила позволяют выполнять произвольные команды iptables, "
|
||||
"которые так или иначе не покрываются данным фреймворком межсетевого экрана. "
|
||||
"Команды выполняются при каждом перезапуске межсетевого экрана, сразу после "
|
||||
"того, как загружен набор правил по умолчанию."
|
||||
"которые не охвачены рамками межсетевого экрана.<br />Команды выполняются "
|
||||
"после каждой перезагрузки межсетевого экрана, сразу после загрузки набора "
|
||||
"правил по умолчанию."
|
||||
|
||||
msgid "Destination IP address"
|
||||
msgstr "IP-адрес назначения"
|
||||
|
@ -101,17 +101,16 @@ msgid "Do not rewrite"
|
|||
msgstr "Не перезаписывать"
|
||||
|
||||
msgid "Drop invalid packets"
|
||||
msgstr "Не пропускать некорректные пакеты"
|
||||
msgstr "Не пропускать<br />некорректные пакеты"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Включить"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable NAT Loopback"
|
||||
msgstr "Включить NAT Loopback"
|
||||
|
||||
msgid "Enable SYN-flood protection"
|
||||
msgstr "Включить защиту от SYN-flood атак"
|
||||
msgstr "Включить защиту<br />от SYN-flood атак"
|
||||
|
||||
msgid "Enable logging on this zone"
|
||||
msgstr "Включить журналирование в этой зоне"
|
||||
|
@ -126,7 +125,7 @@ msgid "External zone"
|
|||
msgstr "Внешняя зона"
|
||||
|
||||
msgid "Extra arguments"
|
||||
msgstr "Дополнительные аргументы"
|
||||
msgstr "Дополнительные<br />аргументы"
|
||||
|
||||
msgid "Firewall"
|
||||
msgstr "Межсетевой экран"
|
||||
|
@ -150,7 +149,7 @@ msgid "Forward"
|
|||
msgstr "Перенаправление"
|
||||
|
||||
msgid "Forward to"
|
||||
msgstr "Перенаправлять в"
|
||||
msgstr "Перенаправлять из"
|
||||
|
||||
msgid "From %s in %s"
|
||||
msgstr "Из %s в %s"
|
||||
|
@ -162,7 +161,7 @@ msgid "From %s in %s with source %s and %s"
|
|||
msgstr "Из %s в %s с источниками %s и %s"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "Общие настройки"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "IPv4"
|
||||
msgstr "IPv4"
|
||||
|
@ -180,7 +179,7 @@ msgid "IPv6 only"
|
|||
msgstr "Только IPv6"
|
||||
|
||||
msgid "Input"
|
||||
msgstr "Входящий"
|
||||
msgstr "Входящий трафик"
|
||||
|
||||
msgid "Inter-Zone Forwarding"
|
||||
msgstr "Перенаправление между зонами"
|
||||
|
@ -203,12 +202,11 @@ msgstr "Ограничение MSS"
|
|||
msgid "Masquerading"
|
||||
msgstr "Маскарадинг"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Match"
|
||||
msgstr "Выбирать"
|
||||
msgstr "Перенаправлять в"
|
||||
|
||||
msgid "Match ICMP type"
|
||||
msgstr "Соответствовать ICMP типу"
|
||||
msgstr "Соответствовать<br />ICMP типу"
|
||||
|
||||
msgid "Match forwarded traffic to the given destination port or port range."
|
||||
msgstr ""
|
||||
|
@ -219,8 +217,8 @@ msgid ""
|
|||
"Match incoming traffic directed at the given destination port or port range "
|
||||
"on this host"
|
||||
msgstr ""
|
||||
"Выбирать входящий трафик, направленный на порт или диапазон портов данного "
|
||||
"хоста"
|
||||
"Порт который будет принимать входящий трафик из источника 'Внутренний "
|
||||
"порт' (см.ниже)."
|
||||
|
||||
msgid ""
|
||||
"Match incoming traffic originating from the given source port or port range "
|
||||
|
@ -248,7 +246,9 @@ msgid "New source NAT"
|
|||
msgstr "Новый SNAT"
|
||||
|
||||
msgid "Only match incoming traffic directed at the given IP address."
|
||||
msgstr "Выбирать только входящий трафик, направленный на указанный IP-адрес."
|
||||
msgstr ""
|
||||
"IP-адрес который будет принимать входящий трафик из источника 'Внутренний IP-"
|
||||
"адрес' (см.ниже) ."
|
||||
|
||||
msgid "Only match incoming traffic from these MACs."
|
||||
msgstr "Выбирать только входящий трафик от этих MAC-адресов."
|
||||
|
@ -271,14 +271,15 @@ msgid "Other..."
|
|||
msgstr "Другое..."
|
||||
|
||||
msgid "Output"
|
||||
msgstr "Исходящий"
|
||||
msgstr "Исходящий трафик"
|
||||
|
||||
msgid "Passes additional arguments to iptables. Use with care!"
|
||||
msgstr ""
|
||||
"Передаёт дополнительные аргументы iptables. Используйте с осторожностью!"
|
||||
"Передаёт дополнительные аргументы таблице iptables. Используйте с "
|
||||
"осторожностью!"
|
||||
|
||||
msgid "Port Forwards"
|
||||
msgstr "Перенаправления портов"
|
||||
msgstr "Перенаправление портов"
|
||||
|
||||
msgid ""
|
||||
"Port forwarding allows remote computers on the Internet to connect to a "
|
||||
|
@ -292,10 +293,13 @@ msgstr "Протокол"
|
|||
|
||||
msgid ""
|
||||
"Redirect matched incoming traffic to the given port on the internal host"
|
||||
msgstr "Перенаправить входящий трафик на указанный порт хоста внутренней сети"
|
||||
msgstr ""
|
||||
"Перенаправить исходящий трафик с данного порта на 'Внешний порт' (см.выше)."
|
||||
|
||||
msgid "Redirect matched incoming traffic to the specified internal host"
|
||||
msgstr "Перенаправить входящий трафик на указанный хост внутренней сети"
|
||||
msgstr ""
|
||||
"Перенаправить исходящий трафик с данного IP-адреса на 'Внешний IP-адрес' (см."
|
||||
"выше)."
|
||||
|
||||
msgid "Restrict Masquerading to given destination subnets"
|
||||
msgstr "Использовать маскарадинг только для указанных подсетей-получателей"
|
||||
|
@ -304,7 +308,7 @@ msgid "Restrict Masquerading to given source subnets"
|
|||
msgstr "Использовать маскарадинг только для указанных подсетей-отправителей"
|
||||
|
||||
msgid "Restrict to address family"
|
||||
msgstr "Использовать только семейство протоколов"
|
||||
msgstr "Использовать протокол"
|
||||
|
||||
msgid "Rewrite matched traffic to the given address."
|
||||
msgstr "Перенаправлять соответствующий трафик к указанному адресу."
|
||||
|
@ -328,27 +332,6 @@ msgstr "IP-адрес SNAT"
|
|||
msgid "SNAT port"
|
||||
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"
|
||||
msgstr "IP-адрес источника"
|
||||
|
||||
|
@ -356,7 +339,7 @@ msgid "Source MAC address"
|
|||
msgstr "MAC-адрес источника"
|
||||
|
||||
msgid "Source NAT"
|
||||
msgstr "SNAT"
|
||||
msgstr "NAT источника"
|
||||
|
||||
msgid ""
|
||||
"Source NAT is a specific form of masquerading which allows fine grained "
|
||||
|
@ -375,7 +358,7 @@ msgid "Source port"
|
|||
msgstr "Порт источника"
|
||||
|
||||
msgid "Source zone"
|
||||
msgstr "Зона-источник"
|
||||
msgstr "Зона источника"
|
||||
|
||||
msgid ""
|
||||
"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 "
|
||||
"<em>not</em> imply a permission to forward from wan to lan as well."
|
||||
msgstr ""
|
||||
"Данные настройки управляют перенаправлением между этой (%s) и другими "
|
||||
"зонами. Трафиком <em>зон-получателей</em> является трафик <strong>исходящий "
|
||||
"из %q</strong>. Трафиком <em>зон-источников</em> является трафик "
|
||||
"<strong>направленый в %q</strong>. Перенаправление является "
|
||||
"<em>однонаправленным</em>, то есть перанаправление из lan в wan <em>не</em> "
|
||||
"допускает перенаправление трафика из wan в lan."
|
||||
"Данные настройки управляют политиками перенаправления между этой (%s) и "
|
||||
"другими зонами. Трафиком <em>'зон-назначения'</em> является перенаправленный "
|
||||
"трафик <strong>'исходящий из %q'</strong>. Трафиком <em>'зон-источников'</"
|
||||
"em> является трафик <strong>'направленый в %q'</strong>. Перенаправление "
|
||||
"является <em>'однонаправленным'</em>, то есть перенаправление из lan в wan "
|
||||
"<em>'не'</em> допускает перенаправление трафика из wan в lan."
|
||||
|
||||
msgid ""
|
||||
"This page allows you to change advanced properties of the port forwarding "
|
||||
"entry. In most cases there is no need to modify those settings."
|
||||
msgstr ""
|
||||
"На этой странице можно изменить расширенные настройки перенаправления "
|
||||
"портов. В большинстве случаев нет необходимости изменять эти параметры."
|
||||
"На этой странице можно изменить расширенные настройки перенаправления портов."
|
||||
"<br />В большинстве случаев нет необходимости изменять эти параметры."
|
||||
|
||||
msgid ""
|
||||
"This page allows you to change advanced properties of the traffic rule "
|
||||
"entry, such as matched source and destination hosts."
|
||||
msgstr ""
|
||||
"На этой странице можно изменить расширенные настройки правил для трафика. В "
|
||||
"большинстве случаев нет необходимости изменять эти параметры."
|
||||
"На этой странице можно изменить расширенные настройки правил для трафика."
|
||||
"<br />В большинстве случаев нет необходимости изменять эти параметры."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This section defines common properties of %q. The <em>input</em> 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 "
|
||||
"networks</em> specifies which available networks are members of this zone."
|
||||
msgstr ""
|
||||
"Данная секция позволяет изменять общие настройки %q. Опции <em>входящий</em> "
|
||||
"и <em>исходящий</em> устанавливают политику по умолчанию для входящего и "
|
||||
"исходящего трафика. Опция <em>перенаправление</em> позволяет установить "
|
||||
"политику для трафика, который перенаправляется через несколько сетей в зоне. "
|
||||
"Пункт <em>использовать сети</em> позволяет указать, какие сети являются "
|
||||
"частью данной зоны."
|
||||
"Страница содержит общие свойства %q. Режимы <em>'Входящий трафик'</em> и "
|
||||
"<em>'Исходящий трафик'</em> устанавливают политики по умолчанию для трафика, "
|
||||
"поступающего и покидающего эту зону, в то время как режим "
|
||||
"<em>'Перенаправление'</em> описывает политику пересылки трафика между "
|
||||
"различными сетями внутри зоны. <em>'Использовать сети'</em> указывает, какие "
|
||||
"доступные сети являются членами этой зоны."
|
||||
|
||||
msgid "To %s at %s on <var>this device</var>"
|
||||
msgstr "К %s, порту %s на <var>этом устройстве</var>"
|
||||
|
@ -453,7 +435,7 @@ msgid ""
|
|||
"the router."
|
||||
msgstr ""
|
||||
"Правила для трафика определяют политику прохождения пакетов между разными "
|
||||
"зонами, например, запрет трафика между некоторыми хостами или открытие WAN-"
|
||||
"зонами, например запрет трафика между некоторыми хостами или открытие WAN-"
|
||||
"портов маршрутизатора."
|
||||
|
||||
msgid "Via %s"
|
||||
|
@ -466,7 +448,7 @@ msgid ""
|
|||
"You may specify multiple by selecting \"-- custom --\" and then entering "
|
||||
"protocols separated by space."
|
||||
msgstr ""
|
||||
"Вы можете указать несколько, выбрав \"-- пользовательский --\" и перечислив "
|
||||
"Вы можете указать несколько, выбрав '-- пользовательский --' и перечислив "
|
||||
"через пробел названия протоколов."
|
||||
|
||||
msgid "Zone %q"
|
||||
|
@ -503,177 +485,4 @@ msgid "reject"
|
|||
msgstr "отвергать"
|
||||
|
||||
msgid "traffic"
|
||||
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 ""
|
||||
#~ "Перенаправление трафика позволяет изменить адрес получателя для "
|
||||
#~ "проходящих пакетов."
|
||||
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 ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Disk"
|
||||
msgstr "Диск"
|
||||
|
@ -22,31 +22,40 @@ msgid "Enable"
|
|||
msgstr "Включить"
|
||||
|
||||
msgid "Idle-time"
|
||||
msgstr "Время бездействия"
|
||||
msgstr ""
|
||||
|
||||
msgid "Idle-time unit"
|
||||
msgstr "Единицы времени бездействия"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
msgstr "Настройка"
|
||||
|
||||
# Hours
|
||||
msgid "h"
|
||||
msgstr "ч"
|
||||
|
||||
msgid "hd-idle"
|
||||
msgstr "hd-idle"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"hd-idle is a utility program for spinning-down external disks after a period "
|
||||
"of idle time."
|
||||
msgstr ""
|
||||
"Утилита hd-idle позволяет замедлять внешние диски после определённого "
|
||||
"времени бездействия."
|
||||
|
||||
# Minutes (not minimum)
|
||||
msgid "min"
|
||||
msgstr "мин"
|
||||
|
||||
#~ msgid "Enable debug"
|
||||
#~ msgstr "Включить отладку"
|
||||
#~ msgid "HDD Idle"
|
||||
#~ 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 ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Advanced Settings"
|
||||
msgstr "Расширенные настройки"
|
||||
msgstr "Дополнительные настройки"
|
||||
|
||||
msgid "Album art names:"
|
||||
msgstr "Имена обложек альбома:"
|
||||
msgstr "Имена обложек альбома"
|
||||
|
||||
msgid "Announced model number:"
|
||||
msgstr "Номер модели:"
|
||||
msgstr "Объявить номер модели"
|
||||
|
||||
msgid "Announced serial number:"
|
||||
msgstr "Серийный номер:"
|
||||
msgstr "Объявить серийный номер"
|
||||
|
||||
msgid "Browse directory"
|
||||
msgstr "Обзор директории"
|
||||
msgstr "Обзор папок"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Сбор данных..."
|
||||
|
||||
msgid "Database directory:"
|
||||
msgstr "Папка базы данных:"
|
||||
msgstr "Папка базы данных"
|
||||
|
||||
msgid "Enable TIVO:"
|
||||
msgstr "Включить TIVO:"
|
||||
msgstr "Включить TiVo"
|
||||
|
||||
msgid "Enable inotify:"
|
||||
msgstr "Включить inotify:"
|
||||
msgstr "Включить inotify"
|
||||
|
||||
msgid "Enable:"
|
||||
msgstr "Включить:"
|
||||
msgstr "Включить"
|
||||
|
||||
msgid "Friendly name:"
|
||||
msgstr "Понятное имя:"
|
||||
msgstr "Имя протокола"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "Общие настройки"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "Interfaces:"
|
||||
msgstr "Интерфейсы:"
|
||||
msgstr "Интерфейсы"
|
||||
|
||||
msgid "Log directory:"
|
||||
msgstr "Папка журнала:"
|
||||
msgstr "Папка системного<br />журнала"
|
||||
|
||||
msgid "Media directories:"
|
||||
msgstr "Папки медиа:"
|
||||
msgstr "Папки медиа"
|
||||
|
||||
msgid ""
|
||||
"MiniDLNA is server software with the aim of being fully compliant with DLNA/"
|
||||
|
@ -69,92 +70,83 @@ msgstr ""
|
|||
msgid ""
|
||||
"Model number the miniDLNA daemon will report to clients in its XML "
|
||||
"description."
|
||||
msgstr ""
|
||||
"Номер модели который, miniDLNA будет сообщать клиентам в своём XML-описании."
|
||||
msgstr "Номер модели miniDLNA будет показан клиентам в своём XML-описании."
|
||||
|
||||
msgid "Music"
|
||||
msgstr "Музыка"
|
||||
|
||||
msgid "Network interfaces to serve."
|
||||
msgstr "Обслуживаемые сетевые интерфейсы."
|
||||
msgstr "Использовать сетевые интерфейсы."
|
||||
|
||||
msgid "Notify interval in seconds."
|
||||
msgstr "Интервал уведомления (секунды)."
|
||||
msgstr "Интервал уведомления в секундах."
|
||||
|
||||
msgid "Notify interval:"
|
||||
msgstr "Интервал уведомления:"
|
||||
msgstr "Интервал уведомления"
|
||||
|
||||
msgid "Pictures"
|
||||
msgstr "Картинки"
|
||||
|
||||
msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic."
|
||||
msgstr "Порт для HTTP-трафика (описания, SOAP, передача мультимедиа)"
|
||||
msgstr "Задайте порт для HTTP-трафика (описания, SOAP, передача мультимедиа)."
|
||||
|
||||
msgid "Port:"
|
||||
msgstr "Порт:"
|
||||
msgstr "Порт"
|
||||
|
||||
msgid "Presentation URL:"
|
||||
msgstr "URL представления:"
|
||||
msgstr "Задать URL-адрес"
|
||||
|
||||
msgid "Root container:"
|
||||
msgstr "Корневой контейнер:"
|
||||
msgstr "Root контейнер"
|
||||
|
||||
msgid ""
|
||||
"Serial number the miniDLNA daemon will report to clients in its XML "
|
||||
"description."
|
||||
msgstr ""
|
||||
"Серийный номер, который miniDLNA будет сообщать клиентам в своём XML-"
|
||||
"описании."
|
||||
msgstr "Серийный номер miniDLNA будет показан клиентам в своём XML-описании."
|
||||
|
||||
msgid ""
|
||||
"Set this if you want to customize the name that shows up on your clients."
|
||||
msgstr "Изменение имени отображения для клиентов."
|
||||
msgstr "Выберите имя отображения для клиентов."
|
||||
|
||||
msgid ""
|
||||
"Set this if you would like to specify the directory where you want MiniDLNA "
|
||||
"to store its database and album art cache."
|
||||
msgstr ""
|
||||
"Папка, в которой miniDLNA будет хранить свою базу данных и кэш обложек "
|
||||
"альбомов."
|
||||
"Выберите папку, в которой miniDLNA будет хранить свою базу данных и кэш "
|
||||
"обложек альбомов."
|
||||
|
||||
msgid ""
|
||||
"Set this if you would like to specify the directory where you want MiniDLNA "
|
||||
"to store its log file."
|
||||
msgstr "Папка, в которой miniDLNA будет хранить свой файл журнала."
|
||||
msgstr "Выберите папку для хранения файла журнала miniDLNA."
|
||||
|
||||
msgid ""
|
||||
"Set this to enable inotify monitoring to automatically discover new files."
|
||||
msgstr ""
|
||||
"Включение наблюдения inotify для автоматического обнаружения новых файлов."
|
||||
msgstr "Включите 'inotify' для автоматического обнаружения новых файлов."
|
||||
|
||||
msgid ""
|
||||
"Set this to enable support for streaming .jpg and .mp3 files to a TiVo "
|
||||
"supporting HMO."
|
||||
msgstr ""
|
||||
"Установите для включения поддержки потокового воспроизведения файлов .jpg и ."
|
||||
"mp3 для TiVo с поддержкой HMO."
|
||||
"Выберите для включения поддержки потокового воспроизведения файлов .jpg и ."
|
||||
"mp3 для 'TiVo' с поддержкой HMO."
|
||||
|
||||
msgid ""
|
||||
"Set this to strictly adhere to DLNA standards. This will allow server-side "
|
||||
"downscaling of very large JPEG images, which may hurt JPEG serving "
|
||||
"performance on (at least) Sony DLNA products."
|
||||
msgstr ""
|
||||
"Установите для строгого соответствия стандартам DLNA. Это разрешит "
|
||||
"уменьшение размера слишком больших JPEG-изображений на стороне сервера, что "
|
||||
"может повредить производительности (по крайней мере) DLNA-продуктов Sony."
|
||||
"Выберите для строгого следования стандартам DLNA. Это позволит уменьшить "
|
||||
"размер слишком больших JPEG-изображений на стороне сервера (например "
|
||||
"технология - Sony DLNA), чтобы помочь уменьшить нагрузку на ваш "
|
||||
"маршрутизатор."
|
||||
|
||||
#, fuzzy
|
||||
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. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
|
||||
msgstr ""
|
||||
"Директории, которые необходимо сканировать. Если вы хотите установить "
|
||||
"ограничение на определённый тип содержимого в директории, вы можете написать "
|
||||
"тип ('A' для аудио, 'V' для видео, 'P' для изображений) перед путём к "
|
||||
"директории, за которым следует запятая (напр. media_dir=A,/mnt/media/Music). "
|
||||
"Может быть указано несколько директорий."
|
||||
|
||||
msgid "Specify the path to the MiniSSDPd socket."
|
||||
msgstr "Укажите путь к сокету MiniSSDPd."
|
||||
|
@ -163,20 +155,20 @@ msgid "Standard container"
|
|||
msgstr "Стандартный контейнер"
|
||||
|
||||
msgid "Strict to DLNA standard:"
|
||||
msgstr "Строгий стандарт DLNA:"
|
||||
msgstr "Следовать стандарту DLNA"
|
||||
|
||||
msgid ""
|
||||
"The miniDLNA service is active, serving %d audio, %d video and %d image "
|
||||
"files."
|
||||
msgstr ""
|
||||
"Сервис miniDLNA запущен, обслуживает %d аудио-, %d видео- и %d файлов с "
|
||||
"изображениями."
|
||||
"Сервис miniDLNA запущен, сервер обслуживает %d аудио-, %d видео- и %d "
|
||||
"файл(ов) изображений."
|
||||
|
||||
msgid "The miniDLNA service is not running."
|
||||
msgstr "Сервис miniDLNA не запущен."
|
||||
|
||||
msgid "This is a list of file names to check for when searching for album art."
|
||||
msgstr "Это список файлов, среди которых необходимо искать обложки альбомов."
|
||||
msgstr "Этот список имен файлов используется для поиска обложек альбомов."
|
||||
|
||||
msgid "Video"
|
||||
msgstr "Видео"
|
||||
|
@ -185,7 +177,28 @@ msgid "miniDLNA"
|
|||
msgstr "miniDLNA"
|
||||
|
||||
msgid "miniDLNA Status"
|
||||
msgstr "Статус miniDLNA"
|
||||
msgstr "Состояние miniDLNA"
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -80,12 +80,15 @@ end
|
|||
function action_json()
|
||||
local http = require "luci.http"
|
||||
local utl = require "luci.util"
|
||||
local uci = require "luci.model.uci".cursor_state()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local jsonreq4
|
||||
local jsonreq6
|
||||
|
||||
jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090")
|
||||
jsonreq6 = utl.exec("echo /status | nc ::1 9090")
|
||||
local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 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")
|
||||
if not jsonreq4 or jsonreq4 == "" then
|
||||
jsonreq4 = "{}"
|
||||
|
@ -368,8 +371,11 @@ function fetch_jsoninfo(otable)
|
|||
local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
|
||||
local jsonreq4 = ""
|
||||
local jsonreq6 = ""
|
||||
jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090")
|
||||
jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090")
|
||||
local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 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 jsondata6 = {}
|
||||
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)
|
||||
local fs = require "nixio.fs"
|
||||
|
@ -19,23 +21,23 @@ end
|
|||
|
||||
conf = luci.http.formvalue()
|
||||
|
||||
if conf.openwrt then
|
||||
if conf.openwrt_v4 then
|
||||
write_conf("/etc/config/olsrd", "olsrd")
|
||||
return false
|
||||
end
|
||||
|
||||
if conf.conf_v4 then
|
||||
write_conf("/var/etc/olsrd.conf.ipv4", "olsrd.conf.ipv4")
|
||||
if conf.openwrt_v6 then
|
||||
write_conf("/etc/config/olsrd6", "olsrd6")
|
||||
return false
|
||||
end
|
||||
|
||||
if conf.conf_v4 then
|
||||
write_conf("/var/etc/olsrd.conf", "olsrd.conf")
|
||||
return false
|
||||
end
|
||||
|
||||
if conf.conf_v6 then
|
||||
write_conf("/var/etc/olsrd.conf.ipv6", "olsrd.conf.ipv6")
|
||||
return false
|
||||
end
|
||||
|
||||
if conf.conf then
|
||||
write_conf("/var/etc/olsrd.conf", "olsrd.conf")
|
||||
write_conf("/var/etc/olsrd6.conf", "olsrd6.conf")
|
||||
return false
|
||||
end
|
||||
|
||||
|
@ -200,13 +202,18 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { },
|
|||
<span id="version">-<span>
|
||||
</td></tr>
|
||||
<tr><td width="33%"><%:Download Config%></td><td>
|
||||
<a href="<%=REQUEST_URI%>?openwrt">OpenWrt</a>,
|
||||
<% if ipv == "6and4" then %>
|
||||
<a href="<%=REQUEST_URI%>?conf_v4">OLSRD IPv4</a>,
|
||||
<a href="<%=REQUEST_URI%>?conf_v6">OLSRD IPv6</a>
|
||||
<% else %>
|
||||
<a href="<%=REQUEST_URI%>?conf">OLSRD</a>
|
||||
<% end %>
|
||||
<% if has_ipv4_conf then %>
|
||||
<a href="<%=REQUEST_URI%>?openwrt_v4">OpenWrt (IPv4)</a>,
|
||||
<% end %>
|
||||
<% if has_ipv6_conf then %>
|
||||
<a href="<%=REQUEST_URI%>?openwrt_v6">OpenWrt (IPv6)</a>,
|
||||
<% 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>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Bidirectional mode"
|
||||
msgstr "Двунаправленный режим"
|
||||
|
@ -25,33 +25,26 @@ msgid ""
|
|||
"First you have to install the packages to get support for USB (kmod-usb-"
|
||||
"printer) or parallel port (kmod-lp)."
|
||||
msgstr ""
|
||||
"Для начала вам необходимо установить пакеты для поддержки USB (kmod-usb-"
|
||||
"printer) или параллельного порта (kmod-lp)."
|
||||
"Сначала вы должны установить пакеты, чтобы получить поддержку для USB (kmod-"
|
||||
"usb-printer) или параллельный порт (kmod-lp)."
|
||||
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
msgstr "Интерфейс"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
msgstr "Настройка"
|
||||
|
||||
msgid "Specifies the interface to listen on."
|
||||
msgstr ""
|
||||
msgstr "Задать интерфейс для входящих соединений."
|
||||
|
||||
msgid "TCP listener port."
|
||||
msgstr "Прослушиваемый TCP-порт."
|
||||
msgstr "Порт для входящих соединений TCP."
|
||||
|
||||
msgid "enable"
|
||||
msgstr "включить"
|
||||
msgstr "Включить"
|
||||
|
||||
msgid "p910nd - Printer server"
|
||||
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 - номер первого принтера."
|
||||
msgstr "Сервер печати p910nd"
|
||||
|
|
|
@ -80,7 +80,7 @@ o = s:taboption("proxy", Value, "parentProxy",
|
|||
"will forward the requests."))
|
||||
|
||||
o.optional = true
|
||||
o.datatype = "ipaddr"
|
||||
--o.datatype = "ipaddr"
|
||||
|
||||
|
||||
o = s:taboption("proxy", Value, "parentAuthCredentials",
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Advanced Settings"
|
||||
msgstr "Расширенные настройки"
|
||||
msgstr "Дополнительные настройки"
|
||||
|
||||
msgid "Allowed clients"
|
||||
msgstr "Разрешённые клиенты"
|
||||
|
@ -28,14 +28,14 @@ msgid ""
|
|||
"Basic HTTP authentication supported. Provide username and password in "
|
||||
"username:password format."
|
||||
msgstr ""
|
||||
"Поддерживается базовая HTTP-аутентификация. Введите имя пользователя и "
|
||||
"пароль в формате имя:пароль."
|
||||
"Поддерживается обычная HTTP-аутентификация. Введите имя пользователя и "
|
||||
"пароль в формате 'имя:пароль'."
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Конфигурация"
|
||||
msgstr "Настройка config файла"
|
||||
|
||||
msgid "DNS and Query Settings"
|
||||
msgstr "Настройки DNS"
|
||||
msgstr "Настройка DNS и запросов"
|
||||
|
||||
msgid "DNS server address"
|
||||
msgstr "Адрес DNS-сервера"
|
||||
|
@ -44,27 +44,25 @@ msgid "Delete cache files time"
|
|||
msgstr "Время удаления кэш-файлов"
|
||||
|
||||
msgid "Disk cache location"
|
||||
msgstr "Местоположение кэша"
|
||||
msgstr "Местоположение<br />кэша на диске"
|
||||
|
||||
msgid "Do not query IPv6"
|
||||
msgstr "Не запрашивать IPv6"
|
||||
|
||||
msgid "Enable if cache (proxy) is shared by multiple users."
|
||||
msgstr ""
|
||||
"Включите, если вы хотите, чтобы кэш (прокси) был общим для нескольких "
|
||||
"пользователей."
|
||||
msgstr "Включить, чтобы кэш (прокси) был общим для нескольких пользователей."
|
||||
|
||||
msgid "First PMM segment size (in bytes)"
|
||||
msgstr "Размер первого PMM-сегмента (в байтах)"
|
||||
msgstr "Размер первого<br />PMM-сегмента (в байтах)"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "Общие настройки"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "How much RAM should Polipo use for its cache."
|
||||
msgstr "Количество RAM, отведенное для кеша."
|
||||
msgstr "Размер оперативной памяти (RAM), отведенной для кэша."
|
||||
|
||||
msgid "In RAM cache size (in bytes)"
|
||||
msgstr "Размер кэша в RAM (в байтах)"
|
||||
msgstr "Размер кэша<br />в RAM (в байтах)"
|
||||
|
||||
msgid "Listen address"
|
||||
msgstr "Адрес для входящих соединений"
|
||||
|
@ -77,15 +75,15 @@ msgid ""
|
|||
"devices is recommended, because the cache can grow considerably. Leave it "
|
||||
"empty to disable on-disk cache."
|
||||
msgstr ""
|
||||
"Директория, где Polipo хранит кэш-файлы. Рекомендуется использовать внешнее "
|
||||
"хранилище, так как размер кэша может увеличиваться. Оставьте пустым, чтобы "
|
||||
"отключить хранение кэша на диске."
|
||||
"Папка где Polipo хранит кэш-файлы. Рекомендуется использовать внешние "
|
||||
"накопители, так как кэш может значительно увеличиваться. Оставьте это поле "
|
||||
"пустым, чтобы отключить кэш на диске."
|
||||
|
||||
msgid "Log file location"
|
||||
msgstr "Местоположение файла журнала"
|
||||
msgstr "Местоположение<br />файла журнала"
|
||||
|
||||
msgid "Log to syslog"
|
||||
msgstr "Записывать сообщения в системный журнал"
|
||||
msgstr "Запись в журнал"
|
||||
|
||||
msgid "Logging and RAM"
|
||||
msgstr "Журналирование и RAM"
|
||||
|
@ -94,10 +92,10 @@ msgid "Never use system DNS resolver"
|
|||
msgstr "Не использовать системный DNS-клиент"
|
||||
|
||||
msgid "On-Disk Cache"
|
||||
msgstr "Кэширование на диске"
|
||||
msgstr "Настройка кэширования"
|
||||
|
||||
msgid "PMM segments size (in bytes)"
|
||||
msgstr "Размер PMM-сегментов (в байтах)"
|
||||
msgstr "Размер PMM-сегментов<br />(в байтах)"
|
||||
|
||||
msgid "Parent Proxy"
|
||||
msgstr "Родительский прокси"
|
||||
|
@ -109,7 +107,7 @@ msgid ""
|
|||
"Parent proxy address (in host:port format), to which Polipo will forward the "
|
||||
"requests."
|
||||
msgstr ""
|
||||
"Адрес родительского прокси (в формате хост:порт), на который Polipo будет "
|
||||
"Адрес родительского прокси (в формате 'хост:порт'), на который Polipo будет "
|
||||
"перенаправлять запросы."
|
||||
|
||||
msgid "Parent proxy authentication"
|
||||
|
@ -122,7 +120,7 @@ msgid "Polipo Status"
|
|||
msgstr "Состояние Polipo"
|
||||
|
||||
msgid "Polipo is a small and fast caching web proxy."
|
||||
msgstr "Polipo - небольшой веб-прокси, использующий кэширование."
|
||||
msgstr "Polipo - миниатюрный и быстрый веб-прокси, использующий кэширование."
|
||||
|
||||
msgid "Poor Man's Multiplexing"
|
||||
msgstr "Poor Man's Multiplexing"
|
||||
|
@ -134,15 +132,15 @@ msgid ""
|
|||
"PMM enabled."
|
||||
msgstr ""
|
||||
"Poor Man's Multiplexing (PMM) - это техника, которая позволяет запрашивать "
|
||||
"данные из нескольких источников. Таким образом, время отклика по HTTP-"
|
||||
"протоколу сокращается. ПРИМЕЧАНИЕ: некоторые сайты могут не работать с "
|
||||
"данные из нескольких источников.<br />Таким образом, время отклика по HTTP-"
|
||||
"протоколу сокращается.<br />ВНИМАНИЕ: некоторые сайты могут не работать с "
|
||||
"включенным PMM."
|
||||
|
||||
msgid "Port on which Polipo will listen"
|
||||
msgstr "Порт, на котором Polipo будет ожидать входящие соединения"
|
||||
msgstr "Порт, на котором Polipo будет ожидать входящие соединения."
|
||||
|
||||
msgid "Proxy"
|
||||
msgstr "Прокси"
|
||||
msgstr "Настройка прокси"
|
||||
|
||||
msgid "Query DNS by hostname"
|
||||
msgstr "Запрашивать DNS, используя имя хоста"
|
||||
|
@ -157,7 +155,7 @@ msgstr ""
|
|||
"хостов"
|
||||
|
||||
msgid "Query DNS for IPv6"
|
||||
msgstr "Запрашивать DNS для IPv6"
|
||||
msgstr "Запрашивать DNS<br />для IPv6"
|
||||
|
||||
msgid "Query IPv4 and IPv6, prefer 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 "
|
||||
"server than the host system."
|
||||
msgstr ""
|
||||
"Установите адрес DNS-сервера для Polipo в случае, если он отличается от "
|
||||
"системного."
|
||||
"Задайте адрес DNS-сервера, если вы хотите чтобы Polipo использовал DNS-"
|
||||
"сервер отличный от системного."
|
||||
|
||||
msgid "Shared cache"
|
||||
msgstr "Общий кэш"
|
||||
|
@ -186,7 +184,7 @@ msgstr ""
|
|||
"будет равен двум обычным."
|
||||
|
||||
msgid "Size to which cached files should be truncated"
|
||||
msgstr "Размер, до которого будут сокращены файлы кэша"
|
||||
msgstr "Размер, до которого будут сокращены файлы кэша."
|
||||
|
||||
msgid "Status"
|
||||
msgstr "Состояние"
|
||||
|
@ -198,29 +196,29 @@ msgid ""
|
|||
"The interface on which Polipo will listen. To listen on all interfaces use "
|
||||
"0.0.0.0 or :: (IPv6)."
|
||||
msgstr ""
|
||||
"Интерфейс, на котором Polipo будет ожидать входящие соединения. Чтобы "
|
||||
"Интерфейс, на котором Polipo будет ожидать входящие соединения.<br />Чтобы "
|
||||
"ожидать на всех интерфейсах, используйте 0.0.0.0 или :: (IPv6)."
|
||||
|
||||
msgid "Time after which cached files will be deleted"
|
||||
msgstr "Интервал, после которого файлы кэша будут удалены"
|
||||
msgstr "Время по истечении которого, файлы кэша будут удалены."
|
||||
|
||||
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."
|
||||
msgstr "Чтобы включить PMM, размер PMM сегмента должен быть установлен."
|
||||
|
||||
msgid "Truncate cache files size (in bytes)"
|
||||
msgstr "Сократить размер файлов кэша (в байтах)"
|
||||
msgstr "Сократить размер<br />файлов кэша (в байтах)"
|
||||
|
||||
msgid "Truncate cache files time"
|
||||
msgstr "Время сокращения файлов кэша"
|
||||
msgstr "Время сокращения<br />файлов кэша"
|
||||
|
||||
msgid ""
|
||||
"Use of external storage device is recommended, because the log file is "
|
||||
"written frequently and can grow considerably."
|
||||
msgstr ""
|
||||
"Рекомендуется использовать внешнее хранилище, так как журнал часто "
|
||||
"Рекомендуется использовать внешний накопитель, так как журнал часто "
|
||||
"обновляется и может значительно увеличиваться в размере."
|
||||
|
||||
msgid ""
|
||||
|
@ -229,9 +227,9 @@ msgid ""
|
|||
"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))"
|
||||
msgstr ""
|
||||
"Если адрес для входящих соединений установлен в 0.0.0.0 или :: (IPv6), вам "
|
||||
"необходимо перечислить клиентов, которым разрешено подключаться. В таком "
|
||||
"случае формат - это IP-адрес или адрес подсети (192.168.1.123, "
|
||||
"192.168.1.0/24, 2001:660:116::/48 (IPv6))"
|
||||
"необходимо перечислить клиентов, которым разрешено подключаться. Перечислить "
|
||||
"в таком виде: IP-адрес или адрес подсети (192.168.1.123, 192.168.1.0/24, "
|
||||
"2001:660:116::/48 (IPv6))."
|
||||
|
||||
msgid "enable"
|
||||
msgstr "включить"
|
||||
msgstr "Включить"
|
||||
|
|
|
@ -10,11 +10,11 @@ PKG_NAME:=luci-app-privoxy
|
|||
|
||||
# Version == major.minor.patch
|
||||
# increase "minor" on new functionality and "patch" on patches/optimization
|
||||
PKG_VERSION:=1.0.3
|
||||
PKG_VERSION:=1.0.4
|
||||
|
||||
# Release == build
|
||||
# increase on changes of translation files
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
|
||||
|
@ -33,6 +33,6 @@ help
|
|||
$(PKG_MAINTAINER)
|
||||
endef
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
|
|
@ -72,8 +72,7 @@ end
|
|||
|
||||
-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
|
||||
function ipkg_ver_compare(ver1, comp, ver2)
|
||||
if not ver1 or not (#ver1 > 0)
|
||||
or not ver2 or not (#ver2 > 0)
|
||||
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 = "~="
|
||||
|
@ -90,33 +89,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
|
|||
for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
|
||||
local s1 = av1[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
|
||||
if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
|
||||
if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
|
||||
|
||||
local nc = (n1 and n2) -- numeric compare
|
||||
|
||||
if nc then
|
||||
-- first "not equal" found return true
|
||||
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
|
||||
-- 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 then true
|
||||
return true
|
||||
|
||||
-- all equal and not compare greater or lower then true
|
||||
return not (comp == "<" or comp == ">")
|
||||
end
|
||||
|
||||
-- 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")
|
||||
f.title = TITLE
|
||||
f.description = DESC
|
||||
f.embedded = true
|
||||
f.submit = 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 ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Calculate overhead"
|
||||
msgstr "Подсчитывать накладные расходы"
|
||||
msgstr "Подсчитывать<br />накладные расходы"
|
||||
|
||||
msgid "Classification Rules"
|
||||
msgstr "Правила классификации"
|
||||
|
||||
msgid "Classification group"
|
||||
msgstr "Классификация"
|
||||
msgstr "Классификация групп"
|
||||
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
msgstr "Комментарий"
|
||||
|
||||
msgid "Destination host"
|
||||
msgstr "Хост назначения"
|
||||
|
||||
msgid "Download speed (kbit/s)"
|
||||
msgstr "Скорость загрузки (кбит/с)"
|
||||
msgstr "Скорость получения<br />данных (кбит/с)"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Включить"
|
||||
|
@ -58,23 +58,24 @@ msgid "Quality of Service"
|
|||
msgstr "Качество обслуживания (QoS)"
|
||||
|
||||
msgid "Service"
|
||||
msgstr "Служба"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source host"
|
||||
msgstr "Хост источника"
|
||||
|
||||
msgid "Target"
|
||||
msgstr "Цель"
|
||||
msgstr "Назначение"
|
||||
|
||||
msgid "Upload speed (kbit/s)"
|
||||
msgstr "Скорость отдачи (кбит/с)"
|
||||
msgstr "Cкорость передачи<br />данных (кбит/с)"
|
||||
|
||||
msgid ""
|
||||
"With <abbr title=\"Quality of Service\">QoS</abbr> you can prioritize "
|
||||
"network traffic selected by addresses, ports or services."
|
||||
msgstr ""
|
||||
"Используя <abbr title=\"Quality of Service\">QoS</abbr>, вы можете "
|
||||
"приоритезаровать сетевой трафик по адресам, портам и сервисам."
|
||||
"Используя <abbr title=\"Качество обслуживания\">QoS</abbr>, вы можете "
|
||||
"уделять первостепенное внимание сетевому трафику по адресам, портам и "
|
||||
"сервисам."
|
||||
|
||||
msgid "all"
|
||||
msgstr "все"
|
||||
|
@ -89,16 +90,7 @@ msgid "low"
|
|||
msgstr "низкий"
|
||||
|
||||
msgid "normal"
|
||||
msgstr "обычный"
|
||||
msgstr "нормально"
|
||||
|
||||
msgid "priority"
|
||||
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 ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 guests"
|
||||
msgstr "Разрешить гостевой вход"
|
||||
|
||||
msgid "Allow system users to reach their home directories via network shares"
|
||||
msgstr ""
|
||||
"Разрешить пользователям получать доступ к их домашним директориям через сеть"
|
||||
"Разрешить пользователям получать доступ к их домашним папкам, через "
|
||||
"локальную сеть."
|
||||
|
||||
msgid "Allowed users"
|
||||
msgstr "Разрешённые пользователи"
|
||||
msgstr "Разрешенные пользователи"
|
||||
|
||||
msgid "Create mask"
|
||||
msgstr "Создать маску"
|
||||
|
@ -32,22 +33,22 @@ msgid "Description"
|
|||
msgstr "Описание"
|
||||
|
||||
msgid "Directory mask"
|
||||
msgstr "Маска директории"
|
||||
msgstr "Маска папок"
|
||||
|
||||
msgid "Edit Template"
|
||||
msgstr "Редактировать шаблон"
|
||||
msgstr "Настройка шаблона"
|
||||
|
||||
msgid "Edit the template that is used for generating the samba configuration."
|
||||
msgstr "Редактировать шаблон, используемый для генерации конфигурации samba."
|
||||
msgstr "Настройка config<br />файла samba"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "Общие настройки"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "Hostname"
|
||||
msgstr "Имя хоста"
|
||||
|
||||
msgid "Mask for new directories"
|
||||
msgstr "Маска для новых директорий"
|
||||
msgstr "Маска для новых папок"
|
||||
|
||||
msgid "Mask for new files"
|
||||
msgstr "Маска для новых файлов"
|
||||
|
@ -65,10 +66,10 @@ msgid "Read-only"
|
|||
msgstr "Только для чтения"
|
||||
|
||||
msgid "Share home-directories"
|
||||
msgstr "Совместно использовать домашние директории"
|
||||
msgstr "Совместно использовать домашние папки"
|
||||
|
||||
msgid "Shared Directories"
|
||||
msgstr "Совместно используемые директории"
|
||||
msgstr "Совместно используемые папки"
|
||||
|
||||
msgid ""
|
||||
"This is the content of the file '/etc/samba/smb.conf.template' from which "
|
||||
|
@ -77,9 +78,19 @@ msgid ""
|
|||
"Settings' tab."
|
||||
msgstr ""
|
||||
"Это содержимое файла '/etc/samba/smb.conf.template', из которого "
|
||||
"генерируется конфигурация samba. Значения, заключённые в символы \"|\", не "
|
||||
"должны быть изменены. Они будут автоматически заменены на значения из "
|
||||
"вкладки 'Общие настройки'."
|
||||
"генерируется config файл - samba.<br />Значения, заключенные в символы "
|
||||
"('|'), не должны быть изменены.<br />Они будут автоматически заменены на "
|
||||
"значения со страницы 'Основные настройки'."
|
||||
|
||||
msgid "Workgroup"
|
||||
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
|
||||
|
||||
$(uci -q get luci_splash.general.redirect_url) || {
|
||||
set -x
|
||||
touch /var/state/luci_splash_locations
|
||||
touch /etc/config/luci_splash_locations
|
||||
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//:/}.location="http://${HTTP_HOST}${REQUEST_URI}"
|
||||
set +x
|
||||
}
|
||||
|
||||
echo -en "Cache-Control: no-cache, max-age=0, no-store, must-revalidate\r\n"
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
msgid ""
|
||||
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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\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 "Accept"
|
||||
msgstr "Принять"
|
||||
|
@ -35,17 +35,23 @@ msgid ""
|
|||
"without notice for any reason, for certain devices, and/or may be blocked "
|
||||
"for certain users."
|
||||
msgstr ""
|
||||
"Доступ к сети не гарантируется. Он может быть прерван в любое время без "
|
||||
"предварительного уведомления по любой причине, для определенных устройств, и/"
|
||||
"или может быть заблокирован для определенных пользователей."
|
||||
|
||||
msgid "Active Clients"
|
||||
msgstr "Активные клиенты"
|
||||
|
||||
msgid "Allowed hosts/subnets"
|
||||
msgstr "Разрешённые хосты/подсети"
|
||||
msgstr "Разрешенные хосты/подсети"
|
||||
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr ""
|
||||
"В качестве альтернативы редактированию полного текста заставки, можно также "
|
||||
"просто включить некоторый пользовательский текст на странице заставки по "
|
||||
"умолчанию, введя его здесь."
|
||||
|
||||
msgid ""
|
||||
"Bandwidth limit for clients is only activated when both up- and download "
|
||||
|
@ -53,14 +59,14 @@ msgid ""
|
|||
"Whitelisted clients are not limited."
|
||||
msgstr ""
|
||||
"Ограничение полосы для клиентов активируется только при указанных лимитах "
|
||||
"нисходящего и восходящего каналов. Значение 0 полностью отключает "
|
||||
"ограничение. Клиенты из \"белого\" списка не имеют ограничений."
|
||||
"загрузки и скачивания.<br />Значение '0' полностью отключает ограничение. "
|
||||
"Клиенты из Белого списка не имеют ограничений."
|
||||
|
||||
msgid ""
|
||||
"Become an active member of this community and help by operating your own node"
|
||||
msgstr ""
|
||||
"Станьте активным участником данного сообщества и окажите содействие, "
|
||||
"запустив свой узел сети"
|
||||
"запустив свой узел сети."
|
||||
|
||||
msgid "Blacklist"
|
||||
msgstr "Чёрный список"
|
||||
|
@ -72,39 +78,42 @@ msgid ""
|
|||
"By accepting these rules you can use this network for %s hour(s). After this "
|
||||
"time you need to accept these rules again."
|
||||
msgstr ""
|
||||
"Приняв эти правила, вы можете использовать эту сеть для %s час (ы). По "
|
||||
"истечении этого времени вам необходимо снова принять эти правила."
|
||||
|
||||
msgid "Clearance time"
|
||||
msgstr "Разрешённое время"
|
||||
|
||||
msgid "Client-Splash"
|
||||
msgstr "Client-Splash"
|
||||
msgstr "Splash-Клиент"
|
||||
|
||||
msgid ""
|
||||
"Client-Splash is a hotspot authentification system for wireless mesh "
|
||||
"networks."
|
||||
msgstr ""
|
||||
"Client-Splash - это система аутентификации точек доступа для беспроводных "
|
||||
"ячеистых сетей."
|
||||
"Splash-Клиент - это система аутентификации точек доступа для беспроводных "
|
||||
"Mesh сетей."
|
||||
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr ""
|
||||
"Клиенты перенаправляются на эту страницу после того, как они вступили в "
|
||||
"Splash.<br />Если эта страница пуста, они перенаправляются на запрашиваемую "
|
||||
"страницу."
|
||||
|
||||
msgid "Clients download speed is limited to this value (kbyte/s)"
|
||||
msgstr ""
|
||||
"Скорость нисходящего канала для клиентов ограничена этим значением (КБ/c)"
|
||||
msgstr "Скорость скачивания для клиентов ограничена этим значением (КБ/c)."
|
||||
|
||||
msgid ""
|
||||
"Clients that have accepted the splash are allowed to use the network for "
|
||||
"that many hours."
|
||||
msgstr ""
|
||||
"Клиенты, принявшие приглашение splash-экрана, могут использовать сеть данное "
|
||||
"Клиенты, принявшие приглашение Splash-экрана, могут использовать сеть данное "
|
||||
"количество часов."
|
||||
|
||||
msgid "Clients upload speed is limited to this value (kbyte/s)"
|
||||
msgstr ""
|
||||
"Скорость восходящего канала для клиентов ограничена этим значением (КБ/c)"
|
||||
msgstr "Скорость загрузки для клиентов ограничена этим значением (КБ/c)."
|
||||
|
||||
msgid "Contact"
|
||||
msgstr "Связаться"
|
||||
|
@ -116,15 +125,17 @@ msgid ""
|
|||
"Destination hosts and networks that are excluded from splashing, i.e. they "
|
||||
"are always allowed."
|
||||
msgstr ""
|
||||
"Назначенные хосты и сети, которые исключены из Splash, т.е. они всегда "
|
||||
"разрешены."
|
||||
|
||||
msgid "Donate some money to help us keep this project alive."
|
||||
msgstr "Пожертвовать деньги на поддержку этого проекта."
|
||||
|
||||
msgid "Download limit"
|
||||
msgstr "Лимит загрузки"
|
||||
msgstr "Лимит скачивания"
|
||||
|
||||
msgid "Edit the complete splash text"
|
||||
msgstr ""
|
||||
msgstr "Изменение полного текста заставки"
|
||||
|
||||
msgid "Fair Use Policy"
|
||||
msgstr "Политика добровольного использования"
|
||||
|
@ -133,16 +144,16 @@ msgid "Firewall zone"
|
|||
msgstr "Зона межсетевого экрана"
|
||||
|
||||
msgid "General"
|
||||
msgstr "Общие"
|
||||
msgstr "Основные настройки"
|
||||
|
||||
msgid "Get in %s with the operator of this access point."
|
||||
msgstr ""
|
||||
msgstr "Получить в% s с оператором этой точки доступа."
|
||||
|
||||
msgid "Hostname"
|
||||
msgstr "Имя хоста"
|
||||
|
||||
msgid "IP Address"
|
||||
msgstr "IP-адрес"
|
||||
msgstr "IP-Адрес"
|
||||
|
||||
msgid ""
|
||||
"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 "Если вы используете эту сеть регулярно, мы просим вашей поддержки:"
|
||||
|
||||
msgid "Include your own text in the default splash"
|
||||
msgstr ""
|
||||
msgstr "Включить собственный текст в заставку по умолчанию"
|
||||
|
||||
msgid "Intercept client traffic on this Interface"
|
||||
msgstr "Перехватывать клиентский трафик на этом интерфейсе"
|
||||
msgstr "Перехватывать клиентский трафик на этом интерфейсе."
|
||||
|
||||
msgid "Interfaces"
|
||||
msgstr "Интерфейсы"
|
||||
|
@ -169,11 +180,11 @@ msgid ""
|
|||
"KB/s (Download/Upload). You may be able to remove this limit by actively "
|
||||
"contributing to this project."
|
||||
msgstr ""
|
||||
"КБ/с (загрузка/отдача). Данное ограничение может быть снято при активном "
|
||||
"КБ/с (скачать/загрузить). Данное ограничение может быть снято при активном "
|
||||
"участии в этом проекте."
|
||||
|
||||
msgid "Legally Prohibited Activities"
|
||||
msgstr ""
|
||||
msgstr "Запрещенные законом виды деятельности"
|
||||
|
||||
msgid "Legally Prohibited content"
|
||||
msgstr "Юридически запрещенный контент"
|
||||
|
@ -188,8 +199,8 @@ msgid ""
|
|||
"MAC addresses of whitelisted clients. These do not need to accept the splash "
|
||||
"and are not bandwidth limited."
|
||||
msgstr ""
|
||||
"MAC-адреса клиентов из \"белого\" списка. Данные клиенты не имеют "
|
||||
"ограничений пропускной способности."
|
||||
"MAC-адреса клиентов из Белого списка. Данных клиентов не нужно принимать в "
|
||||
"Splash и они не имеют ограничений по пропускной способности."
|
||||
|
||||
msgid "Netmask"
|
||||
msgstr "Маска сети"
|
||||
|
@ -204,14 +215,14 @@ msgid ""
|
|||
"Please note that we are not an internet service provider but an experimental "
|
||||
"community network."
|
||||
msgstr ""
|
||||
"Пожалуйста, обратите внимание, что мы не интернет-провайдер, а "
|
||||
"экспериментальная сеть сообщества."
|
||||
"Обратите внимание, что мы не интернет-провайдер, а сообщество "
|
||||
"экспериментальной сети ."
|
||||
|
||||
msgid "Policy"
|
||||
msgstr "Политика"
|
||||
|
||||
msgid "Redirect target"
|
||||
msgstr ""
|
||||
msgstr "Назначение перенаправления"
|
||||
|
||||
msgid "Safety"
|
||||
msgstr "Безопасный"
|
||||
|
@ -220,47 +231,62 @@ msgid "Save"
|
|||
msgstr "Сохранить"
|
||||
|
||||
msgid "Splash rules are integrated in this firewall zone"
|
||||
msgstr "Правила Splash интегрированы в зону этого межсетевого экрана"
|
||||
msgstr "Правила Splash интегрированы в зону этого межсетевого экрана."
|
||||
|
||||
msgid "Splashtext"
|
||||
msgstr "Текст splash-экрана"
|
||||
msgstr "Текст Splash-экрана"
|
||||
|
||||
msgid ""
|
||||
"The network, like the Internet, is unencrypted and open. Each participant is "
|
||||
"responsible for the safety of their own connections and devices."
|
||||
msgstr ""
|
||||
"Сеть, как и Интернет, не зашифрована и открыта. Каждый участник несет "
|
||||
"ответственность за безопасность своих собственных подключений и устройств."
|
||||
|
||||
msgid ""
|
||||
"The open and free wireless network of volunteers (\"Operators\") provides "
|
||||
"the necessary equipment and Internet connections (\"Infrastructure\") at "
|
||||
"their own expense."
|
||||
msgstr ""
|
||||
"Открытая и бесплатная беспроводная сеть волонтеров 'операторы' обеспечивает "
|
||||
"необходимое оборудование и подключение к Интернету 'инфраструктура' за свой "
|
||||
"счет."
|
||||
|
||||
msgid ""
|
||||
"The operator claims no liability for loss of data, unauthorized access/"
|
||||
"damage to devices, or financial losses that participants may suffer from the "
|
||||
"use of the network."
|
||||
msgstr ""
|
||||
"Оператор не несет ответственности за потерю данных, несанкционированного "
|
||||
"доступа/повреждения устройств или финансовых потерь, которые участники могут "
|
||||
"пострадать от использования сети."
|
||||
|
||||
msgid ""
|
||||
"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."
|
||||
msgstr ""
|
||||
"Участник соглашается не предпринимать никаких действий и воздерживаться от "
|
||||
"действий, которые могут нарушать закон или нарушать права третьих лиц."
|
||||
|
||||
msgid ""
|
||||
"The participant agrees to not transfer content over the network which "
|
||||
"violates the law."
|
||||
msgstr ""
|
||||
msgstr "Участник соглашается не передавать контент по сети, нарушающей закон."
|
||||
|
||||
msgid ""
|
||||
"The participant agrees to not use the network in any way which will harm the "
|
||||
"infrastructure, the network itself, its operators or other participants."
|
||||
msgstr ""
|
||||
"Участник соглашается не использовать сеть любым способом, который нанесет "
|
||||
"ущерб инфраструктуре, самой сети, ее операторам или другим участникам."
|
||||
|
||||
msgid ""
|
||||
"These Terms of Use govern the use of the network by its participants' "
|
||||
"computer, PDA, or similar device (\"Devices\") within the network."
|
||||
msgstr ""
|
||||
"Настоящие условия использования регулируют использование сети компьютером "
|
||||
"участников, КПК, смартфоном или аналогичным устройством 'устройствами' в "
|
||||
"сети."
|
||||
|
||||
msgid "Time remaining"
|
||||
msgstr "Оставшееся время"
|
||||
|
@ -276,29 +302,28 @@ msgid "Traffic in/out"
|
|||
msgstr "Трафик вх/исх"
|
||||
|
||||
msgid "Upload limit"
|
||||
msgstr "Лимит отдачи"
|
||||
msgstr "Предел загрузки"
|
||||
|
||||
msgid "Usage Agreement"
|
||||
msgstr ""
|
||||
msgstr "Соглашение об использовании"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Добро пожаловать"
|
||||
|
||||
msgid "Whitelist"
|
||||
msgstr "\"Белый\" список"
|
||||
msgstr "Белый список"
|
||||
|
||||
msgid "You are now connected to the free wireless mesh network"
|
||||
msgstr "Теперь вы подключены к бесплатной беспроводной ячеистой сети"
|
||||
msgstr "Теперь вы подключены к свободной беспроводной Mesh сети."
|
||||
|
||||
msgid ""
|
||||
"You can enter your own text that is displayed to clients here.<br />It is "
|
||||
"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, "
|
||||
"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###."
|
||||
msgstr ""
|
||||
"Здесь вы можете указать свой текст, который будет отображаться клиентам.<br /"
|
||||
">Возможно использовать следующие маркеры: ###COMMUNITY###, "
|
||||
"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and "
|
||||
"###ACCEPT###."
|
||||
"Здесь можно ввести собственный текст, отображаемый для клиентов.<br />Можно "
|
||||
"использовать следующие маркеры: ###COMMUNITY###, ###COMMUNITY_URL###, "
|
||||
"###CONTACTURL###, ###LEASETIME###, ###LIMIT### и ###ACCEPT###."
|
||||
|
||||
msgid ""
|
||||
"Your access to this network has been blocked, most likely because you did "
|
||||
|
@ -311,25 +336,25 @@ msgid "Your bandwidth is limited to"
|
|||
msgstr "Ваша полоса пропускания ограничена значением"
|
||||
|
||||
msgid "blacklisted"
|
||||
msgstr "в \"чёрном\" списке"
|
||||
msgstr "в Черном списке"
|
||||
|
||||
msgid "expired"
|
||||
msgstr "истёк"
|
||||
msgstr "истекло"
|
||||
|
||||
msgid "optional when using host addresses"
|
||||
msgstr "опционально при использовании хост-адресов"
|
||||
msgstr "необязательно при использовании адресов хостов"
|
||||
|
||||
msgid "perform any kind of illegal activities"
|
||||
msgstr "выполнять любые незаконные действия"
|
||||
|
||||
msgid "splashed"
|
||||
msgstr "уже в splash"
|
||||
msgstr "вы в Splash"
|
||||
|
||||
msgid "temporarily blocked"
|
||||
msgstr "временно заблокирован"
|
||||
|
||||
msgid "unknown"
|
||||
msgstr "неизвестный"
|
||||
msgstr "неизвестно"
|
||||
|
||||
msgid "use filesharing applications on this network"
|
||||
msgstr "использование файлообменных приложений в этой сети"
|
||||
|
@ -338,25 +363,4 @@ msgid "waste bandwidth with unneccesary downloads or streams"
|
|||
msgstr "тратить пропускную способность на ненужные загрузки или потоки"
|
||||
|
||||
msgid "whitelisted"
|
||||
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 "с владельцем этой точки доступа."
|
||||
msgstr "в Белом списке"
|
||||
|
|
|
@ -20,7 +20,7 @@ function index()
|
|||
|
||||
local labels = {
|
||||
s_output = _("Output plugins"),
|
||||
s_system = _("System plugins"),
|
||||
s_general = _("General plugins"),
|
||||
s_network = _("Network plugins"),
|
||||
|
||||
conntrack = _("Conntrack"),
|
||||
|
@ -30,6 +30,7 @@ function index()
|
|||
disk = _("Disk Usage"),
|
||||
dns = _("DNS"),
|
||||
email = _("Email"),
|
||||
entropy = _("Entropy"),
|
||||
exec = _("Exec"),
|
||||
interface = _("Interfaces"),
|
||||
iptables = _("Firewall"),
|
||||
|
@ -53,7 +54,7 @@ function index()
|
|||
-- our collectd menu
|
||||
local collectd_menu = {
|
||||
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" }
|
||||
}
|
||||
|
||||
|
@ -61,7 +62,7 @@ function index()
|
|||
local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80)
|
||||
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
|
||||
|
@ -86,7 +87,7 @@ function index()
|
|||
end
|
||||
|
||||
-- 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.setgroup = "nogroup"
|
||||
|
||||
|
@ -169,7 +170,7 @@ function statistics_render()
|
|||
if #instances == 0 then
|
||||
--instances = { graph.tree:plugin_instances( plugin )[1] }
|
||||
instances = graph.tree:plugin_instances( plugin )
|
||||
is_index = true
|
||||
is_index = (#instances > 1)
|
||||
|
||||
-- index instance requested
|
||||
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(
|
||||
"The network plugin provides network based communication between " ..
|
||||
"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 " ..
|
||||
"local instance receives data from other hosts."
|
||||
))
|
||||
|
|
|
@ -47,10 +47,16 @@ heartbeat:depends( "enable", 1 )
|
|||
rrasingle = s:option( Flag, "RRASingle",
|
||||
translate("Only create average RRAs"), translate("reduces rrd size") )
|
||||
rrasingle.default = true
|
||||
rrasingle.rmempty = true
|
||||
rrasingle.optional = true
|
||||
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)
|
||||
rratimespans = s:option( Value, "RRATimespans",
|
||||
translate("Stored timespans"), translate("seconds; multiple separated by space") )
|
||||
|
|
|
@ -26,15 +26,6 @@ function Instance._subst( self, str, val )
|
|||
return str
|
||||
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 )
|
||||
|
||||
local title = user_title or
|
||||
|
@ -73,24 +64,17 @@ end
|
|||
|
||||
function Instance.ds( self, source )
|
||||
|
||||
local label = source.title or self:_translate(
|
||||
string.format( "stat_ds_%s_%s_%s", source.type, source.instance, source.ds ),
|
||||
self:_translate(
|
||||
string.format( "stat_ds_%s_%s", source.type, source.instance ),
|
||||
self:_translate(
|
||||
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
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
local label = source.title or
|
||||
"dt=%s/di=%s/ds=%s" % {
|
||||
(source.type and #source.type > 0) and source.type or "(nil)",
|
||||
(source.instance and #source.instance > 0) and source.instance or "(nil)",
|
||||
(source.ds and #source.ds > 0) and source.ds or "(nil)"
|
||||
}
|
||||
|
||||
return self:_subst( label, {
|
||||
dtype = source.type,
|
||||
dinst = source.instance,
|
||||
dsrc = source.ds
|
||||
} )
|
||||
} ):gsub(":", "\\:")
|
||||
|
||||
end
|
||||
|
|
|
@ -25,6 +25,7 @@ function Graph.__init__( self, timespan, opts )
|
|||
-- options
|
||||
opts.timespan = timespan or sections.rrdtool.default_timespan or 900
|
||||
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.width = opts.width or sections.rrdtool.image_width or 400
|
||||
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
|
||||
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
|
||||
-- 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_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
|
||||
else
|
||||
if self.opts.rrasingle or not self.opts.rramax then
|
||||
-- create cdef statement
|
||||
_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 )
|
||||
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
|
||||
|
||||
-- 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,+",
|
||||
noarea = dopts.noarea or false,
|
||||
title = dopts.title or nil,
|
||||
weight = dopts.weight or nil,
|
||||
ds = dsource,
|
||||
type = dtype,
|
||||
instance = dinst,
|
||||
|
@ -457,12 +472,24 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
|
|||
_ti ( _args, "-X" )
|
||||
_ti ( _args, opts.units_exponent )
|
||||
end
|
||||
if opts.alt_autoscale then
|
||||
_ti ( _args, "-A" )
|
||||
end
|
||||
if opts.alt_autoscale_max then
|
||||
_ti ( _args, "-M" )
|
||||
end
|
||||
|
||||
-- store additional rrd options
|
||||
if opts.rrdopts then
|
||||
for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) 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
|
||||
for i, source in ipairs(_sources) do
|
||||
|
|
|
@ -8,22 +8,23 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
|
|||
return {
|
||||
title = "%H: Processor usage on core #%pi",
|
||||
y_min = "0",
|
||||
alt_autoscale_max = true,
|
||||
vlabel = "Percent",
|
||||
number_format = "%5.1lf%%",
|
||||
data = {
|
||||
instances = {
|
||||
cpu = { "idle", "user", "system", "nice" }
|
||||
cpu = { "user", "nice", "system", "softirq", "interrupt" }
|
||||
},
|
||||
|
||||
options = {
|
||||
cpu_idle = { color = "ffffff" },
|
||||
cpu_nice = { color = "00e000" },
|
||||
cpu_user = { color = "0000ff" },
|
||||
cpu_wait = { color = "ffb000" },
|
||||
cpu_system = { color = "ff0000" },
|
||||
cpu_softirq = { color = "ff00ff" },
|
||||
cpu_interrupt = { color = "a000a0" },
|
||||
cpu_steal = { color = "000000" }
|
||||
cpu_idle = { color = "ffffff", title = "Idle" },
|
||||
cpu_nice = { color = "00e000", title = "Nice" },
|
||||
cpu_user = { color = "0000ff", title = "User" },
|
||||
cpu_wait = { color = "ffb000", title = "Wait" },
|
||||
cpu_system = { color = "ff0000", title = "System" },
|
||||
cpu_softirq = { color = "ff00ff", title = "Softirq" },
|
||||
cpu_interrupt = { color = "a000a0", title = "Interrupt" },
|
||||
cpu_steal = { color = "000000", title = "Steal" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,21 +12,27 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
|
|||
number_format = "%5.1lf%sB",
|
||||
|
||||
data = {
|
||||
sources = {
|
||||
df = { "free", "used" }
|
||||
instances = {
|
||||
df_complex = { "free", "used", "reserved" }
|
||||
},
|
||||
|
||||
options = {
|
||||
df__free = {
|
||||
df_complex_free = {
|
||||
color = "00ff00",
|
||||
overlay = false,
|
||||
title = "free"
|
||||
},
|
||||
|
||||
df__used = {
|
||||
df_complex_used = {
|
||||
color = "ff0000",
|
||||
overlay = false,
|
||||
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 = {
|
||||
-- processed packets (tx DS)
|
||||
if_packets__tx = {
|
||||
weight = 1,
|
||||
overlay = true, -- don't summarize
|
||||
total = true, -- report total amount of bytes
|
||||
color = "00ff00", -- processed tx is green
|
||||
title = "Processed (tx)"
|
||||
title = "Processed (TX)"
|
||||
},
|
||||
|
||||
-- processed packets (rx DS)
|
||||
if_packets__rx = {
|
||||
weight = 2,
|
||||
overlay = true, -- don't summarize
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of bytes
|
||||
color = "0000ff", -- processed rx is blue
|
||||
title = "Processed (rx)"
|
||||
title = "Processed (RX)"
|
||||
},
|
||||
|
||||
-- packet errors (tx DS)
|
||||
if_errors__tx = {
|
||||
weight = 0,
|
||||
overlay = true, -- don't summarize
|
||||
total = true, -- report total amount of packets
|
||||
color = "ff5500", -- tx errors are orange
|
||||
title = "Errors (tx)"
|
||||
title = "Errors (TX)"
|
||||
},
|
||||
|
||||
-- packet errors (rx DS)
|
||||
if_errors__rx = {
|
||||
weight = 3,
|
||||
overlay = true, -- don't summarize
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of packets
|
||||
color = "ff0000", -- rx errors are red
|
||||
title = "Errors (rx)"
|
||||
title = "Errors (RX)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,6 +74,8 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
local stations = {
|
||||
title = "%H: Associated stations on %pi",
|
||||
vlabel = "Stations",
|
||||
y_min = "0",
|
||||
alt_autoscale_max = true,
|
||||
number_format = "%3.0lf",
|
||||
data = {
|
||||
types = { "stations" },
|
||||
|
|
|
@ -17,6 +17,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
|
|||
title = "%H: Memory usage",
|
||||
vlabel = "MB",
|
||||
number_format = "%5.1lf%s",
|
||||
y_min = "0",
|
||||
alt_autoscale_max = true,
|
||||
data = {
|
||||
instances = {
|
||||
memory = { "free", "buffered", "cached", "used" }
|
||||
|
|
|
@ -22,11 +22,13 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
-- special options for single data lines
|
||||
options = {
|
||||
if_octets__tx = {
|
||||
title = "Bytes (TX)",
|
||||
total = true, -- report total amount of bytes
|
||||
color = "00ff00" -- tx is green
|
||||
},
|
||||
|
||||
if_octets__rx = {
|
||||
title = "Bytes (RX)",
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of bytes
|
||||
color = "0000ff" -- rx is blue
|
||||
|
@ -59,6 +61,8 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
options = {
|
||||
-- processed packets (tx DS)
|
||||
if_packets__tx = {
|
||||
weight = 2,
|
||||
title = "Total (TX)",
|
||||
overlay = true, -- don't summarize
|
||||
total = true, -- report total amount of bytes
|
||||
color = "00ff00" -- processed tx is green
|
||||
|
@ -66,6 +70,8 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
|
||||
-- processed packets (rx DS)
|
||||
if_packets__rx = {
|
||||
weight = 3,
|
||||
title = "Total (RX)",
|
||||
overlay = true, -- don't summarize
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of bytes
|
||||
|
@ -74,6 +80,8 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
|
||||
-- dropped packets (tx DS)
|
||||
if_dropped__tx = {
|
||||
weight = 1,
|
||||
title = "Dropped (TX)",
|
||||
overlay = true, -- don't summarize
|
||||
total = true, -- report total amount of bytes
|
||||
color = "660055" -- dropped tx is ... dunno ;)
|
||||
|
@ -81,14 +89,18 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
|
||||
-- dropped packets (rx DS)
|
||||
if_dropped__rx = {
|
||||
weight = 4,
|
||||
title = "Dropped (RX)",
|
||||
overlay = true, -- don't summarize
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of bytes
|
||||
color = "440066" -- dropped rx is violett
|
||||
color = "ff00ff" -- dropped rx is violett
|
||||
},
|
||||
|
||||
-- packet errors (tx DS)
|
||||
if_errors__tx = {
|
||||
weight = 0,
|
||||
title = "Errors (TX)",
|
||||
overlay = true, -- don't summarize
|
||||
total = true, -- report total amount of packets
|
||||
color = "ff5500" -- tx errors are orange
|
||||
|
@ -96,6 +108,8 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
|
||||
-- packet errors (rx DS)
|
||||
if_errors__rx = {
|
||||
weight = 5,
|
||||
title = "Errors (RX)",
|
||||
overlay = true, -- don't summarize
|
||||
flip = true, -- flip rx line
|
||||
total = true, -- report total amount of packets
|
||||
|
@ -122,6 +136,7 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
options = {
|
||||
-- multicast packets
|
||||
if_multicast = {
|
||||
title = "Packets",
|
||||
total = true, -- report total amount of packets
|
||||
color = "0000ff" -- multicast is blue
|
||||
}
|
||||
|
@ -146,6 +161,7 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
options = {
|
||||
-- collision rate
|
||||
if_collisions = {
|
||||
title = "Collisions",
|
||||
total = true, -- report total amount of packets
|
||||
color = "ff0000" -- collsions are red
|
||||
}
|
||||
|
@ -173,15 +189,19 @@ function rrdargs( graph, plugin, plugin_instance )
|
|||
},
|
||||
|
||||
-- special options for single data lines
|
||||
options = { -- XXX: fixme (define colors...)
|
||||
if_tx_errors = {
|
||||
total = true
|
||||
},
|
||||
options = {
|
||||
if_tx_errors_aborted_value = { total = true, color = "ffff00", title = "Aborted (TX)" },
|
||||
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 = {
|
||||
flip = true,
|
||||
total = true
|
||||
}
|
||||
if_rx_errors_length_value = { flip = true, total = true, color = "ff0000", title = "Length (RX)" },
|
||||
if_rx_errors_missed_value = { flip = true, total = true, color = "ff0033", title = "Missed (RX)" },
|
||||
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",
|
||||
number_format = "%5.1lf%%",
|
||||
data = {
|
||||
sources = {
|
||||
percent = { "percent" }
|
||||
},
|
||||
instances = {
|
||||
percent = "charge"
|
||||
},
|
||||
|
@ -77,9 +74,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
|
|||
vlabel = "Minutes",
|
||||
number_format = "%.1lfm",
|
||||
data = {
|
||||
sources = {
|
||||
timeleft = { "timeleft" }
|
||||
},
|
||||
instances = {
|
||||
timeleft = { "battery" }
|
||||
},
|
||||
|
|
|
@ -6,24 +6,23 @@ module("luci.statistics.rrdtool.definitions.ping", package.seeall)
|
|||
function rrdargs( graph, plugin, plugin_instance, dtype )
|
||||
return {
|
||||
-- Ping roundtrip time
|
||||
{ title = "%H: ICMP Round Trip Time", vlabel = "ms",
|
||||
number_format = "%5.1lf ms", data = {
|
||||
{ title = "%H: ICMP Round Trip Time",
|
||||
vlabel = "ms",
|
||||
number_format = "%5.1lf ms",
|
||||
data = {
|
||||
sources = { ping = { "value" } },
|
||||
options = { ping__ping = { noarea = true, title = "%di" } }
|
||||
options = { ping__value = {
|
||||
noarea = true, overlay = true, title = "%di" } }
|
||||
} },
|
||||
|
||||
-- Ping droprate
|
||||
{ title = "%H: ICMP Drop Rate", vlabel = "%",
|
||||
number_format = "%5.2lf %%", data = {
|
||||
{ title = "%H: ICMP Drop Rate",
|
||||
vlabel = "%",
|
||||
number_format = "%5.2lf %%",
|
||||
data = {
|
||||
types = { "ping_droprate" },
|
||||
options = { ping_droprate = { 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" } }
|
||||
} },
|
||||
options = { ping_droprate = {
|
||||
noarea = true, overlay = true, title = "%di" } }
|
||||
} }
|
||||
}
|
||||
end
|
||||
|
|
|
@ -8,7 +8,10 @@
|
|||
|
||||
<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>
|
||||
and uses <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> to render diagram images from collected data.%></p>
|
||||
<p><%_The statistics package uses <a href="https://collectd.org/">Collectd</a>
|
||||
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%>
|
||||
|
|
|
@ -63,9 +63,6 @@ msgstr ""
|
|||
msgid "CollectTopology"
|
||||
msgstr ""
|
||||
|
||||
msgid "Collectd"
|
||||
msgstr "Collectd"
|
||||
|
||||
msgid "Collectd Settings"
|
||||
msgstr "Configuració Collectd"
|
||||
|
||||
|
@ -132,6 +129,12 @@ msgstr "Adreça electrònica"
|
|||
msgid "Enable this plugin"
|
||||
msgstr "Activa aquest connector"
|
||||
|
||||
msgid "Entropy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Entropy Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Exec"
|
||||
msgstr "Exec"
|
||||
|
||||
|
@ -150,6 +153,9 @@ msgstr "Neteja la memòria cau després de"
|
|||
msgid "Forwarding between listen and server addresses"
|
||||
msgstr "Readreçant entre adreces que reben connexions i adreces de servidors"
|
||||
|
||||
msgid "General plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Graphs"
|
||||
msgstr "Gràfics"
|
||||
|
||||
|
@ -227,6 +233,11 @@ msgstr "Interfícies que reben connexions"
|
|||
msgid "Load Plugin Configuration"
|
||||
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"
|
||||
msgstr "Connexions màximes permeses"
|
||||
|
||||
|
@ -368,9 +379,15 @@ msgstr "Màquina servidor"
|
|||
msgid "Server port"
|
||||
msgstr "Port del servidor"
|
||||
|
||||
msgid "Setup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Shaping class monitoring"
|
||||
msgstr "Monitoreig de classe shaping"
|
||||
|
||||
msgid "Show max values instead of averages"
|
||||
msgstr ""
|
||||
|
||||
msgid "Socket file"
|
||||
msgstr "Fitxer d'endoll"
|
||||
|
||||
|
@ -418,9 +435,6 @@ msgstr "Marques de temps emmagatzemades"
|
|||
msgid "System Load"
|
||||
msgstr "Càrrega de sistema"
|
||||
|
||||
msgid "System plugins"
|
||||
msgstr "Connectors de sistema"
|
||||
|
||||
msgid "TCP Connections"
|
||||
msgstr "Connexions TCP"
|
||||
|
||||
|
@ -492,6 +506,9 @@ msgstr ""
|
|||
"es fa servir en conjunció amb Mail::SpamAssassin::Plugin. Plugin::Collectd "
|
||||
"també es pot utilitzar d'altres maneres."
|
||||
|
||||
msgid "The entropy plugin collects statistics about the available entropy."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The exec plugin starts external commands to read values from or to notify "
|
||||
"external processes when certain threshold values have been reached."
|
||||
|
@ -545,7 +562,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"The network plugin provides network based communication between different "
|
||||
"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."
|
||||
msgstr ""
|
||||
"El connector de xarxa proporciona comunicacions basades en xarxa entre "
|
||||
|
@ -585,14 +602,10 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
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."
|
||||
"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
|
||||
"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
|
||||
"render diagram images."
|
||||
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 ""
|
||||
"The tcpconns plugin collects informations about open tcp connections on "
|
||||
|
@ -663,6 +676,10 @@ msgstr "Wireless"
|
|||
msgid "Wireless iwinfo Plugin Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can install additional collectd-mod-* plugins to enable more statistics."
|
||||
msgstr ""
|
||||
|
||||
msgid "e.g. br-ff"
|
||||
msgstr "p.e. br-ff"
|
||||
|
||||
|
@ -684,6 +701,22 @@ msgstr "segons; múltiples separats per espais"
|
|||
msgid "server interfaces"
|
||||
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 ""
|
||||
#~ "The wireless plugin collects statistics about wireless signal strength, "
|
||||
#~ "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