first commit

This commit is contained in:
coolsnowwolf 2018-10-17 22:44:12 +08:00
parent 4dcb300802
commit fc7e088a3b
2258 changed files with 512161 additions and 674 deletions

5
.buildpath Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path="src"/>
<buildpathentry kind="con" path="org.eclipse.dltk.launching.INTERPRETER_CONTAINER"/>
</buildpath>

221
.cproject Normal file
View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject>
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="luci" buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" name="Preference Configuration" parent="org.eclipse.cdt.build.core.prefbase.cfg">
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341." name="/" resourcePath="">
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051.1470931541" name=""/>
<builder id="org.eclipse.cdt.build.core.settings.default.builder.823611263" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1685234798" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.570824141" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.491129717" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.858094059" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.344617955" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.564526987" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1426860237" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
<tool id="org.eclipse.cdt.build.core.settings.holder.869454750" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.838425449" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
<listOptionValue builtIn="false" value="/usr/include"/>
</option>
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1755775295" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" moduleId="org.eclipse.cdt.core.settings" name="Preference Configuration">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
</storageModule>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="luci.null.949486034" name="luci"/>
</storageModule>
</cproject>

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
dist/
/host
*.o
*.so
*.swp
*.po~
/docs
modules/luci-base/src/po2lmo

78
.project Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>luci</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.dltk.lua.core.nature</nature>
</natures>
</projectDescription>

62
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,62 @@
# Contributing Guidelines
## 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.
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.: "luci-mod-admin-full: fix wifi channel selection on multiple STA networks")
* Shortly explain the changes made and - if applicable - the reasoning behind them
* 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)
or the [OpenWrt Development List](https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel).
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:
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:
* 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:
* 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.
* Do NOT add new packages and do NOT do major upgrades of packages here.
* If you are unsure if your change is suitable, please use a pull request.

875
LICENSE
View File

@ -1,674 +1,201 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

9
NOTICE Normal file
View File

@ -0,0 +1,9 @@
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
Licensed under the Apache License, Version 2.0.
Contains code from:
coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org)
ltn12/luasocket - Copyright 2004-2007 Diego Nehab
axTLS - Copyright 2008 Cameron Rich

34
README.md Normal file
View File

@ -0,0 +1,34 @@
# OpenWrt luci feed
## Description
This is the OpenWrt "luci"-feed containing LuCI - OpenWrt Configuration Interface.
## Usage
This feed is enabled by default. Your feeds.conf.default (or feeds.conf) should contain a line like:
```
src-git luci https://github.com/openwrt/luci.git
```
To install all its package definitions, run:
```
./scripts/feeds update luci
./scripts/feeds install -a -p luci
```
## API Reference
You can browse the generated API documentation [directly on Github](http://htmlpreview.github.io/?http://raw.githubusercontent.com/openwrt/luci/master/documentation/api/index.html).
## Development
Documentation for developing and extending LuCI can be found [in the Wiki](https://github.com/openwrt/luci/wiki)
## License
See [LICENSE](LICENSE) file.
## Package Guidelines
See [CONTRIBUTING.md](CONTRIBUTING.md) file.

26
THANKYOU Normal file
View File

@ -0,0 +1,26 @@
I'd like to thank the following people for contributing to this software:
* Anton Popov
- for rewriting the openwrt.org theme
* Florian Fainelli (OpenWrt)
- for the french translation
* Alina Friedrichsen
- for the reworked translation system, help on standards compliance and accessibility
* Yanira
- several applications and bugreports
Also a big thank you goes to:
* Mono (Freifunk Halle)
- for donating a Linksys WRT54GL for development purposes
* tetzlav (Freifunk Leipzig)
- for donating several boards for testing and his feedback
* Mickey (Freifunk Hannover)
- for his feedback and fixes for the OpenWrt builds

View File

@ -0,0 +1,12 @@
# Copyright 2017 Dirk Brenken (dev@brenken.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-lib-jsonc
LUCI_PKGARCH:=all
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,53 @@
-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
module("luci.controller.adblock", package.seeall)
local util = require("luci.util")
local templ = require("luci.template")
local i18n = require("luci.i18n")
function index()
if not nixio.fs.access("/etc/config/adblock") then
return
end
entry({"admin", "services", "adblock"}, firstchild(), _("Adblock"), 30).dependent = false
entry({"admin", "services", "adblock", "tab_from_cbi"}, cbi("adblock/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
entry({"admin", "services", "adblock", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
entry({"admin", "services", "adblock", "advanced"}, firstchild(), _("Advanced"), 100)
entry({"admin", "services", "adblock", "advanced", "blacklist"}, form("adblock/blacklist_tab"), _("Edit Blacklist"), 110).leaf = true
entry({"admin", "services", "adblock", "advanced", "whitelist"}, form("adblock/whitelist_tab"), _("Edit Whitelist"), 120).leaf = true
entry({"admin", "services", "adblock", "advanced", "configuration"}, form("adblock/configuration_tab"), _("Edit Configuration"), 130).leaf = true
entry({"admin", "services", "adblock", "advanced", "query"}, template("adblock/query"), _("Query domains"), 140).leaf = true
entry({"admin", "services", "adblock", "advanced", "result"}, call("queryData"), nil, 150).leaf = true
end
function logread()
local logfile
if nixio.fs.access("/var/log/messages") then
logfile = util.trim(util.exec("grep -F 'adblock-' /var/log/messages"))
else
logfile = util.trim(util.exec("logread -e 'adblock-'"))
end
templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
end
function queryData(domain)
if domain then
luci.http.prepare_content("text/plain")
local cmd = "/etc/init.d/adblock query %s 2>&1"
local util = io.popen(cmd % util.shellquote(domain))
if util then
while true do
local line = util:read("*l")
if not line then
break
end
luci.http.write(line)
luci.http.write("\n")
end
util:close()
end
end
end

View File

@ -0,0 +1,52 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
local util = require("luci.util")
local uci = require("luci.model.uci").cursor()
local adbinput = uci:get("adblock", "blacklist", "adb_src") or "/etc/adblock/adblock.blacklist"
if not nixio.fs.access(adbinput) then
m = SimpleForm("error", nil,
translate("Input file not found, please check your configuration."))
m.reset = false
m.submit = false
return m
end
if nixio.fs.stat(adbinput).size > 524288 then
m = SimpleForm("error", nil,
translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
.. translate("Please edit this file directly in a terminal session."))
m.reset = false
m.submit = false
return m
end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
translatef("This form allows you to modify the content of the adblock blacklist (%s).<br />", adbinput)
.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
f = s:option(TextValue, "data")
f.datatype = "string"
f.rows = 20
f.rmempty = true
function f.cfgvalue()
return nixio.fs.readfile(adbinput) or ""
end
function f.write(self, section, data)
return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
end
function s.handle(self, state, data)
return true
end
return m

View File

@ -0,0 +1,39 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
local util = require("luci.util")
local adbinput = "/etc/config/adblock"
if not nixio.fs.access(adbinput) then
m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
m.reset = false
m.submit = false
return m
end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
translate("This form allows you to modify the content of the main adblock configuration file (/etc/config/adblock)."))
f = s:option(TextValue, "data")
f.rows = 20
f.rmempty = true
function f.cfgvalue()
return nixio.fs.readfile(adbinput) or ""
end
function f.write(self, section, data)
return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
end
function s.handle(self, state, data)
return true
end
return m

View File

@ -0,0 +1,275 @@
-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
local dump = util.ubus("network.interface", "dump", {})
local json = require("luci.jsonc")
local adbinput = uci:get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
m = Map("adblock", translate("Adblock"),
translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
.. translatef("For further information "
.. "<a href=\"%s\" target=\"_blank\">"
.. "check the online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
m.apply_on_parse = true
function m.on_apply(self)
luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
-- Main adblock options
s = m:section(NamedSection, "global", "adblock")
local parse = json.parse(fs.readfile(adbinput) or "")
if parse then
status = parse.data.adblock_status
version = parse.data.adblock_version
domains = parse.data.overall_domains
fetch = parse.data.fetch_utility
backend = parse.data.dns_backend
rundate = parse.data.last_rundate
end
o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
o1.default = o1.disabled
o1.rmempty = false
btn = s:option(Button, "", translate("Suspend / Resume Adblock"))
if parse and status == "enabled" then
btn.inputtitle = translate("Suspend")
btn.inputstyle = "reset"
btn.disabled = false
function btn.write()
luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
elseif parse and status == "paused" then
btn.inputtitle = translate("Resume")
btn.inputstyle = "apply"
btn.disabled = false
function btn.write()
luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
else
btn.inputtitle = translate("-------")
btn.inputstyle = "button"
btn.disabled = true
end
o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
translate("List of supported DNS backends with their default list export directory.<br />")
.. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
o2:value("dnsmasq", "dnsmasq (/tmp)")
o2:value("unbound", "unbound (/var/lib/unbound)")
o2:value("named", "named (/var/lib/bind)")
o2:value("kresd", "kresd (/etc/kresd)")
o2:value("dnscrypt-proxy","dnscrypt-proxy (/tmp)")
o2.default = "dnsmasq (/tmp)"
o2.rmempty = false
o3 = s:option(ListValue, "adb_fetchutil", translate("Download Utility"),
translate("List of supported and fully pre-configured download utilities."))
o3:value("uclient-fetch")
o3:value("wget")
o3:value("curl")
o3:value("aria2c")
o3:value("wget-nossl", "wget-nossl (noSSL)")
o3:value("busybox", "wget-busybox (noSSL)")
o3.default = "uclient-fetch"
o3.rmempty = false
o4 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
translate("List of available network interfaces. Usually the startup will be triggered by the 'wan' interface.<br />")
.. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
o4:value("none")
o4:value("timed")
if dump then
local i, v
for i, v in ipairs(dump.interface) do
if v.interface ~= "loopback" then
o4:value(v.interface)
end
end
end
o4.rmempty = false
-- Runtime information
ds = m:section(NamedSection, "global", "adblock", translate("Runtime Information"))
dv1 = ds:option(DummyValue, "", translate("Adblock Status"))
dv1.template = "adblock/runtime"
if parse == nil then
dv1.value = translate("n/a")
else
if status == "error" then
dv1.value = translate("error")
elseif status == "disabled" then
dv1.value = translate("disabled")
elseif status == "paused" then
dv1.value = translate("paused")
elseif status == "running" then
dv1.value = translate("running")
else
dv1.value = translate("enabled")
end
end
dv2 = ds:option(DummyValue, "", translate("Adblock Version"))
dv2.template = "adblock/runtime"
if parse == nil then
dv2.value = translate("n/a")
else
dv2.value = version
end
dv3 = ds:option(DummyValue, "", translate("Download Utility (SSL Library)"),
translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or 'built-in'."))
dv3.template = "adblock/runtime"
if parse == nil then
dv3.value = translate("n/a")
else
dv3.value = fetch
end
dv4 = ds:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
dv4.template = "adblock/runtime"
if parse == nil then
dv4.value = translate("n/a")
else
dv4.value = backend
end
dv5 = ds:option(DummyValue, "", translate("Overall Domains"))
dv5.template = "adblock/runtime"
if parse == nil then
dv5.value = translate("n/a")
else
dv5.value = domains
end
dv6 = ds:option(DummyValue, "", translate("Last Run"))
dv6.template = "adblock/runtime"
if parse == nil then
dv6.value = translate("n/a")
else
dv6.value = rundate
end
-- Blocklist table
bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
translate("<b>Caution:</b> To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please only select a few of them!"))
bl.template = "adblock/blocklist"
name = bl:option(Flag, "enabled", translate("Enabled"))
name.rmempty = false
ssl = bl:option(DummyValue, "adb_src", translate("SSL req."))
function ssl.cfgvalue(self, section)
local source = self.map:get(section, "adb_src")
if source and source:match("https://") then
return translate("Yes")
else
return translate("No")
end
end
des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
cat = bl:option(DynamicList, "adb_src_cat", translate("Categories"))
cat.datatype = "uciname"
cat.optional = true
-- Extra options
e = m:section(NamedSection, "extra", "adblock", translate("Extra Options"),
translate("Options for further tweaking in case the defaults are not suitable for you."))
e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
translate("Enable verbose debug logging in case of any processing error."))
e1.default = e1.disabled
e1.rmempty = false
e2 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
translate("Redirect all DNS queries from 'lan' zone to the local resolver."))
e2.default = e2.disabled
e2.rmempty = false
e3 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB free RAM)"))
e3.default = e3.disabled
e3.rmempty = false
e4 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in backup mode."))
e4.default = e4.disabled
e4.rmempty = false
e5 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
translate("Target directory for adblock backups. Please use only non-volatile disks, e.g. an external usb stick."))
e5:depends("adb_backup", 1)
e5.datatype = "directory"
e5.default = "/mnt"
e5.rmempty = true
e6 = e:option(Flag, "adb_backup_mode", translate("Backup Mode"),
translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
e6:depends("adb_backup", 1)
e6.default = e6.disabled
e6.rmempty = true
e7 = e:option(Value, "adb_maxqueue", translate("Max. Download Queue"),
translate("Size of the download queue to handle downloads &amp; list processing in parallel (default '4').<br />")
.. translate("For further performance improvements you can raise this value, e.g. '8' or '16' should be safe."))
e7.default = 4
e7.datatype = "range(1,32)"
e7.rmempty = false
e8 = e:option(Flag, "adb_jail", translate("'Jail' Blocklist Creation"),
translate("Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all domains except those listed in the whitelist file.<br />")
.. translate("You can use this restrictive blocklist manually e.g. for guest wifi or kidsafe configurations."))
e8.default = e8.disabled
e8.rmempty = true
e9 = e:option(Flag, "adb_dnsflush", translate("Flush DNS Cache"),
translate("Flush DNS Cache after adblock processing."))
e9.default = e9.disabled
e9.rmempty = true
e10 = e:option(Flag, "adb_notify", translate("Email Notification"),
translate("Send notification emails in case of a processing error or if domain count is &le; 0.<br />")
.. translate("Please note: this needs additional 'msmtp' package installation and setup."))
e10.default = e10.disabled
e10.rmempty = true
e11 = e:option(Value, "adb_notifycnt", translate("Email Notification Count"),
translate("Raise the minimum email notification count, to get emails if the overall count is less or equal to the given limit (default 0),<br />")
.. translate("e.g. to receive an email notification with every adblock update set this value to 150000."))
e11.default = 0
e11.datatype = "min(0)"
e11.optional = true
e12 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
translate("Target directory for the generated blocklist 'adb_list.overall'."))
e12.datatype = "directory"
e12.optional = true
e13 = e:option(Value, "adb_whitelist", translate("Whitelist File"),
translate("Full path to the whitelist file."))
e13.datatype = "file"
e13.default = "/etc/adblock/adblock.whitelist"
e13.optional = true
e14 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
translate("Additional trigger delay in seconds before adblock processing begins."))
e14.datatype = "range(1,60)"
e14.optional = true
return m

View File

@ -0,0 +1,51 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
local util = require("luci.util")
local uci = require("luci.model.uci").cursor()
local adbinput = uci:get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist"
if not nixio.fs.access(adbinput) then
m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
m.reset = false
m.submit = false
return m
end
if nixio.fs.stat(adbinput).size > 524288 then
m = SimpleForm("error", nil,
translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
.. translate("Please edit this file directly in a terminal session."))
m.reset = false
m.submit = false
return m
end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
translatef("This form allows you to modify the content of the adblock whitelist (%s).<br />", adbinput)
.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
f = s:option(TextValue, "data")
f.datatype = "string"
f.rows = 20
f.rmempty = true
function f.cfgvalue()
return nixio.fs.readfile(adbinput) or ""
end
function f.write(self, section, data)
return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
end
function s.handle(self, state, data)
return true
end
return m

View File

@ -0,0 +1,87 @@
<%#
Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
<%-
local rowcnt = 1
function rowstyle()
rowcnt = rowcnt + 1
return (rowcnt % 2) + 1
end
function width(o)
if o.width then
if type(o.width) == 'number' then
return ' style="width:%dpx"' % o.width
end
return ' style="width:%s"' % o.width
end
return ''
end
-%>
<style type="text/css">
table.cbi-section-table th,
table.cbi-section-table td,
.cbi-section-table-cell,
.cbi-section-table-row,
.cbi-input-text
{
text-align:left;
vertical-align:top;
margin-right:auto;
margin-left:0px;
}
.cbi-input-text
{
outline:none;
box-shadow:none;
background:transparent;
padding-left:2px;
line-height:25px;
height:25px;
width:10em;
}
</style>
<fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
<% if self.title then -%>
<legend><%=self.title%></legend>
<%- end %>
<div class="cbi-section-descr"><%=self.description%></div>
<div class="cbi-section-node">
<table class="cbi-section-table">
<tr class="cbi-section-table-titles">
<%- if self.sectionhead then -%>
<th class="cbi-section-table-cell"><%=self.sectionhead%></th>
<%- else -%>
<th>&#160;</th>
<%- end -%>
<%- for i, k in pairs(self.children) do -%>
<th class="cbi-section-table-cell"<%=width(k)%>>
<%-=k.title-%>
</th>
<%- end -%>
</tr>
<%- local isempty = true
for i, k in ipairs(self:cfgsections()) do
section = k
isempty = false
scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" }
-%>
<tr class="cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>">
<th><%=k%></th>
<%-
for k, node in ipairs(self.children) do
node:render(section, scope or {})
end
if not scope.cbid:match("adb_src_cat") then
-%>
<td class="cbi-value-field">&#160;</td>
<%- end -%>
</tr>
<%- end -%>
</table>
</div>
</fieldset>

View File

@ -0,0 +1,13 @@
<style type="text/css">
textarea
{
border: 1px solid #cccccc;
padding: 5px;
font-size: 12px;
font-family: monospace;
resize: none;
white-space: pre;
overflow-wrap: normal;
overflow-x: scroll;
}
</style>

View File

@ -0,0 +1,20 @@
<%#
Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
<%+header%>
<div class="cbi-map">
<fieldset class="cbi-section">
<div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for adblock related messages only.%></div>
<textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
</fieldset>
</div>
<script type="text/javascript">
var textarea = document.getElementById('logread_id');
textarea.scrollTop = textarea.scrollHeight;
</script>
<%+footer%>

View File

@ -0,0 +1,65 @@
<%#
Copyright 2017 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
<%+header%>
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
<script type="text/javascript">
//<![CDATA[
var stxhr = new XHR();
function update_status(data)
{
var domain = data.value;
var input = document.getElementById('query_input');
var output = document.getElementById('query_output');
if (input && output)
{
output.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
'<%:Waiting for command to complete...%>'
;
input.parentNode.style.display = 'block';
input.style.display = 'inline';
stxhr.post('<%=luci.dispatcher.build_url('admin/services/adblock/advanced/result/')%>' + domain, { token: '<%=token%>' },
function(x)
{
if (x.responseText)
{
input.style.display = 'none';
output.innerHTML = String.format('<pre>%h</pre>', x.responseText);
}
else
{
input.style.display = 'none';
output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>';
}
}
);
}
}
//]]>
</script>
<form method="post" action="<%=REQUEST_URI%>">
<div class="cbi-map">
<fieldset class="cbi-section">
<div class="cbi-section-descr"><%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%></div>
<div style="width:33%; float:left;">
<input style="margin: 5px 0" type="text" value="google.com" name="input" />
<input type="button" value="<%:Query%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.input)" />
</div>
<br style="clear:both" />
<br />
</fieldset>
</div>
<fieldset class="cbi-section" style="display:none">
<legend id="query_input"><%:Collecting data...%></legend>
<span id="query_output"></span>
</fieldset>
</form>
<%+footer%>

View File

@ -0,0 +1,10 @@
<%#
Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
<%+cbi/valueheader%>
<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="outline:none;border:none;box-shadow:none;background:transparent;color:#0069d6;font-weight:bold;line-height:30px;height:30px;width:20em;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
<%+cbi/valuefooter%>

View File

@ -0,0 +1,462 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 17/09/2017\n"
"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.3\n"
"Language: it\n"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr ""
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Registro Adblock"
msgid "Adblock Status"
msgstr "Status Adblock"
msgid "Adblock Version"
msgstr "Versione Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
msgid "Advanced"
msgstr "Avanzato"
msgid "Available blocklist sources."
msgstr "Fonti lista di blocco disponibili."
msgid "Backup Directory"
msgstr "Directory del Backup"
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr "Fonti lista di Blocco"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un "
"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
msgid "Collecting data..."
msgstr "Raccogliendo dati..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso "
"usando i DNS."
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr ""
msgid "DNS Directory"
msgstr "Directory DNS"
msgid "Description"
msgstr "Descrizione"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup "
"della lista di blocco."
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr ""
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr "Modifica Lista Nera"
msgid "Edit Configuration"
msgstr "Modifica Configurazione"
msgid "Edit Whitelist"
msgstr "Modifica Lista Bianca"
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr "Attiva Adblock"
msgid "Enable Blocklist Backup"
msgstr "Attiva Backup Lista di Blocco"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
"Abilita il registro dettagliato in caso di qualsiasi errore di processo."
msgid "Enabled"
msgstr "Abilitato"
msgid "Extra Options"
msgstr "Opzioni Extra"
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr "Forza DNS Locale"
msgid "Force Overall Sort"
msgstr "Forza Ordinamento Globale"
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "File di input non trovato, per favore controlla la tua configurazione."
msgid "Invalid domain specified!"
msgstr "Dominio invalido specificato!"
msgid "Last Run"
msgstr "Ultimo Avvio"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili "
"nella sezione 'Avanzato'.<br />"
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
"Lista dei backend DNS supportati con la loro directory di default di esporto "
"della lista.<br />"
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr "Caricando"
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr "No"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono "
"adatte."
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr "Riassunto"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' "
"sono consentiti - indirizzi ip , jolly e regex non lo sono."
msgid "Please edit this file directly in a terminal session."
msgstr ""
"Per favore modifica questo file direttamente in una sessione al terminale."
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr "Interrogazione"
msgid "Query domains"
msgstr "Interrogazione domini"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
msgid "Resume"
msgstr "Riprendi"
msgid "Runtime Information"
msgstr "Informazione di Runtime"
msgid "SSL req."
msgstr "Ric. SSL"
msgid "Save"
msgstr "Salva"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr "Innesco d'Avvio"
msgid "Suspend"
msgstr "Sospendi"
msgid "Suspend / Resume Adblock"
msgstr "Sospendi / Riprendi Adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
"La grandezza del file è troppo grande per modificarla online in LuCI (&gt; "
"512 KB)."
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
"Questo form ti consente di modificare il contenuto della lista nera di "
"adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
"Questo form ti consente di modificare il contenuto della lista bianca di "
"adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
"Questo form ti consente di modificare il contenuto del file principale di "
"configurazione di adblock (/etc/config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
"Questo form ti consente di interrogare le liste di blocco attive per "
"determinati domini, p.e. per metterli nella lista bianca."
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
"solo ad adblock."
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella "
"sezione aggiuntiva sotto."
msgid "Trigger Delay"
msgstr "Ritardo Innesco"
msgid "Verbose Debug Logging"
msgstr "Registro di Debug Dettagliato"
msgid "View Logfile"
msgstr "Vedi Registro"
msgid "Waiting for command to complete..."
msgstr "Aspettando che il comando venga completato..."
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr "Sì"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr "disabilitato"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr "abilitato"
msgid "error"
msgstr "errore"
msgid "n/a"
msgstr "n/d"
msgid "paused"
msgstr "in pausa"
msgid "running"
msgstr ""
#~ msgid ""
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
#~ "'libustream-ssl' or the wget 'built-in'."
#~ msgstr ""
#~ "Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL "
#~ "adatta, p.e. 'libustream-ssl' o wget 'built-in'."
#~ msgid ""
#~ "Caution: Please don't select big lists or many lists at once on low "
#~ "memory devices to prevent OOM exceptions!"
#~ msgstr ""
#~ "Attenzione: Per favore non selezionare grandi liste o molte liste alla "
#~ "volta su dispositivi con poca memoria per prevenire errori OOM!"
#~ msgid ""
#~ "Create compressed blocklist backups, they will be used in case of "
#~ "download errors or during startup in manual mode."
#~ msgstr ""
#~ "Crea i backup compressi delle liste di blocco, saranno usati in caso di "
#~ "errori di download o durante l'avvio in modalità manuale."
#~ msgid ""
#~ "Enable memory intense overall sort / duplicate removal on low memory "
#~ "devices (&lt; 64 MB RAM)"
#~ msgstr ""
#~ "Attiva l'ordinamento globale / rimozione duplicati stressante per la "
#~ "memoria su dispositivi con poca memoria (&lt; 64 MB RAM)"
#~ msgid ""
#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
#~ "documentation</a>"
#~ msgstr ""
#~ "Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi "
#~ "documentazione online</a>"
#~ msgid ""
#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
#~ "config file or download a fresh default config from <a href=\"%s\" target="
#~ "\"_blank\">here</a>"
#~ msgstr ""
#~ "In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-"
#~ "esistente file di configurazione o scarica una nuova configurazione di "
#~ "default da <a href=\"%s\" target=\"_blank\">qui</a>"
#~ msgid ""
#~ "List of available network interfaces. By default the startup will be "
#~ "triggered by the 'wan' interface.<br />"
#~ msgstr ""
#~ "Lista delle interfacce di rete disponibili. Per default l'avvio sarà "
#~ "innescato dall'interfaccia 'wan'.<br />"
#~ msgid "Manual / Backup mode"
#~ msgstr "Modalità Manuale / Backup"
#~ msgid "Overall Blocked Domains"
#~ msgstr "Totale Domini Bloccati"
#~ msgid "Please update your adblock config file to use this package."
#~ msgstr ""
#~ "Per favore aggiorna il tuo file configurazione di adblock per usare "
#~ "questo pacchetto."
#~ msgid ""
#~ "Target directory for adblock backups. Please use only non-volatile disks, "
#~ "no ram/tmpfs drives."
#~ msgstr ""
#~ "Directory per i backup di adblock. Per favore usa solo dischi non "
#~ "volatili, non dischi ram/tmpfs."

View File

@ -0,0 +1,426 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Language: ja\n"
msgid "'Jail' Blocklist Creation"
msgstr "'Jail' ブロックリストの作成"
msgid "-------"
msgstr "(利用不可)"
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Adblock ログファイル"
msgid "Adblock Status"
msgstr "Adblock ステータス"
msgid "Adblock Version"
msgstr "Adblock バージョン"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr "Adblock の処理が開始されるまでの、追加の遅延時間(秒)です。"
msgid "Advanced"
msgstr "詳細設定"
msgid "Available blocklist sources."
msgstr "利用可能なブロックリスト提供元です。"
msgid "Backup Directory"
msgstr "バックアップ先 ディレクトリ"
msgid "Backup Mode"
msgstr "バックアップ モード"
msgid "Blocklist Sources"
msgstr "ブロックリスト提供元"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
"ホワイトリストに存在しない全ドメインへのアクセスをブロックするために、追加で "
"'Jail' リスト (/tmp/adb_list.jail) を作成します。<br />"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
"警告: RAM の空き容量が 64MB に満たないメモリー容量の小さいデバイスでは、 "
"OutOfMemory (OOM) 例外を防ぐために、5個よりも多くのリストを選択しないようにし"
"てください。"
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"自動スタートアップを無効にするには 'none' を、従来のタイムアウト(既定値: 30"
"秒)を使用するには 'timed' を選択してください。または、他のトリガとなるイン"
"ターフェースを選択してください。"
msgid "Collecting data..."
msgstr "データ収集中です..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
"DNS の利用によって広告/不正ドメインをブロックする、Adblock パッケージの設定で"
"す。"
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
"圧縮されたブロックリストのバックアップを作成します。これは、リストのダウン"
"ロードがエラーの場合、またはバックアップ モードでサービスを起動した場合に使用"
"されます。"
msgid "DNS Backend (DNS Directory)"
msgstr "DNS バックエンドDNS ディレクトリ)"
msgid "DNS Directory"
msgstr "DNS ディレクトリ"
msgid "Description"
msgstr "説明"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
"サービス起動時にブロックリストを自動的に更新せず、代わりにバックアップされた"
"ブロックリストを使用します。"
msgid "Download Utility"
msgstr "ダウンロード ユーティリティ"
msgid "Download Utility (SSL Library)"
msgstr "ダウンロード ユーティリティSSL ライブラリ)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
"opkg でパッケージをインストールする際に '--force-maintainer' オプションを使用"
"して既存の設定ファイルを上書きするか、 <a href=\"%s\" target=\"_blank\">ここ"
"</a> からデフォルトの設定ファイルをダウンロードしてください。"
msgid "Edit Blacklist"
msgstr "ブラックリストの編集"
msgid "Edit Configuration"
msgstr "設定の編集"
msgid "Edit Whitelist"
msgstr "ホワイトリストの編集"
msgid "Email Notification"
msgstr "メール通知"
msgid "Email Notification Count"
msgstr "メール通知カウント"
msgid "Enable Adblock"
msgstr "Adblock の有効化"
msgid "Enable Blocklist Backup"
msgstr "ブロックリスト バックアップの有効化"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
"メモリー容量の少ないデバイスRAM 空き領域 64MB 未満)において、一時ファイル"
"内の全体的なソート及び重複の除去を有効にします。"
msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
"何らかの処理エラーが発生した場合に、詳細なデバッグ ログを有効にします。"
msgid "Enabled"
msgstr "有効"
msgid "Extra Options"
msgstr "拡張オプション"
msgid "Flush DNS Cache"
msgstr "DNS キャッシュのクリア"
msgid "Flush DNS Cache after adblock processing."
msgstr "Adblock 処理の後に DNS キャッシュをクリアします。"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
"SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要です。"
"例: 'libustream-ssl' または 'built-in'"
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a> を"
"確認してください。"
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
"パフォーマンスの更なる改善のため、安全と思われる '8' や '16' などの値に引き上"
"げることができます。"
msgid "Force Local DNS"
msgstr "ローカル DNS の強制"
msgid "Force Overall Sort"
msgstr "全体ソートの強制"
msgid "Full path to the whitelist file."
msgstr "ホワイトリスト ファイルへのフルパスです。"
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
msgid "Invalid domain specified!"
msgstr "無効なドメインが指定されています!"
msgid "Last Run"
msgstr "最終実行"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション"
"で設定することができます。<br />"
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
"利用可能なネットワーク インターフェースの一覧です。通常、 'wan' インター"
"フェースによりスタートアップがトリガされます。<br />"
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク"
"トリのリストです<br />"
msgid "List of supported and fully pre-configured download utilities."
msgstr "サポートされ、かつ設定済のダウンロード ユーティリティの一覧です。"
msgid "Loading"
msgstr "読込中"
msgid "Max. Download Queue"
msgstr "ダウンロード キューの上限"
msgid "No"
msgstr "いいえ"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
msgid "Overall Domains"
msgstr "全体のドメイン"
msgid "Overview"
msgstr "概要"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
"1行に1つのドメインを追加してください。'#' から始まるコメントを記述できます"
"が、IP アドレスやワイルドカード、正規表現を設定値として使用することはできませ"
"ん。"
msgid "Please edit this file directly in a terminal session."
msgstr "ターミナル セッションで直接このファイルを編集してください。"
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
"注意: これには、追加で 'msmtp' のインストールとセットアップが必要です。"
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。"
"<br />"
msgid "Query"
msgstr "検索"
msgid "Query domains"
msgstr "ドメインの検索"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
"メール通知を行うドメイン カウントの下限を設定します。全体カウントが指定された"
"値以下の場合、メールを受け取ります(規定値: 0。<br />"
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
msgid "Resume"
msgstr "再開"
msgid "Runtime Information"
msgstr "実行情報"
msgid "SSL req."
msgstr "SSL 必須"
msgid "Save"
msgstr "保存"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
"処理エラーまたはドメイン カウントが0以下の場合、メールを送信します。<br />"
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
"ダウンロードの制御とリストの処理を同時並行的に行うダウンロード キューのサイズ"
"です(既定値: '4')。<br />"
msgid "Startup Trigger"
msgstr "スタートアップ トリガ"
msgid "Suspend"
msgstr "一時停止"
msgid "Suspend / Resume Adblock"
msgstr "Adblock の一時停止 / 再開"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
"Adblock バックアップの保存先ディレクトリです。 外部 USB フラッシュメモリなど"
"の不揮発性ドライブのみを使用してください。"
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "生成されたブロックリスト 'adb_list.overall' の保存先ディレクトリです。"
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
"ファイル サイズが大きすぎる512 KB超ため、 LuCI 上でオンライン編集できませ"
"ん。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
"このフォームでは、Adblock ブラックリスト (%s) の内容を変更することができま"
"す。<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
"このフォームでは、Adblock ホワイトリスト (%s) の内容を変更することができま"
"す。<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
"このフォームでは、メインのAdblock 設定ファイル (/etc/config/adblock) の内容を"
"変更することができます。"
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
"このフォームでは、現在有効なリスト内で特定のドメインを検索することができま"
"す。例: ホワイトリスト内"
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
"ます。"
msgid "This section contains no values yet"
msgstr "このセクションには、まだ値がありません"
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
"デフォルトのパスを上書きするには、下記拡張セクションの 'DNS ディレクトリ' オ"
"プションを使用します。"
msgid "Trigger Delay"
msgstr "トリガ遅延"
msgid "Verbose Debug Logging"
msgstr "詳細なデバッグ ログ"
msgid "View Logfile"
msgstr "ログファイルを見る"
msgid "Waiting for command to complete..."
msgstr "コマンド実行中です..."
msgid "Whitelist File"
msgstr "ホワイトリスト ファイル"
msgid "Yes"
msgstr "はい"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
"この制約の厳しいブロックリストを、ゲスト WiFi や子供の安全を守る設定などに手"
"動で利用することができます。"
msgid "disabled"
msgstr "無効"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
"例: Adblock のアップデート毎にメールを受け取るには、150000 に設定します。"
msgid "enabled"
msgstr "有効"
msgid "error"
msgstr "エラー"
msgid "n/a"
msgstr "利用不可"
msgid "paused"
msgstr "一時停止"
msgid "running"
msgstr "実行中"

View File

@ -0,0 +1,493 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
"Last-Translator: Luís Gabriel Lima Silva <gabrielima.si@gmail.com>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr ""
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Arquivo de log do Adblock"
msgid "Adblock Status"
msgstr ""
msgid "Adblock Version"
msgstr "Versão do Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
"Atraso de gatilho adicional em segundos antes do processamento do adblock "
"começar."
msgid "Advanced"
msgstr "Avançado"
msgid "Available blocklist sources."
msgstr "Fontes de listas de bloqueio disponíveis."
msgid "Backup Directory"
msgstr "Diretório da cópia de segurança"
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr "Fontes de listas de bloqueio"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
msgid "Collecting data..."
msgstr "Coletando dados..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
"Configuração do pacote adblock para bloquear, usando o DNS, domínios que "
"distribuem propagandas abusivas."
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr ""
msgid "DNS Directory"
msgstr ""
msgid "Description"
msgstr "Descrição"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
"Não atualize as listas de bloqueio automaticamente durante o início, use o "
"backup das listas como alternativa."
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr "Utilitário de Download (Biblioteca SSL)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr "Editar Lista de Bloqueio"
msgid "Edit Configuration"
msgstr "Editar Configuração"
msgid "Edit Whitelist"
msgstr "Editar Lista Permitida"
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr "Habilitar adblock"
msgid "Enable Blocklist Backup"
msgstr "Habilitar cópia de segurança da lista de bloqueio"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
msgid "Enabled"
msgstr "Habilitado"
msgid "Extra Options"
msgstr "Opções adicionais"
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr "Force o DNS local"
msgid "Force Overall Sort"
msgstr "Force Tipo Geral"
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
msgid "Invalid domain specified!"
msgstr "Domínio especificado inválido!"
msgid "Last Run"
msgstr ""
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr "Carregando"
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr "Não"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
"Opções para aprimoramentos adicionais caso as opções padrão não sejam "
"suficientes para você."
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr "Visão geral"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "Por favor edite esse arquivo direto em uma sessão de terminal."
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr "Consulta"
msgid "Query domains"
msgstr "Consulta de domínios"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
msgid "Resume"
msgstr ""
msgid "Runtime Information"
msgstr "Informação de execução"
msgid "SSL req."
msgstr "req. de SSL"
msgid "Save"
msgstr "Salvar"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr ""
msgid "Suspend"
msgstr ""
msgid "Suspend / Resume Adblock"
msgstr "Suspender / Resumir adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
"O tamanho do arquivo é muito grande para edição online no LuCI (&gt; 512 KB)."
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
"Esse formulário permite que você modifique o conteúdo das listas de bloqueio "
"do adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
"Esse formulário permite que você modifique o conteúdo das listas de "
"permissão do adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
"Esse formulário permite que você modifique o conteúdo das do arquivo de "
"configuração principal (/etc/config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
"Esse formulário permite que você consulte listas de blocos ativos para "
"certos domínios, e.x. para listas de permissão."
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
"adblock apenas."
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
msgid "Trigger Delay"
msgstr "Atraso no gatilho"
msgid "Verbose Debug Logging"
msgstr ""
msgid "View Logfile"
msgstr "Ver arquivo de log"
msgid "Waiting for command to complete..."
msgstr "Aguardando por comando para completar..."
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr "Sim"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr ""
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr ""
msgid "error"
msgstr ""
msgid "n/a"
msgstr "n/d"
msgid "paused"
msgstr ""
msgid "running"
msgstr ""
#~ msgid ""
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
#~ "'libustream-ssl' or the wget 'built-in'."
#~ msgstr ""
#~ "Para uma lista de bloqueio protegida por SSL você precisa de uma "
#~ "biblioteca SSL adequada, e.x. 'libustream-ssl' ou o wget 'built-in'."
#~ msgid ""
#~ "Create compressed blocklist backups, they will be used in case of "
#~ "download errors or during startup in manual mode."
#~ msgstr ""
#~ "Crie backups comprimidos das listas de bloqueio, eles serão usados em "
#~ "caso de erro dedownload ou durante o início em modo manual."
#~ msgid ""
#~ "Enable memory intense overall sort / duplicate removal on low memory "
#~ "devices (&lt; 64 MB RAM)"
#~ msgstr ""
#~ "Ativar tipo geral intenso de memória / duplicar remoção em dispositivos "
#~ "com pouca memória (&lt; 64 MB RAM)"
#~ msgid ""
#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
#~ "documentation</a>"
#~ msgstr ""
#~ "Para outras informações <a href=\"%s\" target=\"_blank\">veja a "
#~ "documentação online</a>"
#~ msgid "Manual / Backup mode"
#~ msgstr "Manual / Modo backup"
#~ msgid "Blocked domains (overall)"
#~ msgstr "Domínios bloqueados (total)"
#~ msgid "DNS backend"
#~ msgstr "Porta dos fundos de DNS"
#~ msgid "Enable verbose debug logging"
#~ msgstr "Habilite registros detalhados para depuração"
#~ msgid "Last rundate"
#~ msgstr "Última data de execução"
#~ msgid ""
#~ "Note that list URLs and Shallalist category selections are configurable "
#~ "in the 'Advanced' section."
#~ msgstr ""
#~ "Observe que as URLs da lista e as seleções da categoria Shallalist são "
#~ "configuráveis na secção 'Avançada'."
#~ msgid "Redirect all DNS queries to the local resolver."
#~ msgstr "Redirecione todas as consultas de DNS para o resolvedor local."
#~ msgid "Restrict interface trigger to certain interface(s)"
#~ msgstr "Restingir o gatilho de interface para certas interface(s)"
#~ msgid "Resume adblock"
#~ msgstr "Resumir adblock"
#~ msgid "Status"
#~ msgstr "Estado"
#~ msgid "active"
#~ msgstr "ativo"
#~ msgid "no domains blocked"
#~ msgstr "nenhum domínio bloqueado"
#~ msgid "suspended"
#~ msgstr "suspenso"
#~ msgid "Backup options"
#~ msgstr "Opções da cópia de segurança"
#~ msgid ""
#~ "). Note that list URLs and Shallalist category selections are not "
#~ "configurable via Luci."
#~ msgstr ""
#~ "). Note que a lista de URL e as seleções de categoria da Shallalist não "
#~ "são configuráveis pelo Luci."
#~ msgid "Available blocklist sources ("
#~ msgstr "Fontes de listas de bloqueio disponíveis ("
#~ msgid ""
#~ "File with whitelisted hosts/domains that are allowed despite being on a "
#~ "blocklist."
#~ msgstr ""
#~ "Arquivo com a lista branca dos equipamentos/domínios que serão "
#~ "autorizados mesmo estando na lista de bloqueio."
#~ msgid "Global options"
#~ msgstr "Opções Globais"
#~ msgid "Restrict reload trigger to certain interface(s)"
#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
#~ msgid ""
#~ "Space separated list of wan interfaces that trigger reload action. To "
#~ "disable reload trigger set it to 'false'. Default: empty"
#~ msgstr ""
#~ "Lista das interfaces WAN, separadas por espaço, que podem disparar uma "
#~ "ação de recarga. Para desabilitar este gatilho, defina-o como 'false'. "
#~ "Padrão: em branco"
#~ msgid "Whitelist file"
#~ msgstr "Arquivo da lista branca"
#~ msgid "see list details"
#~ msgstr "veja os detalhes da lista"

View File

@ -0,0 +1,424 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: adblock\n"
"POT-Creation-Date: 2017-10-22 13:00+0300\n"
"PO-Revision-Date: 2018-02-07 00:23+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 "'Jail' Blocklist Creation"
msgstr "Создание Черного<br />списка 'Jail'"
msgid "-------"
msgstr "-------"
msgid "Adblock"
msgstr "AdBlock"
msgid "Adblock Logfile"
msgstr "Ведение системного журала Adblock-ом"
msgid "Adblock Status"
msgstr "Состояние Adblock-а"
msgid "Adblock Version"
msgstr "Версия Adblock-а"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr "Дополнительная задержка в секундах до начала работы Adblock-a."
msgid "Advanced"
msgstr "Дополнительно"
msgid "Available blocklist sources."
msgstr "Источники списков блокировки. "
msgid "Backup Directory"
msgstr "Папка для бэкапа"
msgid "Backup Mode"
msgstr "Режим сохранения бекапа"
msgid "Blocklist Sources"
msgstr "Источники списков блокировки"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
"Создать дополнительный Черный список 'Jail' (/tmp/adb_list.jail), чтобы "
"заблокировать доступ ко всем доменам, кроме тех что перечислены в файле "
"Белого списка.<br />"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
"ВНИМАНИЕ: Для предотвращения возможного программного сбоя и перезагрузки, на "
"устройствах с объемом оперативной памяти менее 64MB, не выбирайте больше 5 "
"списков."
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"Выберите 'none', чтобы отключить автоматический старт, 'timed', чтобы "
"использовать дефолтную задержку (по умолчанию 30 сек.) или выберите другой "
"интерфейс запуска."
msgid "Collecting data..."
msgstr "Сбор данных..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
"Настройка Adblock. Приложения для блокировки ненадежных или добавления "
"доверенных доменов используя DNS. "
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
"Создавайте сжатые резервные копии списков блокировки, они будут "
"использоваться в случае ошибок загрузки или при запуске в ручном режиме."
msgid "DNS Backend (DNS Directory)"
msgstr "DNS бэкенд (папка DNS)"
msgid "DNS Directory"
msgstr "Папка DNS"
msgid "Description"
msgstr "Описание"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
"Не обновляйте списки блокировок автоматически во время запуска, вместо этого "
"используйте резервные копии списков блокировок."
msgid "Download Utility"
msgstr "Скачать утилиту"
msgid "Download Utility (SSL Library)"
msgstr "Загрузить утилиту (библиотека SSL)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
"Устанавливая пакет с помощью opkg, используйте '--force-maintainer', чтобы "
"перезаписать существующий config файл или загрузить новый дефолтный config "
"файл <a href=\"%s\" target=\"_blank\">здесь</a>"
msgid "Edit Blacklist"
msgstr "Редактировать Черный список"
msgid "Edit Configuration"
msgstr "Редактировать config файл"
msgid "Edit Whitelist"
msgstr "Редактировать Белый список"
msgid "Email Notification"
msgstr "Уведомление на email"
msgid "Email Notification Count"
msgstr "Кол-во уведомлений на email"
msgid "Enable Adblock"
msgstr "Включить Adblock"
msgid "Enable Blocklist Backup"
msgstr "Включить сохранение<br />списка блокировок"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
"Включите полную сортировку / удаление дубликатов памяти на устройствах с "
"низким объемом памяти (&lt; 64 MB свободной оперативной памяти)."
msgid "Enable verbose debug logging in case of any processing error."
msgstr "Включите подробное ведение журнала отладки в случае ошибки обработки."
msgid "Enabled"
msgstr "Включено"
msgid "Extra Options"
msgstr "Дополнительные настройки"
msgid "Flush DNS Cache"
msgstr "Очистка кэша DNS"
msgid "Flush DNS Cache after adblock processing."
msgstr "Очистки DNS-кэша после обработки Adblock-ом."
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
"Для SSL-защищенных источников списков блокировки, вам нужны подходящие SSL "
"библиотеки, например 'libustream-ssl' или 'built-in'."
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
"<br />Для получения дополнительной информации <a href=\"%s\" target=\"_blank"
"\"> смотрите онлайн документацию</a>."
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
"Для повышения производительности вы можете увеличить это значение, например "
"значения '8' или '16' повысят безопасность."
msgid "Force Local DNS"
msgstr "Назначить локальный DNS"
msgid "Force Overall Sort"
msgstr "Назначить полную сортировку"
msgid "Full path to the whitelist file."
msgstr "Полный путь к файлу Белого списка."
msgid "Input file not found, please check your configuration."
msgstr "Config файл не найден, настройте config файл."
msgid "Invalid domain specified!"
msgstr "Задан недопустимый домен!"
msgid "Last Run"
msgstr "Последнее время запуска"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
"Список URL-адресов и настройка списка использования, настраиваются на "
"странице 'Дополнительно'.<br />"
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
"Список доступных сетевых интерфейсов. По умолчанию установлен 'wan' "
"интерфейс.<br />"
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
"Список поддерживаемых серверов DNS перемещается в папку по умолчанию.<br />"
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
"Список поддерживаемых и полностью предварительно настроенных утилит загрузки."
msgid "Loading"
msgstr "Загрузка"
msgid "Max. Download Queue"
msgstr "Максимальное значение очереди загрузки"
msgid "No"
msgstr "Нет"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
"Возможные варианты детальной настройки, если значения по умолчанию не "
"подходят для вас."
msgid "Overall Domains"
msgstr "Итоговые домены"
msgid "Overview"
msgstr "Главное меню"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
"Добавляйте только один домен в строке. Комментарии вводятся используя '#' "
"разрешенные - ip адреса, метасимволы и нерегулярные выражения."
msgid "Please edit this file directly in a terminal session."
msgstr "Отредактируйте данный файл, строго в терминале."
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr "Внимание: это потребует дополнительной установки пакета 'msmtp'."
msgid "Please update your adblock config file to use this package.<br />"
msgstr "Обновите config файл Adblock, чтобы использовать этот пакет.<br />"
msgid "Query"
msgstr "Запрос"
msgid "Query domains"
msgstr "Запрос доменов"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
"Увеличьте количество уведомлений по email, чтобы получить сообщения, если "
"общее количество меньше или равно заданному пределу (по умолчанию 0),<br />"
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
"Перенаправлять все DNS запросы с интерфейса 'lan' на обработку Adblock-ом."
msgid "Resume"
msgstr "Возобновить"
msgid "Runtime Information"
msgstr "Информация о состоянии"
msgid "SSL req."
msgstr "Запрос SSL"
msgid "Save"
msgstr "Сохранить"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
"Отправлять по email уведомления в случае ошибки обработки или если домен "
"&le; 0.<br />"
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
"Значение очереди загрузки для выполнения параллельных загрузок (по умолчанию "
"'4').<br />"
msgid "Startup Trigger"
msgstr "Назначить"
msgid "Suspend"
msgstr "Приостановить"
msgid "Suspend / Resume Adblock"
msgstr "Приостановить / Возобновить Adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
"Назначить папку для резервного копирования Adblock. Используйте такие "
"накопители, как usb флешка."
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "Назначить папку для создания списка блокировки 'adb_list.overall'."
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
"Размер файла слишком большой, для онлайн редактирования в LuCI (&gt; 512 KB)."
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
"Страница позволяет изменять содержимое Черного списка Adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
"Страница позволяет изменять содержимое Белого списка Adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
"Страница позволяет изменять содержимое главного config файла Adblock-a (/etc/"
"config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
"Страница позволяет запросить домены для конкретных списков, например для "
"Белого списка."
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr "Страница системного журнала. Только сообщения связанные с Adblock."
msgid "This section contains no values yet"
msgstr "Здесь не содержатся необходимые значения"
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
"Чтобы заменить дефолтный путь, используйте строку ниже 'Папка DNS' в разделе "
"'Дополнительные настройки'."
msgid "Trigger Delay"
msgstr "Задержка запуска"
msgid "Verbose Debug Logging"
msgstr "Подробное ведение<br />журнала отладки"
msgid "View Logfile"
msgstr "Показать системный журнал"
msgid "Waiting for command to complete..."
msgstr "Ожидание завершения выполнения команды..."
msgid "Whitelist File"
msgstr "Файл Белого списка"
msgid "Yes"
msgstr "Да"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
"Вы можете вручную настраивать и использовать этот Черный список, например "
"для гостевой wifi сети или режима родительского контроля."
msgid "disabled"
msgstr "отключено"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
"например, чтобы получать уведомления по электронной почте при каждом "
"обновлении Adblock-а установите значение 150000."
msgid "enabled"
msgstr "включено"
msgid "error"
msgstr "ошибка"
msgid "n/a"
msgstr "нет данных"
msgid "paused"
msgstr "остановлено"
msgid "running"
msgstr "работает"

View File

@ -0,0 +1,451 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr "-------"
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Adblock's loggfil"
msgid "Adblock Status"
msgstr "Status för Adblock"
msgid "Adblock Version"
msgstr "Version av Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
msgid "Advanced"
msgstr "Avancerat"
msgid "Available blocklist sources."
msgstr "Tillgängliga källor för blockeringslistor"
msgid "Backup Directory"
msgstr "Säkerhetskopiera mapp"
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr "Källor för blockeringslistor"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"Välj 'inga' för att stänga av automatiska uppstarter, 'tidsinställd för att "
"använda ett klassiskt avbrott (30 sek. är standard) eller välj ett annat "
"utlösande gränssnitt."
msgid "Collecting data..."
msgstr "Samlar in data..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
"Konfiguration av paketet adblock för att blockera annons/otillåtna domäner "
"genom att använda DNS."
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr "DNS-bakände (DNS-mapp)"
msgid "DNS Directory"
msgstr "DNS-mapp"
msgid "Description"
msgstr "Beskrivning"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
"Uppdatera inte automatiskt blockeringlistor vid uppstarten, använd "
"säkerhetskopierade blockeringslistor istället."
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr "Nerladdningsprogram (SSL-bibliotek)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr "Redigera svartlista"
msgid "Edit Configuration"
msgstr "Redigerar konfigurationen"
msgid "Edit Whitelist"
msgstr "Redigera vitlista"
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr "Aktivera adblock"
msgid "Enable Blocklist Backup"
msgstr "Aktivera säkerhetskopiering av blockeringslistan"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
msgid "Enabled"
msgstr "Aktiverad"
msgid "Extra Options"
msgstr "Extra alternativ"
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr "Tvinga lokal DNS"
msgid "Force Overall Sort"
msgstr ""
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
msgid "Invalid domain specified!"
msgstr "Ogiltig domän angiven!"
msgid "Last Run"
msgstr "Kördes senast"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr "Laddar"
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr "Nej"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr "Översikt"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "Vänligen redigera den här filen direkt i en terminal-session."
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr "Fråga"
msgid "Query domains"
msgstr "Fråga efter domäner"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
msgid "Resume"
msgstr "Återuppta"
msgid "Runtime Information"
msgstr "Information om körtid"
msgid "SSL req."
msgstr "SSL-rek."
msgid "Save"
msgstr "Spara"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in parallel "
"(default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr "Uppstartslösare"
msgid "Suspend"
msgstr "Stäng av"
msgid "Suspend / Resume Adblock"
msgstr "Upphäv / Återuppta adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr "Filstorleken är för stor för online-redigering i LuCi (&gt; 512 KB)."
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
"Det här formuläret tillåter dig att förändra innehållet i adblock's "
"svartlista (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista "
"(%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
"Det här formuläret tillåter dig att förändra innehållet i adblock's "
"huvudsakliga konfigurations fil (/etc/config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
msgid "Trigger Delay"
msgstr ""
msgid "Verbose Debug Logging"
msgstr ""
msgid "View Logfile"
msgstr "Visa loggfil"
msgid "Waiting for command to complete..."
msgstr "Väntar på att kommandot ska slutföras..."
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr "Ja"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr "inaktiverad"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr "aktiverad"
msgid "error"
msgstr "fel"
msgid "n/a"
msgstr "n/a"
msgid "paused"
msgstr "pausad"
msgid "running"
msgstr ""
#~ msgid ""
#~ "Caution: Please don't select big lists or many lists at once on low "
#~ "memory devices to prevent OOM exceptions!"
#~ msgstr ""
#~ "Försiktig: Vänligen välj inte stora listor eller många listor på samma "
#~ "gång för enheter med lite minne för att undvika OOM-undantag!"
#~ msgid ""
#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
#~ "documentation</a>"
#~ msgstr ""
#~ "För mer information <a href=\"%s\" target=\"_blank\">se dokumentationen "
#~ "på internet</a>"
#~ msgid "Manual / Backup mode"
#~ msgstr "Manuell / Säkerhetskopieringsläge"
#~ msgid "Please update your adblock config file to use this package."
#~ msgstr ""
#~ "Vänligen uppdatera din adblock's konfigurationsfil till att använda det "
#~ "här paketet."
#~ msgid "Blocked domains (overall)"
#~ msgstr "Blockerade domäner (övergripande)"
#~ msgid "DNS backend"
#~ msgstr "Bakände för DNS"
#~ msgid "Enable verbose debug logging"
#~ msgstr "Aktivera utförlig loggning för avlusning"
#~ msgid "Last rundate"
#~ msgstr "Senaste kördatum"
#~ msgid "Redirect all DNS queries to the local resolver."
#~ msgstr "Dirigera om alla DNS-förfrågningar till den lokala "
#~ msgid "Resume adblock"
#~ msgstr "Återuppta adblock"
#~ msgid "Status"
#~ msgstr "Status"
#~ msgid "Suspend adblock"
#~ msgstr "Upphäv adblock"
#~ msgid "active"
#~ msgstr "aktiv"
#~ msgid "no domains blocked"
#~ msgstr "inga domäner blockerades"
#~ msgid "suspended"
#~ msgstr "upphävd"
#~ msgid "."
#~ msgstr "."
#~ msgid "For further information"
#~ msgstr "För mer information"
#~ msgid "Backup options"
#~ msgstr "Alternativ för säkerhetskopiering"
#~ msgid "Available blocklist sources ("
#~ msgstr "Tillgängliga källor för blockeringslistor ("
#~ msgid "Global options"
#~ msgstr "Globala alternativ"
#~ msgid "Whitelist file"
#~ msgstr "Vitlista fil"
#~ msgid "see list details"
#~ msgstr "se listans detaljer"
#~ msgid "Count"
#~ msgstr "Räkna"
#~ msgid "Do not write status info to flash"
#~ msgstr "Skriv inte status info till flash"
#~ msgid "Redirect all DNS queries to the local resolver"
#~ msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern"

View File

@ -0,0 +1,352 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr ""
msgid "Adblock"
msgstr ""
msgid "Adblock Logfile"
msgstr ""
msgid "Adblock Status"
msgstr ""
msgid "Adblock Version"
msgstr ""
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
msgid "Advanced"
msgstr ""
msgid "Available blocklist sources."
msgstr ""
msgid "Backup Directory"
msgstr ""
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr ""
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
msgid "Collecting data..."
msgstr ""
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr ""
msgid "DNS Directory"
msgstr ""
msgid "Description"
msgstr ""
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr ""
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr ""
msgid "Edit Configuration"
msgstr ""
msgid "Edit Whitelist"
msgstr ""
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr ""
msgid "Enable Blocklist Backup"
msgstr ""
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
msgid "Enabled"
msgstr ""
msgid "Extra Options"
msgstr ""
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr ""
msgid "Force Overall Sort"
msgstr ""
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
msgid "Invalid domain specified!"
msgstr ""
msgid "Last Run"
msgstr ""
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr ""
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr ""
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr ""
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr ""
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr ""
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr ""
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr ""
msgid "Query domains"
msgstr ""
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
msgid "Resume"
msgstr ""
msgid "Runtime Information"
msgstr ""
msgid "SSL req."
msgstr ""
msgid "Save"
msgstr ""
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr ""
msgid "Suspend"
msgstr ""
msgid "Suspend / Resume Adblock"
msgstr ""
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr ""
msgid "Trigger Delay"
msgstr ""
msgid "Verbose Debug Logging"
msgstr ""
msgid "View Logfile"
msgstr ""
msgid "Waiting for command to complete..."
msgstr ""
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr ""
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr ""
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr ""
msgid "error"
msgstr ""
msgid "n/a"
msgstr ""
msgid "paused"
msgstr ""
msgid "running"
msgstr ""

View File

@ -0,0 +1,371 @@
# liushuyu <liushuyu_011@163.com>, 2017.
# Yangfl <mmyangfl@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2017-10-28 16:06+0800\n"
"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
"Language-Team: <debian-l10n-chinese@lists.debian.org>\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: Gtranslator 2.91.7\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr "-------"
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Adblock 日志文件"
msgid "Adblock Status"
msgstr "Adblock 状态"
msgid "Adblock Version"
msgstr "Adblock 版本"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr "触发 Adblock 开始处理前的额外延迟(以秒为单位)。"
msgid "Advanced"
msgstr "高级"
msgid "Available blocklist sources."
msgstr "可用的 blocklist 来源。"
msgid "Backup Directory"
msgstr "备份目录"
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr "拦截列表来源"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"选择“none”以禁用自动启动“timed”以使用默认的超时设定默认 30 秒),或选择另"
"一个触发接口。"
msgid "Collecting data..."
msgstr "正在收集数据..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr "DNS 后端DNS 目录)"
msgid "DNS Directory"
msgstr "DNS 目录"
msgid "Description"
msgstr "描述"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr "启动期间不要自动更新 blocklists改用 blocklists 的备份。"
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr "下载实用程序SSL 库)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr "编辑黑名单"
msgid "Edit Configuration"
msgstr "编辑设置"
msgid "Edit Whitelist"
msgstr "编辑白名单"
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr "启用 Adblock"
msgid "Enable Blocklist Backup"
msgstr "启用 Blocklist 备份"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr "在出现任何处理错误的情况下启用详细调试日志记录。"
msgid "Enabled"
msgstr "已启用"
msgid "Extra Options"
msgstr "额外选项"
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr "强制本地 DNS"
msgid "Force Overall Sort"
msgstr "强制整体排序"
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "输入文件未找到,请检查您的配置。"
msgid "Invalid domain specified!"
msgstr "无效域名!"
msgid "Last Run"
msgstr "最后运行"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr "列表 URL 和 Shallalist 类别选择可在“高级”选项卡中配置。<br />"
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr "支持的 DNS 后端列表及其默认列表导出目录。<br />"
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr "加载中"
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr "否"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "在默认设置并不适合您时的额外选项。"
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr "总览"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
"请每行只添加一个域。允许使用''开头的注释 - ip 地址、通配符和正则表达式都不"
"允许。"
msgid "Please edit this file directly in a terminal session."
msgstr "请在终端会话中直接编辑此文件。"
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr "查询"
msgid "Query domains"
msgstr "查询域"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
msgid "Resume"
msgstr "恢复"
msgid "Runtime Information"
msgstr "运行信息"
msgid "SSL req."
msgstr "SSL 要求"
msgid "Save"
msgstr "保存"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in parallel "
"(default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr "启动触发器"
msgid "Suspend"
msgstr "暂停"
msgid "Suspend / Resume Adblock"
msgstr "暂停/恢复 Adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "生成的 blocklist 'adb_list.overall'的目标目录。"
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr "文件大小太大,无法在 LuCI&gt; 512 KB中进行在线编辑。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr "此表单允许您修改 adblock 黑名单(%s的内容。<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr "此表单允许您修改 adblock 白名单(%s的内容。<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr "此表单允许您修改主要 adblock 配置文件(/etc/config/adblock的内容。"
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr "此表单允许您查询某些域的活动块列表,例如用于列出白名单。"
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr "此表单显示系统日志输出,仅针对 adblock 相关的消息进行了预筛选。"
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr "要覆盖默认路径请使用下面额外部分中的“DNS 目录”选项。"
msgid "Trigger Delay"
msgstr "触发延迟"
msgid "Verbose Debug Logging"
msgstr "详细的调试记录"
msgid "View Logfile"
msgstr "查看日志文件"
msgid "Waiting for command to complete..."
msgstr "正在执行命令..."
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr "是"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr "已禁用"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr "已启用"
msgid "error"
msgstr "错误"
msgid "n/a"
msgstr "不可用"
msgid "paused"
msgstr "已暂停"
msgid "running"
msgstr ""

View File

@ -0,0 +1,371 @@
# liushuyu <liushuyu_011@163.com>, 2017.
# Yangfl <mmyangfl@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2017-10-28 16:06+0800\n"
"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
"Language-Team: <debian-l10n-chinese@lists.debian.org>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Gtranslator 2.91.7\n"
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "'Jail' Blocklist Creation"
msgstr ""
msgid "-------"
msgstr "-------"
msgid "Adblock"
msgstr "Adblock"
msgid "Adblock Logfile"
msgstr "Adblock 日誌檔案"
msgid "Adblock Status"
msgstr "Adblock 狀態"
msgid "Adblock Version"
msgstr "Adblock 版本"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr "觸發 Adblock 開始處理前的額外延遲(以秒為單位)。"
msgid "Advanced"
msgstr "高階"
msgid "Available blocklist sources."
msgstr "可用的 blocklist 來源。"
msgid "Backup Directory"
msgstr "備份目錄"
msgid "Backup Mode"
msgstr ""
msgid "Blocklist Sources"
msgstr "攔截列表來源"
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
"選擇“none”以禁用自動啟動“timed”以使用預設的超時設定預設 30 秒),或選擇另"
"一個觸發介面。"
msgid "Collecting data..."
msgstr "正在收集資料..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr "Adblock 配置工具,通過 DNS 來攔截廣告和阻止域名。"
msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
msgid "DNS Backend (DNS Directory)"
msgstr "DNS 後端DNS 目錄)"
msgid "DNS Directory"
msgstr "DNS 目錄"
msgid "Description"
msgstr "描述"
msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr "啟動期間不要自動更新 blocklists改用 blocklists 的備份。"
msgid "Download Utility"
msgstr ""
msgid "Download Utility (SSL Library)"
msgstr "下載實用程式SSL 庫)"
msgid ""
"During opkg package installation use the '--force-maintainer' option to "
"overwrite the pre-existing config file or download a fresh default config "
"from <a href=\"%s\" target=\"_blank\">here</a>"
msgstr ""
msgid "Edit Blacklist"
msgstr "編輯黑名單"
msgid "Edit Configuration"
msgstr "編輯設定"
msgid "Edit Whitelist"
msgstr "編輯白名單"
msgid "Email Notification"
msgstr ""
msgid "Email Notification Count"
msgstr ""
msgid "Enable Adblock"
msgstr "啟用 Adblock"
msgid "Enable Blocklist Backup"
msgstr "啟用 Blocklist 備份"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
msgid "Enable verbose debug logging in case of any processing error."
msgstr "在出現任何處理錯誤的情況下啟用詳細除錯日誌記錄。"
msgid "Enabled"
msgstr "已啟用"
msgid "Extra Options"
msgstr "額外選項"
msgid "Flush DNS Cache"
msgstr ""
msgid "Flush DNS Cache after adblock processing."
msgstr ""
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
msgid "Force Local DNS"
msgstr "強制本地 DNS"
msgid "Force Overall Sort"
msgstr "強制整體排序"
msgid "Full path to the whitelist file."
msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "輸入檔案未找到,請檢查您的配置。"
msgid "Invalid domain specified!"
msgstr "無效域名!"
msgid "Last Run"
msgstr "最後執行"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
"'Advanced' section.<br />"
msgstr "列表 URL 和 Shallalist 類別選擇可在“高階”選項卡中配置。<br />"
msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
">"
msgstr "支援的 DNS 後端列表及其預設列表匯出目錄。<br />"
msgid "List of supported and fully pre-configured download utilities."
msgstr ""
msgid "Loading"
msgstr "載入中"
msgid "Max. Download Queue"
msgstr ""
msgid "No"
msgstr "否"
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "在預設設定並不適合您時的額外選項。"
msgid "Overall Domains"
msgstr ""
msgid "Overview"
msgstr "總覽"
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
"請每行只新增一個域。允許使用''開頭的註釋 - ip 位址、萬用字元和正則表示式都"
"不允許。"
msgid "Please edit this file directly in a terminal session."
msgstr "請在終端會話中直接編輯此檔案。"
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
msgid "Query"
msgstr "查詢"
msgid "Query domains"
msgstr "查詢域"
msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "將所有 DNS 查詢從“lan”區域重定向到本地解析器。"
msgid "Resume"
msgstr "恢復"
msgid "Runtime Information"
msgstr "執行資訊"
msgid "SSL req."
msgstr "SSL 要求"
msgid "Save"
msgstr "儲存"
msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
msgid ""
"Size of the download queue to handle downloads &amp; list processing in parallel "
"(default '4').<br />"
msgstr ""
msgid "Startup Trigger"
msgstr "啟動觸發器"
msgid "Suspend"
msgstr "暫停"
msgid "Suspend / Resume Adblock"
msgstr "暫停/恢復 Adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "生成的 blocklist 'adb_list.overall'的目標目錄。"
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr "檔案大小太大,無法在 LuCI&gt; 512 KB中進行線上編輯。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr "此表單允許您修改 adblock 黑名單(%s的內容。<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr "此表單允許您修改 adblock 白名單(%s的內容。<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr "此表單允許您修改主要 adblock 配置檔案(/etc/config/adblock的內容。"
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr "此表單允許您查詢某些域的活動塊列表,例如用於列出白名單。"
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr "此表單顯示系統日誌輸出,僅針對 adblock 相關的訊息進行了預篩選。"
msgid "This section contains no values yet"
msgstr ""
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
msgstr "要覆蓋預設路徑請使用下面額外部分中的“DNS 目錄”選項。"
msgid "Trigger Delay"
msgstr "觸發延遲"
msgid "Verbose Debug Logging"
msgstr "詳細的除錯記錄"
msgid "View Logfile"
msgstr "檢視日誌檔案"
msgid "Waiting for command to complete..."
msgstr "正在執行命令..."
msgid "Whitelist File"
msgstr ""
msgid "Yes"
msgstr "是"
msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
msgid "disabled"
msgstr "已禁用"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
msgstr ""
msgid "enabled"
msgstr "已啟用"
msgid "error"
msgstr "錯誤"
msgid "n/a"
msgstr "不可用"
msgid "paused"
msgstr "已暫停"
msgid "running"
msgstr ""

View File

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

View File

@ -0,0 +1,20 @@
# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
# This is free software, licensed under the GNU General Public License v3.
include $(TOPDIR)/rules.mk
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
LUCI_TITLE:=Advanced Linksys Reboot Web UI
LUCI_DESCRIPTION:=Provides Web UI (found under System/Advanced Reboot) to reboot supported Linksys and ZyXEL routers to\
an altnerative partition. Also provides Web UI to shut down (power off) your device. Supported dual-partition\
routers are listed at https://github.com/stangri/openwrt-luci/blob/luci-app-advanced-reboot/applications/luci-app-advanced-reboot/README.md
LUCI_DEPENDS:=+luci
LUCI_PKGARCH:=all
PKG_RELEASE:=27
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,37 @@
# Advanced Reboot Web UI (luci-app-advanced-reboot)
## Description
This package allows you to reboot to an alternative partition on the supported (dual-partition) routers and to power off (power down) your OpenWrt/LEDE Project device.
## Supported Devices
Currently supported dual-partition devices include:
- Linksys EA3500
- Linksys E4200v2
- Linksys EA4500
- Linksys EA8500
- Linksys WRT1200AC
- Linksys WRT1900AC
- Linksys WRT1900ACv2
- Linksys WRT1900ACS
- Linksys WRT3200ACM
- ZyXEL NBG6817
If you're interested in having your device supported, please post in [LEDE Project Forum Support Thread](https://forum.lede-project.org/t/web-ui-to-reboot-to-another-partition-dual-partition-routers/3423).
## Screenshot (luci-app-advanced-reboot)
![screenshot](https://raw.githubusercontent.com/stangri/openwrt_packages/master/screenshots/luci-app-advanced-reboot/screenshot01.png "screenshot")
## How to install
Install ```luci-app-advanced-reboot``` from Web UI or connect to your router via ssh and run the following commands:
```sh
opkg update
opkg install luci-app-advanced-reboot
```
## Notes/Known Issues
- When you reboot to a different partition, your current settings (WiFi SSID/password, etc.) will not apply to a different partition. Different partitions might have completely different settings and even firmware.
- If you reboot to a partition which doesn't allow you to switch boot partitions (like stock vendor firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, losing all the settings.
- Some devices allow you to trigger reboot to an alternative partition by interrupting boot 3 times in a row (by resetting/switching off the device or pulling power). As these methods might be different for different devices, do your own homework.
## Thanks
I'd like to thank everyone who helped create, test and troubleshoot this package. Without contributions from [@hnyman](https://github.com/hnyman), [@jpstyves](https://github.com/jpstyves) and [@slh](https://github.com/pkgadd) it wouldn't have been possible.

View File

@ -0,0 +1,205 @@
-- Copyright 2017 Stan Grishin <stangri@melmac.net>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.advanced_reboot", package.seeall)
-- device_name, board_name, part1, part2, offset, env_var_1, value_1_1, value_1_2, env_var_2, value_2_1, value_2_2
devices = {
{"Linksys EA3500", "linksys-audi", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys E4200v2/EA4500", "linksys-viper", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys EA8500", "ea8500", "mtd13", "mtd15", 32, "boot_part", 1, 2},
-- {"Linksys EA9500", "linksys,panamera", "mtd3", "mtd6", 28, "boot_part", 1, 2},
{"Linksys WRT1200AC", "linksys-caiman", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900AC", "linksys-mamba", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900ACv2", "linksys-cobra", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900ACS", "linksys-shelby", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT3200ACM", "linksys-rango", "mtd5", "mtd7", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"ZyXEL NBG6817","nbg6817","mmcblk0p4","mmcblk0p7",32,nil,255,1}
}
errorMessage = ""
device_board_name = luci.util.trim(luci.sys.exec("cat /tmp/sysinfo/board_name"))
for i=1, #devices do
table_board_name = devices[i][2]:gsub('%p','')
if device_board_name and device_board_name:gsub('%p',''):match(table_board_name) then
device_name = devices[i][1]
partition_one_mtd = devices[i][3] or nil
partition_two_mtd = devices[i][4] or nil
partition_skip = devices[i][5] or nil
boot_envvar1 = devices[i][6] or nil
boot_envvar1_partition_one = tonumber(devices[i][7]) or nil
boot_envvar1_partition_two = tonumber(devices[i][8]) or nil
boot_envvar2 = devices[i][9] or nil
boot_envvar2_partition_one = devices[i][10] or nil
boot_envvar2_partition_two = devices[i][11] or nil
if partition_one_mtd and partition_skip then
partition_one_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_one_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
n, partition_one_version = string.match(partition_one_label, '(Linux)-([%d|.]+)')
end
if partition_two_mtd and partition_skip then
partition_two_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_two_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
n, partition_two_version = string.match(partition_two_label, '(Linux)-([%d|.]+)')
end
if string.find(partition_one_label, "LEDE") then partition_one_os = "LEDE" end
if string.find(partition_one_label, "OpenWrt") then partition_one_os = "OpenWrt" end
if string.find(partition_one_label, "Linksys") then partition_one_os = "Linksys" end
if string.find(partition_two_label, "LEDE") then partition_two_os = "LEDE" end
if string.find(partition_two_label, "OpenWrt") then partition_two_os = "OpenWrt" end
if string.find(partition_two_label, "Linksys") then partition_two_os = "Linksys" end
if device_name and device_name == "ZyXEL NBG6817" then
if not partition_one_os then partition_one_os = "ZyXEL" end
if not partition_two_os then partition_two_os = "ZyXEL" end
end
if not partition_one_os then partition_one_os = "Unknown" end
if not partition_two_os then partition_two_os = "Unknown" end
if partition_one_os and partition_one_version then partition_one_os = partition_one_os .. " (Linux " .. partition_one_version .. ")" end
if partition_two_os and partition_two_version then partition_two_os = partition_two_os .. " (Linux " .. partition_two_version .. ")" end
if device_name and device_name == "ZyXEL NBG6817" then
if not zyxelFlagPartition then zyxelFlagPartition = luci.util.trim(luci.sys.exec("source /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
if not zyxelFlagPartition then
errorMessage = errorMessage .. luci.i18n.translate("Unable to find Dual Boot Flag Partition." .. " ")
luci.util.perror(luci.i18n.translate("Unable to find Dual Boot Flag Partition."))
else
current_partition = tonumber(luci.sys.exec("dd if=" .. zyxelFlagPartition .. " bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 \"%d\"'"))
end
else
if nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
current_partition = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
end
end
other_partition = current_partition == boot_envvar1_partition_two and boot_envvar1_partition_one or boot_envvar1_partition_two
end
end
function index()
entry({"admin", "system", "advanced_reboot"}, template("advanced_reboot/advanced_reboot"), _("Advanced Reboot"), 90)
entry({"admin", "system", "advanced_reboot", "reboot"}, post("action_reboot"))
-- if device_name then entry({"admin", "system", "advanced_reboot", "altreboot"}, post("action_altreboot")) end
entry({"admin", "system", "advanced_reboot", "alternative_reboot"}, post("action_altreboot"))
entry({"admin", "system", "advanced_reboot", "power_off"}, post("action_poweroff"))
end
function action_reboot()
local uci = require "luci.model.uci".cursor()
luci.template.render("admin_system/applyreboot", {
title = luci.i18n.translate("Rebooting..."),
msg = luci.i18n.translate("The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
addr = luci.ip.new(uci:get("network", "lan", "ipaddr")) or "192.168.1.1"
})
luci.sys.reboot()
end
function action_altreboot()
local uci = require "luci.model.uci".cursor()
local zyxelFlagPartition, zyxelBootFlag, zyxelNewBootFlag, errorCode, curEnvSetting, newEnvSetting
errorMessage = ""
errorCode = 0
if luci.http.formvalue("cancel") then
luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
-- luci.template.render("advanced_reboot/advanced_reboot",{
-- device_name=device_name,
-- boot_envvar1_partition_one=boot_envvar1_partition_one,
-- partition_one_os=partition_one_os,
-- boot_envvar1_partition_two=boot_envvar1_partition_two,
-- partition_two_os=partition_two_os,
-- current_partition=current_partition,
-- errorMessage = luci.i18n.translate("Alternative reboot cancelled.")})
return
end
local step = tonumber(luci.http.formvalue("step") or 1)
if step == 1 then
if device_name and nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
luci.template.render("advanced_reboot/alternative_reboot",{})
else
luci.template.render("advanced_reboot/advanced_reboot",{errorMessage = luci.i18n.translate("No access to fw_printenv or fw_printenv!")})
end
elseif step == 2 then
if boot_envvar1 or boot_envvar2 then -- Linksys devices
if boot_envvar1 then
curEnvSetting = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
if not curEnvSetting then
errorMessage = errorMessage .. luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar1 .. ". "
luci.util.perror(luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar1 .. ".")
else
newEnvSetting = curEnvSetting == boot_envvar1_partition_one and boot_envvar1_partition_two or boot_envvar1_partition_one
errorCode = luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. newEnvSetting)
if errorCode ~= 0 then
errorMessage = errorMessage .. luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar1 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ". "
luci.util.perror(luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar1 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ".")
end
end
end
if boot_envvar2 then
curEnvSetting = luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar2))
if not curEnvSetting then
errorMessage = errorMessage .. luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar2 .. ". "
luci.util.perror(luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar2 .. ".")
else
newEnvSetting = curEnvSetting == boot_envvar2_partition_one and boot_envvar2_partition_two or boot_envvar2_partition_one
errorCode = luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. newEnvSetting .. "'")
if errorCode ~= 0 then
errorMessage = errorMessage .. luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar2 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ". "
luci.util.perror(luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar2 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ".")
end
end
end
else -- NetGear device
if not zyxelFlagPartition then zyxelFlagPartition = luci.util.trim(luci.sys.exec("source /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
if not zyxelFlagPartition then
errorMessage = errorMessage .. luci.i18n.translate("Unable to find Dual Boot Flag Partition." .. " ")
luci.util.perror(luci.i18n.translate("Unable to find Dual Boot Flag Partition."))
else
zyxelBootFlag = tonumber(luci.sys.exec("dd if=" .. zyxelFlagPartition .. " bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 \"%d\"'"))
zyxelNewBootFlag = zyxelBootFlag and zyxelBootFlag == 1 and "\\xff" or "\\x01"
if zyxelNewBootFlag then
errorCode = luci.sys.call("printf \"" .. zyxelNewBootFlag .. "\" >" .. zyxelFlagPartition )
if errorCode ~= 0 then
errorMessage = errorMessage .. luci.i18n.translate("Unable to set Dual Boot Flag Partition entry for partition") .. ": " .. zyxelFlagPartition .. ". "
luci.util.perror(luci.i18n.translate("Unable to set Dual Boot Flag Partition entry for partition") .. ": " .. zyxelFlagPartition .. ".")
end
end
end
end
if errorMessage == "" then
luci.template.render("admin_system/applyreboot", {
title = luci.i18n.translate("Rebooting..."),
msg = luci.i18n.translate("The system is rebooting to an alternative partition now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
addr = luci.ip.new(uci:get("network", "lan", "ipaddr")) or "192.168.1.1"
})
luci.sys.reboot()
else
luci.template.render("advanced_reboot/advanced_reboot",{
device_name=device_name,
boot_envvar1_partition_one=boot_envvar1_partition_one,
partition_one_os=partition_one_os,
boot_envvar1_partition_two=boot_envvar1_partition_two,
partition_two_os=partition_two_os,
current_partition=current_partition,
errorMessage = errorMessage})
end
end
end
function action_poweroff()
local uci = require "luci.model.uci".cursor()
if luci.http.formvalue("cancel") then
luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
return
end
local step = tonumber(luci.http.formvalue("step") or 1)
if step == 1 then
if nixio.fs.access("/sbin/poweroff") then
luci.template.render("advanced_reboot/power_off",{})
else
luci.template.render("advanced_reboot/advanced_reboot",{})
end
elseif step == 2 then
luci.template.render("admin_system/applyreboot", {
title = luci.i18n.translate("Shutting down..."),
msg = luci.i18n.translate("The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
addr = luci.ip.new(uci:get("network", "lan", "ipaddr")) or "192.168.1.1"
})
luci.sys.call("/sbin/poweroff")
end
end

View File

@ -0,0 +1,96 @@
<%#
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
Copyright 2017 Stan Grishin <stangri@melmac.net>
Licensed to the public under the Apache License 2.0.
-%>
<%+header%>
<h2 name="content"><%:Advanced Reboot%></h2>
<br />
<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%>
<p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p>
<%- end -%>
<%- if errorMessage and errorMessage ~= "" then -%>
<p class="alert-message warning"><%:ERROR: %><%=errorMessage%></p>
<%- end -%>
<%- if device_name then -%>
<fieldset class="cbi-section">
<legend><%=device_name%><%: Partitions%></legend>
<table class="cbi-section-table" id="partitions">
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell"><%:Partition%></th>
<th class="cbi-section-table-cell"><%:Status%></th>
<th class="cbi-section-table-cell"><%:Firmware/OS (Kernel)%></th>
<th class="cbi-section-table-cell"><%:Action%></th>
</tr>
<tr class="cbi-section-table-row">
<td>
<%=string.format("%X", boot_envvar1_partition_one)%>
</td>
<td>
<%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
</td>
<td>
<%=partition_one_os%>
</td>
<td>
<%- if boot_envvar1_partition_one == current_partition then -%>
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
<input type="hidden" name="token" value="<%=token%>" />
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
</form>
<%- else -%>
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
<input type="hidden" name="token" value="<%=token%>" />
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
</form>
<%- end -%>
</td>
</tr>
<tr class="cbi-section-table-row">
<td>
<%=string.format("%X", boot_envvar1_partition_two)%>
</td>
<td>
<%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
</td>
<td>
<%=partition_two_os%>
</td>
<td>
<%- if boot_envvar1_partition_two == current_partition then -%>
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
<input type="hidden" name="token" value="<%=token%>" />
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
</form>
<%- else -%>
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
<input type="hidden" name="token" value="<%=token%>" />
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
</form>
<%- end -%>
</td>
</tr>
</table>
</fieldset>
<%- else -%>
<p class="alert-message warning"><%:Warning: This system does not have two partitions!%></p>
<%- end -%>
<hr />
<%- if nixio.fs.access("/sbin/poweroff") then -%>
<form method="post" action="<%=url('admin/system/advanced_reboot/power_off')%>">
<input type="hidden" name="token" value="<%=token%>" />
<input id="poweroff-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Perform power off...%>" />
</form>
<%- else -%>
<p class="alert-message warning"><%:Warning: This system does not support powering off!%></p>
<%- end -%>
<%+footer%>

View File

@ -0,0 +1,29 @@
<%#
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
Copyright 2017 Stan Grishin <stangri@melmac.net>
Licensed to the public under the Apache License 2.0.
-%>
<%+header%>
<h2 name="content"><%:Reboot Device to an Alternative Partition%> - <%:Confirm%></h2>
<p>
<%_ WARNING: An alternative partition might have its own settings and completely different firmware.<br /><br />
As your network configuration and WiFi SSID/password on alternative partition might be different,
you might have to adjust your computer settings to be able to access your device once it reboots.<br /><br />
Please also be aware that alternative partition firmware might not provide an easy way to switch active partition
and boot back to the currently active partition.<br /><br />
Click "Proceed" below to reboot device to an alternative partition. %>
</p>
<div class="cbi-page-actions right">
<form class="inline" action="<%=REQUEST_URI%>" method="post">
<input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="step" value="2" />
<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
</form>
</div>
<%+footer%>

View File

@ -0,0 +1,25 @@
<%#
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
Copyright 2017 Stan Grishin <stangri@melmac.net>
Licensed to the public under the Apache License 2.0.
-%>
<%+header%>
<h2 name="content"><%:Power Off Device%> - <%:Confirm%></h2>
<p>
<%_ WARNING: Power off might result in a reboot on a device which doesn't support power off.<br /><br />
Click "Proceed" below to power off your device. %>
</p>
<div class="cbi-page-actions right">
<form class="inline" action="<%=REQUEST_URI%>" method="post">
<input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="step" value="2" />
<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
</form>
</div>
<%+footer%>

View File

@ -0,0 +1,163 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: advanced-reboot\n"
"POT-Creation-Date: 2017-11-30 15:20+0300\n"
"PO-Revision-Date: 2018-01-05 19: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"
msgid "Action"
msgstr "Действие"
msgid "Advanced Reboot"
msgstr "Дополнительная перезагрузка"
msgid "Alternative"
msgstr "Альтернатива"
msgid "Alternative reboot cancelled."
msgstr "Альтернативная перезагрузка отменена."
msgid "Cancel"
msgstr "Отменить"
msgid "Confirm"
msgstr "Подтвердить"
msgid "Current"
msgstr "Текущий"
msgid "ERROR:"
msgstr "ОШИБКА:"
msgid "Firmware/OS (Kernel)"
msgstr "Прошивка/ОС (Ядро)"
msgid "No access to fw_printenv or fw_printenv!"
msgstr "Нет доступа к fw_printenv или fw_printenv!"
msgid "Partition"
msgstr "Раздел"
msgid "Partitions"
msgstr "Разделы"
msgid "Perform power off..."
msgstr "Выполнить отключение..."
msgid "Power Off Device"
msgstr "Отключить питание устройства"
msgid "Proceed"
msgstr "Продолжить"
msgid "Reboot Device to an Alternative Partition"
msgstr "Перезагрузить устройство в альтернативный раздел"
msgid "Reboot to alternative partition..."
msgstr "Перезагрузить до альтернативного раздела..."
msgid "Reboot to current partition"
msgstr "Перезагрузка к текущему разделу"
msgid "Rebooting..."
msgstr "Перезагрузка..."
msgid "Shutting down..."
msgstr "Отключается..."
msgid "Status"
msgstr "Состояние"
msgid ""
"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
"few minutes before you try to reconnect. It might be necessary to renew the "
"address of your computer to reach the device again, depending on your "
"settings."
msgstr ""
"Система перезагружается сейчас.<br /> НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!<br /"
"> Подождите несколько минут, прежде чем попытаться установить соединение "
"снова. Возможно, потребуется обновить адрес компьютера для повторного "
"доступа к устройству в зависимости от ваших настроек."
msgid ""
"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
"Система перезагружается на альтернативный раздел сейчас.<br /> НЕ ОТКЛЮЧАЙТЕ "
"ПИТАНИЕ УСТРОЙСТВА!<br /> Подождите несколько минут, прежде чем попытаться "
"установить соединение снова. Возможно, потребуется обновить адрес компьютера "
"для повторного доступа к устройству в зависимости от ваших настроек."
msgid ""
"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
"Система сейчас отключается.<br /> НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!<br /> "
"Возможно, потребуется обновить адрес компьютера для повторного доступа к "
"устройству в зависимости от настроек."
msgid "Unable to find Dual Boot Flag Partition."
msgstr "Невозможно найти Dual Boot раздел."
msgid "Unable to obtain firmware environment variable"
msgstr "Невозможно получить переменную среды прошивки"
msgid "Unable to set Dual Boot Flag Partition entry for partition"
msgstr "Невозможно использовать Dual Boot раздел."
msgid "Unable to set firmware environment variable"
msgstr "Невозможно установить переменную среды прошивки"
msgid ""
"WARNING: An alternative partition might have its own settings and completely "
"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
"password on alternative partition might be different, you might have to "
"adjust your computer settings to be able to access your device once it "
"reboots.<br /><br /> Please also be aware that alternative partition "
"firmware might not provide an easy way to switch active partition and boot "
"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
"to reboot device to an alternative partition."
msgstr ""
"ВНИМАНИЕ: альтернативный раздел может иметь собственные настройки и "
"совершенно другую прошивку.<br /><br /> Поскольку ваши настройки сети и WiFi "
"SSID/пароли на альтернативных разделах могут отличаться, может потребоваться "
"изменить настройки компьютера, чтобы иметь возможность получить доступ к "
"устройству после перезагрузки .<br /><br /> Помните также, что "
"альтернативный раздел с прошивкой может не обеспечить простой способ "
"переключения активного раздела и загрузки обратно в текущий активный раздел."
"<br /><br /> Нажмите \"Продолжить\" ниже, чтобы перезагрузить устройство в "
"альтернативный раздел."
msgid ""
"WARNING: Power off might result in a reboot on a device which doesn't "
"support power off.<br /><br /> Click \"Proceed\" below to power off your "
"device."
msgstr ""
"ВНИМАНИЕ: Отключение питания может привести к перезагрузке устройства, "
"которое не поддерживает выключение питания.<br /><br /> Нажмите \"Продолжить"
"\" ниже, чтобы выключить устройство."
msgid "Warning: There are unsaved changes that will get lost on reboot!"
msgstr ""
"Внимание: Есть несохраненные изменения, которые будут потеряны при "
"перезагрузке!"
msgid "Warning: This system does not have two partitions!"
msgstr "Внимание: Эта система не имеет двух разделов!"
msgid "Warning: This system does not support powering off!"
msgstr "Внимание: Эта система не поддерживает отключение питания!"
msgid "to"
msgstr ""

View File

@ -0,0 +1,133 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Action"
msgstr "Åtgärd"
msgid "Advanced Reboot"
msgstr "Avancerad omstart"
msgid "Alternative"
msgstr "Alternativ"
msgid "Alternative reboot cancelled."
msgstr ""
msgid "Cancel"
msgstr "Avbryt"
msgid "Confirm"
msgstr "Bekräfta"
msgid "Current"
msgstr "Nuvarande"
msgid "ERROR:"
msgstr ""
msgid "Firmware/OS (Kernel)"
msgstr "Inre mjukvara/OS (Kärna)"
msgid "No access to fw_printenv or fw_printenv!"
msgstr ""
msgid "Partition"
msgstr "Partition"
msgid "Partitions"
msgstr "Partitioner"
msgid "Perform power off..."
msgstr "Utför avstängning..."
msgid "Power Off Device"
msgstr "Stäng av enhet"
msgid "Proceed"
msgstr "Fortsätt"
msgid "Reboot Device to an Alternative Partition"
msgstr "Starta om enheten till en alternativ partition"
msgid "Reboot to alternative partition..."
msgstr "Starta om till alternativ partition..."
msgid "Reboot to current partition"
msgstr "Starta om till nuvarande partition"
msgid "Rebooting..."
msgstr "Startar om..."
msgid "Shutting down..."
msgstr "Stänger av..."
msgid "Status"
msgstr "Status"
msgid ""
"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
"few minutes before you try to reconnect. It might be necessary to renew the "
"address of your computer to reach the device again, depending on your "
"settings."
msgstr ""
msgid ""
"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
msgid ""
"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende på dina "
"inställningar så kan det vara nödvändigt att förnya din dators adress för "
"att nå enheten igen."
msgid "Unable to find Dual Boot Flag Partition."
msgstr ""
msgid "Unable to obtain firmware environment variable"
msgstr ""
msgid "Unable to set Dual Boot Flag Partition entry for partition"
msgstr ""
msgid "Unable to set firmware environment variable"
msgstr ""
msgid ""
"WARNING: An alternative partition might have its own settings and completely "
"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
"password on alternative partition might be different, you might have to "
"adjust your computer settings to be able to access your device once it "
"reboots.<br /><br /> Please also be aware that alternative partition "
"firmware might not provide an easy way to switch active partition and boot "
"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
"to reboot device to an alternative partition."
msgstr ""
msgid ""
"WARNING: Power off might result in a reboot on a device which doesn't "
"support power off.<br /><br /> Click \"Proceed\" below to power off your "
"device."
msgstr ""
"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte har "
"stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att "
"stänga av din enhet."
msgid "Warning: There are unsaved changes that will get lost on reboot!"
msgstr ""
"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
msgid "Warning: This system does not have two partitions!"
msgstr "Varning: Det här systemet har inte två partitioner!"
msgid "Warning: This system does not support powering off!"
msgstr "Varning: Det här systemet har inte stöd för avstängning!"
msgid "to"
msgstr ""

View File

@ -0,0 +1,126 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Action"
msgstr ""
msgid "Advanced Reboot"
msgstr ""
msgid "Alternative"
msgstr ""
msgid "Alternative reboot cancelled."
msgstr ""
msgid "Cancel"
msgstr ""
msgid "Confirm"
msgstr ""
msgid "Current"
msgstr ""
msgid "ERROR:"
msgstr ""
msgid "Firmware/OS (Kernel)"
msgstr ""
msgid "No access to fw_printenv or fw_printenv!"
msgstr ""
msgid "Partition"
msgstr ""
msgid "Partitions"
msgstr ""
msgid "Perform power off..."
msgstr ""
msgid "Power Off Device"
msgstr ""
msgid "Proceed"
msgstr ""
msgid "Reboot Device to an Alternative Partition"
msgstr ""
msgid "Reboot to alternative partition..."
msgstr ""
msgid "Reboot to current partition"
msgstr ""
msgid "Rebooting..."
msgstr ""
msgid "Shutting down..."
msgstr ""
msgid "Status"
msgstr ""
msgid ""
"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
"few minutes before you try to reconnect. It might be necessary to renew the "
"address of your computer to reach the device again, depending on your "
"settings."
msgstr ""
msgid ""
"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
msgid ""
"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
"might be necessary to renew the address of your computer to reach the device "
"again, depending on your settings."
msgstr ""
msgid "Unable to find Dual Boot Flag Partition."
msgstr ""
msgid "Unable to obtain firmware environment variable"
msgstr ""
msgid "Unable to set Dual Boot Flag Partition entry for partition"
msgstr ""
msgid "Unable to set firmware environment variable"
msgstr ""
msgid ""
"WARNING: An alternative partition might have its own settings and completely "
"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
"password on alternative partition might be different, you might have to "
"adjust your computer settings to be able to access your device once it "
"reboots.<br /><br /> Please also be aware that alternative partition "
"firmware might not provide an easy way to switch active partition and boot "
"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
"to reboot device to an alternative partition."
msgstr ""
msgid ""
"WARNING: Power off might result in a reboot on a device which doesn't "
"support power off.<br /><br /> Click \"Proceed\" below to power off your "
"device."
msgstr ""
msgid "Warning: There are unsaved changes that will get lost on reboot!"
msgstr ""
msgid "Warning: This system does not have two partitions!"
msgstr ""
msgid "Warning: This system does not support powering off!"
msgstr ""
msgid "to"
msgstr ""

View File

@ -0,0 +1,14 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for AHCPd
LUCI_DEPENDS:=+ahcpd
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,49 @@
-- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.ahcp", package.seeall)
function index()
if not nixio.fs.access("/etc/config/ahcpd") then
return
end
entry({"admin", "network", "ahcpd"}, cbi("ahcp"), _("AHCP Server"), 90)
entry({"admin", "network", "ahcpd", "status"}, call("ahcp_status"))
end
function ahcp_status()
local nfs = require "nixio.fs"
local uci = require "luci.model.uci".cursor()
local lsd = uci:get_first("ahcpd", "ahcpd", "lease_dir") or "/var/lib/leases"
local idf = uci:get_first("ahcpd", "ahcpd", "id_file") or "/var/lib/ahcpd-unique-id"
local rv = {
uid = "00:00:00:00:00:00:00:00",
leases = { }
}
idf = nfs.readfile(idf)
if idf and #idf == 8 then
rv.uid = "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X" %{ idf:byte(1, 8) }
end
local itr = nfs.dir(lsd)
if itr then
local addr
for addr in itr do
if addr:match("^%d+%.%d+%.%d+%.%d+$") then
local s = nfs.stat(lsd .. "/" .. addr)
rv.leases[#rv.leases+1] = {
addr = addr,
age = s and (os.time() - s.mtime) or 0
}
end
end
end
table.sort(rv.leases, function(a, b) return a.age < b.age end)
luci.http.prepare_content("application/json")
luci.http.write_json(rv)
end

View File

@ -0,0 +1,110 @@
-- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
m = Map("ahcpd", translate("AHCP Server"), translate("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."))
m:section(SimpleSection).template = "ahcp_status"
s = m:section(TypedSection, "ahcpd")
s:tab("general", translate("General Setup"))
s:tab("advanced", translate("Advanced Settings"))
s.addremove = false
s.anonymous = true
mode = s:taboption("general", ListValue, "mode", translate("Operation mode"))
mode:value("server", translate("Server"))
mode:value("forwarder", translate("Forwarder"))
net = s:taboption("general", Value, "interface", translate("Served interfaces"))
net.template = "cbi/network_netlist"
net.widget = "checkbox"
net.nocreate = true
function net.cfgvalue(self, section)
return m.uci:get("ahcpd", section, "interface")
end
pfx = s:taboption("general", DynamicList, "prefix", translate("Announced prefixes"),
translate("Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"))
pfx.optional = true
pfx.datatype = "ipaddr"
pfx:depends("mode", "server")
nss = s:taboption("general", DynamicList, "name_server", translate("Announced DNS servers"),
translate("Specifies the announced IPv4 and IPv6 name servers"))
nss.optional = true
nss.datatype = "ipaddr"
nss:depends("mode", "server")
ntp = s:taboption("general", DynamicList, "ntp_server", translate("Announced NTP servers"),
translate("Specifies the announced IPv4 and IPv6 NTP servers"))
ntp.optional = true
ntp.datatype = "ipaddr"
ntp:depends("mode", "server")
mca = s:taboption("general", Value, "multicast_address", translate("Multicast address"))
mca.optional = true
mca.placeholder = "ff02::cca6:c0f9:e182:5359"
mca.datatype = "ip6addr"
port = s:taboption("general", Value, "port", translate("Port"))
port.optional = true
port.placeholder = 5359
port.datatype = "port"
fam = s:taboption("general", ListValue, "_family", translate("Protocol family"))
fam:value("", translate("IPv4 and IPv6"))
fam:value("ipv4", translate("IPv4 only"))
fam:value("ipv6", translate("IPv6 only"))
function fam.cfgvalue(self, section)
local v4 = m.uci:get_bool("ahcpd", section, "ipv4_only")
local v6 = m.uci:get_bool("ahcpd", section, "ipv6_only")
if v4 then
return "ipv4"
elseif v6 then
return "ipv6"
end
return ""
end
function fam.write(self, section, value)
if value == "ipv4" then
m.uci:set("ahcpd", section, "ipv4_only", "true")
m.uci:delete("ahcpd", section, "ipv6_only")
elseif value == "ipv6" then
m.uci:set("ahcpd", section, "ipv6_only", "true")
m.uci:delete("ahcpd", section, "ipv4_only")
end
end
function fam.remove(self, section)
m.uci:delete("ahcpd", section, "ipv4_only")
m.uci:delete("ahcpd", section, "ipv6_only")
end
ltime = s:taboption("general", Value, "lease_time", translate("Lease validity time"))
ltime.optional = true
ltime.placeholder = 3666
ltime.datatype = "uinteger"
ld = s:taboption("advanced", Value, "lease_dir", translate("Lease directory"))
ld.datatype = "directory"
ld.placeholder = "/var/lib/leases"
id = s:taboption("advanced", Value, "id_file", translate("Unique ID file"))
--id.datatype = "file"
id.placeholder = "/var/lib/ahcpd-unique-id"
log = s:taboption("advanced", Value, "log_file", translate("Log file"))
--log.datatype = "file"
log.placeholder = "/var/log/ahcpd.log"
return m

View File

@ -0,0 +1 @@
<%+ahcp_status%>

View File

@ -0,0 +1,53 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url('admin/network/ahcpd/status')%>', null,
function(x, st)
{
var tb = document.getElementById('ahcpd_status_table');
var tx = document.getElementById('ahcpd_status_text');
if (st && tb && tx)
{
/* clear all rows */
while( tb.rows.length > 1 )
tb.deleteRow(1);
for( var i = 0; i < st.leases.length; i++ )
{
var tr = tb.insertRow(-1);
tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
tr.insertCell(-1).innerHTML = st.leases[i].addr;
tr.insertCell(-1).innerHTML = String.format('%t', st.leases[i].age);
}
if( tb.rows.length == 1 )
{
var tr = tb.insertRow(-1);
tr.className = 'cbi-section-table-row';
var td = tr.insertCell(-1);
td.colSpan = 2;
td.innerHTML = '<em><br /><%:There are no active leases.%></em>';
}
if( st.uid == '00:00:00:00:00:00:00:00' )
tx.innerHTML = '<%:The AHCP Service is not running.%>';
else
tx.innerHTML = String.format('<%:The AHCP Service is running with ID %s.%>', st.uid);
}
}
);
//]]></script>
<fieldset class="cbi-section">
<legend><%:Active AHCP Leases%></legend>
<p id="ahcpd_status_text"></p>
<table class="cbi-section-table" id="ahcpd_status_table">
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell"><%:Address%></th>
<th class="cbi-section-table-cell"><%:Age%></th>
</tr>
<tr class="cbi-section-table-row">
<td colspan="5"><em><br /><%:Collecting data...%></em></td>
</tr>
</table>
</fieldset>

View File

@ -0,0 +1,117 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-06-02 21:34+0200\n"
"Last-Translator: Alex <alexhenrie24@gmail.com>\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Servidor AHCP"
# Minor misspelling corrections
#, 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 és un protocol de configuració automàtica per IPv6 i xarxes de pila "
"dual IPv6/IPv4 dissenyat per fer servir en lloc del descobriment de rutes o "
"DHCP en xarxes on es difícil o impossible configurar un servidor dins de "
"tots els dominis de difusió a la capa d'enllaç, per exemple xarxes mòbils ad-"
"hoc."
# apòstrof+acrònims http://ca.wikipedia.org/wiki/Ap%C3%B2strof#Observacions
msgid "Active AHCP Leases"
msgstr "Leases actius d'AHCP"
msgid "Address"
msgstr "Adreça"
msgid "Advanced Settings"
msgstr "Configuració avançada"
msgid "Age"
msgstr "Edat"
msgid "Announced DNS servers"
msgstr "Servidors DNS anunciats"
msgid "Announced NTP servers"
msgstr "Servidors NTP anunciats"
msgid "Announced prefixes"
msgstr "Prefixos anunciats"
msgid "Collecting data..."
msgstr "Recopilant informació..."
msgid "Forwarder"
msgstr "Retransmissor"
msgid "General Setup"
msgstr "Configuració general"
msgid "IPv4 and IPv6"
msgstr "IPv4 i IPv6"
msgid "IPv4 only"
msgstr "Només IPv4"
msgid "IPv6 only"
msgstr "Només IPv6"
msgid "Lease directory"
msgstr "Directori d'arrendament"
msgid "Lease validity time"
msgstr "Duració d'arrendament"
msgid "Log file"
msgstr "Fitxer de registre"
msgid "Multicast address"
msgstr "Adreça de difusió selectiva"
msgid "Operation mode"
msgstr "Mode d'operació"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Família de protocol"
msgid "Served interfaces"
msgstr "Interfícies servides"
msgid "Server"
msgstr "Servidor"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Especifica els servidors NTP IPv4 i IPv6 anunciats"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Especifica els servidors de noms IPv4 i IPv6 anunciats"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Especifica els prefixos de xarxa IPv4 i IPv6 anunciats en notació CIDR"
msgid "The AHCP Service is not running."
msgstr "El servidor AHCP no està funcionant."
msgid "The AHCP Service is running with ID %s."
msgstr "El servei AHCP està funcionant amb el ID %s."
msgid "There are no active leases."
msgstr "No hi ha arrendaments actius."
msgid "Unique ID file"
msgstr "Fitxer ID únic"

View File

@ -0,0 +1,114 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-04-23 23:01+0200\n"
"Last-Translator: koli <lukas.koluch@gmail.com>\n"
"Language-Team: none\n"
"Language: cs\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP Server"
#, 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 je autokonfigurační protokol pro IPv6 a dual-stack IPv6/IPv4 sítě, "
"vytvořený pro použití vedle funkcí router discovery (Vyhledávání směrovačů "
"pomocí ICMP zpráv) a DHCP na sítích kde je obtížné či nemožné nakonfigurovat "
"server v každé vrstvě broadcast domény, například mobilní ad-hoc sítě."
msgid "Active AHCP Leases"
msgstr "Aktivní AHCP zapůjčení"
msgid "Address"
msgstr "Adresa"
msgid "Advanced Settings"
msgstr "Pokročilé nastavení"
msgid "Age"
msgstr "Stáří"
msgid "Announced DNS servers"
msgstr "Oznámené DNS servery"
msgid "Announced NTP servers"
msgstr "Oznámené NTP servery"
msgid "Announced prefixes"
msgstr "Oznámené předčíslí"
msgid "Collecting data..."
msgstr "Probíhá shromažďování dat..."
msgid "Forwarder"
msgstr "Přesměrování"
msgid "General Setup"
msgstr "Obecné nastavení"
msgid "IPv4 and IPv6"
msgstr "IPv4 a IPv6"
msgid "IPv4 only"
msgstr "pouze IPv4"
msgid "IPv6 only"
msgstr "Pouze IPv6"
msgid "Lease directory"
msgstr "Zapůjčené adresáře"
msgid "Lease validity time"
msgstr "Doba platnosti zapujčení"
msgid "Log file"
msgstr "Soubor protokolu"
msgid "Multicast address"
msgstr "Vícesměrové adresy"
msgid "Operation mode"
msgstr "Pracovní režim"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Rodina protokolů"
msgid "Served interfaces"
msgstr "Obsluhované rozhraní"
msgid "Server"
msgstr "Servr"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Specifikuje ohlášené IPv4 a IPv6 NTP servery"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Specifikuje ohlášené IPv4 a IPv6 názvové servery"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Specifikuje ohlášené IPv4 a IPv6 sítě předpony v CIDR notaci"
msgid "The AHCP Service is not running."
msgstr "Služba AHCP neběží"
msgid "The AHCP Service is running with ID %s."
msgstr "Služba AHCP je spuštěna s ID %s."
msgid "There are no active leases."
msgstr "Neexistují žádná aktivní pronajmutí."
msgid "Unique ID file"
msgstr "Jedinečný ID soubor"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-01-30 18:21+0200\n"
"Last-Translator: DAC324 <gerd_roethig@web.de>\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP Server"
#, 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 ist ein Autokonfigurationsprotokoll für IPv6- und IPv4/IPv6 Dualstack-"
"Netzwerke. Es ist darauf ausgelegt anstelle von Router Advertisements und "
"DHCP-Servern in Ad-Hoc Netzwerken eingesetzt zu werden."
msgid "Active AHCP Leases"
msgstr "Aktive AHCP-Leases"
msgid "Address"
msgstr "Adresse"
msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen"
msgid "Age"
msgstr "Alter"
msgid "Announced DNS servers"
msgstr "Angekündigte DNS-Server"
msgid "Announced NTP servers"
msgstr "Angekündigte NTP-Server"
msgid "Announced prefixes"
msgstr "Angekündigte Prefixe"
msgid "Collecting data..."
msgstr "Sammle Daten..."
msgid "Forwarder"
msgstr "Forwarder"
msgid "General Setup"
msgstr "Allgemeine Einstellungen"
msgid "IPv4 and IPv6"
msgstr "IPv4 und IPv6"
msgid "IPv4 only"
msgstr "nur IPv4"
msgid "IPv6 only"
msgstr "nur IPv6"
msgid "Lease directory"
msgstr "Lease-Verzeichnis"
msgid "Lease validity time"
msgstr "Lease-Gültigkeitsdauer"
msgid "Log file"
msgstr "Protokolldatei"
msgid "Multicast address"
msgstr "Mutlicast-Adresse"
msgid "Operation mode"
msgstr "Betriebsmodus"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protokollfamilie"
msgid "Served interfaces"
msgstr "Verwendete Schnittstellen"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-NTP-Server"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-DNS-Server"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Konfiguriert die bekannt gegebenen IPv4- und IPv6-Netzwerkprefixe. Angabe in "
"CIDR-Notation."
msgid "The AHCP Service is not running."
msgstr "Der AHCP-Dienst läuft nicht."
msgid "The AHCP Service is running with ID %s."
msgstr "Der AHCP-Dienst läuft mit ID %s."
msgid "There are no active leases."
msgstr "Es gibt keine aktiven Leases."
msgid "Unique ID file"
msgstr "UID-Datei"

View File

@ -0,0 +1,114 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-03-18 16:25+0200\n"
"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n"
"Language-Team: none\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
msgstr "Εξυπηρετητής AHCP"
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 ""
msgid "Active AHCP Leases"
msgstr "Ενεργά AHCP Leases"
msgid "Address"
msgstr "Διεύθυνση"
msgid "Advanced Settings"
msgstr ""
msgid "Age"
msgstr ""
msgid "Announced DNS servers"
msgstr ""
msgid "Announced NTP servers"
msgstr ""
msgid "Announced prefixes"
msgstr ""
msgid "Collecting data..."
msgstr "Συλλέγονται δεδομένα..."
msgid "Forwarder"
msgstr "Προωθητής"
msgid "General Setup"
msgstr "Γενικές ρυθμίσεις"
msgid "IPv4 and IPv6"
msgstr "IPv4 και IPv6"
msgid "IPv4 only"
msgstr "μόνο IPv4"
msgid "IPv6 only"
msgstr "μόνο IPv6"
#, fuzzy
msgid "Lease directory"
msgstr "Κατάλογος leases"
msgid "Lease validity time"
msgstr "Χρόνος εγκυρότητας lease"
msgid "Log file"
msgstr "Αρχείο καταγραφής"
msgid "Multicast address"
msgstr "Διεύθυνση multicast"
msgid "Operation mode"
msgstr ""
msgid "Port"
msgstr "Θύρα"
msgid "Protocol family"
msgstr "Οικογένεια πρωτοκόλλου"
msgid "Served interfaces"
msgstr "Εξυπηρετούμενες διεπαφές"
msgid "Server"
msgstr "Εξυπηρετητής"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Καθορίζει τους εξυπηρετητές NTP σε IPv4 και IPv6 που ανακοινώνονται"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Καθορίζει τους εξυπηρετητές DNS σε IPv4 και IPv6 που ανακοινώνονται"
#, fuzzy
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Καθορίζει τα προθέματα διευθύνσεων IPv4 και IPv6 που ανακοινώνονται, σε "
"μορφή CIDR"
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
#, fuzzy
msgid "There are no active leases."
msgstr "Δεν υπάρχουν ενεργά leases"
msgid "Unique ID file"
msgstr "Αρχείο μοναδικού αναγνωριστικού"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-04-15 11:31+0200\n"
"Last-Translator: madanadam <madanadam@gmail.com>\n"
"Language-Team: none\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
msgstr "AHCP Server"
#, 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 is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
"networks designed to be used in place of router discovery and 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."
msgid "Active AHCP Leases"
msgstr "Active AHCP Leases"
msgid "Address"
msgstr "Address"
msgid "Advanced Settings"
msgstr "Advanced Settings"
msgid "Age"
msgstr "Age"
msgid "Announced DNS servers"
msgstr "Announced DNS servers"
msgid "Announced NTP servers"
msgstr "Announced NTP servers"
msgid "Announced prefixes"
msgstr "Announced prefixes"
msgid "Collecting data..."
msgstr "Collecting data..."
msgid "Forwarder"
msgstr "Forwarder"
msgid "General Setup"
msgstr "General Setup"
msgid "IPv4 and IPv6"
msgstr "IPv4 and IPv6"
msgid "IPv4 only"
msgstr "IPv4 only"
msgid "IPv6 only"
msgstr "IPv6 only"
msgid "Lease directory"
msgstr "Lease directory"
msgid "Lease validity time"
msgstr "Lease validity time"
msgid "Log file"
msgstr "Log file"
msgid "Multicast address"
msgstr "Multicast address"
msgid "Operation mode"
msgstr "Operation mode"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protocol family"
msgid "Served interfaces"
msgstr "Served interfaces"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Specifies the announced IPv4 and IPv6 NTP servers"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Specifies the announced IPv4 and IPv6 name servers"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgid "The AHCP Service is not running."
msgstr "The AHCP Service is not running."
msgid "The AHCP Service is running with ID %s."
msgstr "The AHCP Service is running with ID %s."
msgid "There are no active leases."
msgstr "There are no active leases."
msgid "Unique ID file"
msgstr "Unique ID file"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-09-14 19:30+0200\n"
"Last-Translator: José Vicente <josevteg@gmail.com>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Servidor 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 es un protocolo de autoconfiguración para redes con IPv6 o duales IPv6/"
"IPv4 diseñado para ser usado en lugar de router discovery o DHCP en redes en "
"las que es difícil o imposible configurar un servidor en cada capa de enlace "
"del dominio de propagación como las redes móviles ad-hoc."
# "Lease" en el sentido usado en DHCP no tiene una traducción clara en español y se puede usar la misma palabra en que en inglés.
msgid "Active AHCP Leases"
msgstr "Cesiones activas AHCP"
msgid "Address"
msgstr "Dirección"
msgid "Advanced Settings"
msgstr "Configuración avanzada"
msgid "Age"
msgstr "Vida"
msgid "Announced DNS servers"
msgstr "Servidores DNS declarados"
msgid "Announced NTP servers"
msgstr "Servidores NTP declarados"
msgid "Announced prefixes"
msgstr "Prefijos declarados"
msgid "Collecting data..."
msgstr "Obteniendo datos..."
msgid "Forwarder"
msgstr "Transmisor"
msgid "General Setup"
msgstr "Configuración general"
msgid "IPv4 and IPv6"
msgstr "IPv4 e IPv6"
msgid "IPv4 only"
msgstr "Sólo IPv4"
msgid "IPv6 only"
msgstr "Sólo IPv6"
msgid "Lease directory"
msgstr "Directorio de cesiones"
msgid "Lease validity time"
msgstr "Tiempo de validez de la cesión"
msgid "Log file"
msgstr "Fichero de registro"
msgid "Multicast address"
msgstr "Dirección multicast"
msgid "Operation mode"
msgstr "Modo de funcionamiento"
msgid "Port"
msgstr "Puerto"
msgid "Protocol family"
msgstr "Familia de protocolos"
msgid "Served interfaces"
msgstr "Interfaces configurados"
msgid "Server"
msgstr "Servidor"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Especifica los servidores NTP IPv4 e IPv6 declarados"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Especifica los servidores de nombres IPv4 e IPv6 declarados"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Especifica los prefijos de red IPv4 e IPv6 declarados en notación CIDR"
msgid "The AHCP Service is not running."
msgstr "El Servicio AHCP no está funcionando."
msgid "The AHCP Service is running with ID %s."
msgstr "El Servicio AHCP está funcionando con el ID %s."
msgid "There are no active leases."
msgstr "No hay cesiones activas."
msgid "Unique ID file"
msgstr "ID único de fichero"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-11-06 13:06+0200\n"
"Last-Translator: hogsim <hogsim@gmail.com>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Serveur 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 est un protocole d'auto-configuration pour les réseaux IPv6 et double-"
"pile IPv6/IPv4, destiné à remplacer la recherche de routeur et le service "
"DHCP sur des réseaux où il est difficile, voire impossible de configurer un "
"tel serveur pour tous les domaines de diffusion au niveau lien, par exemple "
"pour des réseaux ad-hoc mobiles."
msgid "Active AHCP Leases"
msgstr "Baux AHCP actifs"
msgid "Address"
msgstr "Adresse"
msgid "Advanced Settings"
msgstr "Paramètres avancés"
msgid "Age"
msgstr "Age"
msgid "Announced DNS servers"
msgstr "Serveurs DNS publiés"
msgid "Announced NTP servers"
msgstr "Serveurs NTP publiés"
msgid "Announced prefixes"
msgstr "Préfixes publiés"
msgid "Collecting data..."
msgstr "Récupération des données…"
msgid "Forwarder"
msgstr "Transmetteur"
msgid "General Setup"
msgstr "Paramètres principaux"
msgid "IPv4 and IPv6"
msgstr "IPv4 et IPv6"
msgid "IPv4 only"
msgstr "IPv4 seulement"
msgid "IPv6 only"
msgstr "IPv6 seulement"
msgid "Lease directory"
msgstr "Répertoire d'un bail"
msgid "Lease validity time"
msgstr "Date de validité d'un bail"
msgid "Log file"
msgstr "Fichier journal"
msgid "Multicast address"
msgstr "Adresse multidiffusion"
msgid "Operation mode"
msgstr "Mode de fonctionnement"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Famille de protocole"
msgid "Served interfaces"
msgstr "Interfaces gérés"
msgid "Server"
msgstr "Serveur"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Décrit les serveurs NTP IPv4 et IPv6 publiés"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Décrit les serveurs de noms IPv4 et IPv6 publiés"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Décrit les préfixes réseaux IPv4 et IPv6 publiés en notation CIDR"
msgid "The AHCP Service is not running."
msgstr "Le service AHCP n'est pas en fonctionnement."
msgid "The AHCP Service is running with ID %s."
msgstr "Le service AHCP est en fonctionnement avec l'ID s."
msgid "There are no active leases."
msgstr "Il n'y a aucun bail actif."
msgid "Unique ID file"
msgstr "Fichier de l'ID unique"

View File

@ -0,0 +1,118 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-09-10 03:44+0200\n"
"Last-Translator: Snoof <sagim9@gmail.com>\n"
"Language-Team: none\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
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 ו- dual-stack IPv6/IPv4, אשר "
"עוצב לשימוש כתחליף לגילוי נתבים ול- DHCP ברשתות שבהן קשה או בלתי אפשרי "
"להגדיר שרת בתוך כל שם מתחם לשידור שכבת קישור, לדוגמה רשתות אד-הוק ניידות."
#, fuzzy
msgid "Active AHCP Leases"
msgstr "החכרות AHCP קיימות"
msgid "Address"
msgstr "כתובת"
msgid "Advanced Settings"
msgstr "הגדרות מתקדמות"
msgid "Age"
msgstr "גיל"
msgid "Announced DNS servers"
msgstr "שרתי DNS מוכרזים"
msgid "Announced NTP servers"
msgstr "שרתי NTP מוכרזים"
msgid "Announced prefixes"
msgstr "קידומות מוכרזות"
msgid "Collecting data..."
msgstr "אוסף נתונים..."
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr "התקנה כללית"
msgid "IPv4 and IPv6"
msgstr "IPv4 ו- IPv6"
msgid "IPv4 only"
msgstr "IPv4 בלבד"
msgid "IPv6 only"
msgstr "IPv6 בלבד"
#, fuzzy
msgid "Lease directory"
msgstr "ספריית החכרות"
# תו
msgid "Lease validity time"
msgstr "תוקף ההקצאה"
msgid "Log file"
msgstr "קובץ רישום"
msgid "Multicast address"
msgstr "כתובת Multicast"
# אפשר גם מצב פעולה
msgid "Operation mode"
msgstr "מצב הפעלה"
msgid "Port"
msgstr "פורט"
msgid "Protocol family"
msgstr "משפחת פרוטוקולים"
msgid "Served interfaces"
msgstr "סיגמנטים מופעלים"
msgid "Server"
msgstr "שרת"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "שרתי NTP ברשתות IPV4 IPV6"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "שרתי DNS ברשתות IPV4 IPV6"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "קידומת שרתים (CIDR)"
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
msgid "There are no active leases."
msgstr "אין הקצאות פעילות."
msgid "Unique ID file"
msgstr "קובץ מזהה יחודי"

View File

@ -0,0 +1,116 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-03-31 15:46+0200\n"
"Last-Translator: juhosg <juhosg@openwrt.org>\n"
"Language-Team: none\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
msgstr "AHCP kiszolgáló"
#, 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 ""
"Az AHCP egy olyan automatikus konfigurációs protokoll IPv6 és kettős IPv6/"
"IPv4 hálózatokhoz, mely a DHCP és a router dicovery protokoll helyett "
"használható olyan hálózatokok ahol nehéz vagy lehetetlen beállítani külön "
"kiszolgálót minden kapcsolati réteg tartományon belül, mint például a mobil "
"eseti hálózatok."
msgid "Active AHCP Leases"
msgstr "Aktív AHCP bérletek"
msgid "Address"
msgstr "Cím"
msgid "Advanced Settings"
msgstr "Haladó beállítások"
msgid "Age"
msgstr "Kor"
msgid "Announced DNS servers"
msgstr "Bejelentett névkiszolgálók"
msgid "Announced NTP servers"
msgstr "Bejelentett NTP kiszolgálók"
msgid "Announced prefixes"
msgstr "Bejelentett előtagok"
msgid "Collecting data..."
msgstr "Adatok összegyűjtése..."
msgid "Forwarder"
msgstr "Továbbító"
msgid "General Setup"
msgstr "Általános beállítások"
msgid "IPv4 and IPv6"
msgstr "IPv4 és IPv6"
msgid "IPv4 only"
msgstr "csak IPv4"
msgid "IPv6 only"
msgstr "csak IPv6"
msgid "Lease directory"
msgstr "Bérlet könytár"
msgid "Lease validity time"
msgstr "Bérlet érvényességi ideje"
msgid "Log file"
msgstr "Napló fájl"
msgid "Multicast address"
msgstr "Multicast cím"
msgid "Operation mode"
msgstr "Működési mód"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protokoll család"
msgid "Served interfaces"
msgstr "Kiszolgált interfészek"
msgid "Server"
msgstr "Kiszolgáló"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "A bejelentett IPv4 és IPv6 NTP kiszolgálók részletezése"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "A bejelentett IPv4 és IPv6 névkiszolgálók részletezése"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"A bejelentett IPv4 és IPv6 hálózati előtagok részletezése CIDR jelölésben"
msgid "The AHCP Service is not running."
msgstr "Az AHCP szolgáltatás nem fut"
msgid "The AHCP Service is running with ID %s."
msgstr "Az AHCP szolgáltatás fut, azonosítója:%s."
msgid "There are no active leases."
msgstr "Nincsenek aktív bérletek."
msgid "Unique ID file"
msgstr "Egyedi azonosító fájl"

View File

@ -0,0 +1,114 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-02-03 12:53+0200\n"
"Last-Translator: Francesco <3gasas@gmail.com>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Server 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 è un protocollo di configurazione automatica per reti IPv6 e dual-stack "
"IPv6/IPv4 progettato per essere usato al posto del router discovery e DHCP "
"su reti dove è difficile o impossibile configurare un server all'interno di "
"ogni dominio di broadcast, per esempio reti ad-hoc mobili."
msgid "Active AHCP Leases"
msgstr "Lease AHCP Attivi"
msgid "Address"
msgstr "Indirizzo"
msgid "Advanced Settings"
msgstr "Impostazioni Avanzate"
msgid "Age"
msgstr "Età"
msgid "Announced DNS servers"
msgstr "Server DNS indicati"
msgid "Announced NTP servers"
msgstr "Server NTP indicati"
msgid "Announced prefixes"
msgstr "Prefissi indicati"
msgid "Collecting data..."
msgstr "Raccolta dei dati..."
msgid "Forwarder"
msgstr "Mittente"
msgid "General Setup"
msgstr "Setup Generale"
msgid "IPv4 and IPv6"
msgstr "IPv4 e IPv6"
msgid "IPv4 only"
msgstr "Solo IPv4"
msgid "IPv6 only"
msgstr "Solo IPv6"
msgid "Lease directory"
msgstr "Directory di Lease"
msgid "Lease validity time"
msgstr "Tempo di validità del Lease"
msgid "Log file"
msgstr "File di log"
msgid "Multicast address"
msgstr "Indirizzo Multicast"
msgid "Operation mode"
msgstr "Modalità di funzionamento"
msgid "Port"
msgstr "Porta"
msgid "Protocol family"
msgstr "Protocollo famiglia"
msgid "Served interfaces"
msgstr "Interfacce servite"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Specifica i server NTP IPv4 e IPv6 annunciati"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Specifica il server dei nomi IPv4 e IPv6"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Specifica i prefissi delle reti IPv4 e IPv6 in notazione CIDR"
msgid "The AHCP Service is not running."
msgstr "Il servizio AHCP non è in esecuzione."
msgid "The AHCP Service is running with ID %s."
msgstr "Il servizio AHCP è in esecuzione con ID %s."
msgid "There are no active leases."
msgstr "Non ci sono leases attivi."
msgid "Unique ID file"
msgstr "File degli Unique ID"

View File

@ -0,0 +1,117 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-04-19 07:54+0200\n"
"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
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はモバイル・アドホックネットワークのような、リンク層のドメイ"
"ンブロードキャスト毎に設定を行うことが困難なネットワークでのDHCP機能としても"
"使用することができます。"
msgid "Active AHCP Leases"
msgstr "有効なAHCPリース"
msgid "Address"
msgstr "アドレス"
msgid "Advanced Settings"
msgstr "詳細設定"
msgid "Age"
msgstr "Age"
msgid "Announced DNS servers"
msgstr "通知するDNSサーバー"
msgid "Announced NTP servers"
msgstr "通知するNTPサーバー"
msgid "Announced prefixes"
msgstr "通知するプレフィクス"
msgid "Collecting data..."
msgstr "データ収集中です..."
msgid "Forwarder"
msgstr "転送"
msgid "General Setup"
msgstr "一般設定"
msgid "IPv4 and IPv6"
msgstr "IPv4及びIPv6"
msgid "IPv4 only"
msgstr "IPv4のみ"
msgid "IPv6 only"
msgstr "IPv6のみ"
msgid "Lease directory"
msgstr "リースファイル・ディレクトリ"
msgid "Lease validity time"
msgstr "リース有効時間"
msgid "Log file"
msgstr "ログファイル"
msgid "Multicast address"
msgstr "マルチキャストアドレス"
msgid "Operation mode"
msgstr "動作モード"
msgid "Port"
msgstr "ポート"
msgid "Protocol family"
msgstr "プロトコルファミリ"
msgid "Served interfaces"
msgstr "対象インターフェース"
msgid "Server"
msgstr "サーバー"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "通知するNTPサーバーのIPv4及びIPv6アドレスを設定します"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "通知するDNSサーバーのIPv4及びIPv6アドレスを設定します"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"通知するIPv4及びIPv6アドレスのネットワーク・プレフィクスをCIDR形式で設定しま"
"す"
msgid "The AHCP Service is not running."
msgstr "AHCP サービスは稼働していません。"
msgid "The AHCP Service is running with ID %s."
msgstr "AHCP サービスは稼働中です。(ID %s)"
msgid "There are no active leases."
msgstr "有効なリースはありません。"
msgid "Unique ID file"
msgstr "ユニークIDファイル"

View File

@ -0,0 +1,105 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "AHCP Server"
msgstr ""
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 ""
msgid "Active AHCP Leases"
msgstr ""
msgid "Address"
msgstr ""
msgid "Advanced Settings"
msgstr ""
msgid "Age"
msgstr ""
msgid "Announced DNS servers"
msgstr ""
msgid "Announced NTP servers"
msgstr ""
msgid "Announced prefixes"
msgstr ""
msgid "Collecting data..."
msgstr ""
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr ""
msgid "IPv4 and IPv6"
msgstr ""
msgid "IPv4 only"
msgstr ""
msgid "IPv6 only"
msgstr ""
msgid "Lease directory"
msgstr ""
msgid "Lease validity time"
msgstr ""
msgid "Log file"
msgstr ""
msgid "Multicast address"
msgstr ""
msgid "Operation mode"
msgstr ""
msgid "Port"
msgstr ""
msgid "Protocol family"
msgstr ""
msgid "Served interfaces"
msgstr ""
msgid "Server"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
msgid "There are no active leases."
msgstr ""
msgid "Unique ID file"
msgstr ""

View File

@ -0,0 +1,117 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2011-06-14 20:11+0200\n"
"Last-Translator: protx <lars.hardy@gmail.com>\n"
"Language-Team: none\n"
"Language: no\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
msgstr "AHCP Server"
#, 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 er en autokonfigurasjon protokoll for IPv6, og dual-stack IPv6/IPv4 "
"nettverk. Det er laget for bruk der DHCP og Ruter oppdagelse er problematisk "
"eller umulig å bruke for hvert link-lags broadcast domene, f.eks. mobile ad-"
"hoc nettverk."
msgid "Active AHCP Leases"
msgstr "Aktive AHCP Leier"
msgid "Address"
msgstr "Adresse"
msgid "Advanced Settings"
msgstr "Avanserte Innstillinger"
msgid "Age"
msgstr "Alder"
msgid "Announced DNS servers"
msgstr "Annonserte DNS servere"
msgid "Announced NTP servers"
msgstr "Annonserte NTP servere"
msgid "Announced prefixes"
msgstr "Annonserte prefikser"
msgid "Collecting data..."
msgstr "Henter data..."
#, fuzzy
msgid "Forwarder"
msgstr "Sender"
msgid "General Setup"
msgstr "Generelt Oppsett"
msgid "IPv4 and IPv6"
msgstr "IPv4 og IPv6"
msgid "IPv4 only"
msgstr "Kun IPv4"
msgid "IPv6 only"
msgstr "Kun IPv6"
#, fuzzy
msgid "Lease directory"
msgstr "Leie katalog"
msgid "Lease validity time"
msgstr "Gyldig leietid"
msgid "Log file"
msgstr "Logg fil"
msgid "Multicast address"
msgstr "Multicast adresse"
msgid "Operation mode"
msgstr "Driftsmodus"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protokoll familie"
#, fuzzy
msgid "Served interfaces"
msgstr "Utdelte grensesnitt"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Angir annonserte IPv4 og IPv6 NTP-servere"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Angir annonserte IPv4 og IPv6 navnetjenere"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Angir annonserte IPv4 og IPv6 nettverk prefikser i CIDR-notasjon"
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
msgid "There are no active leases."
msgstr "Det er ingen aktive leieavtaler."
msgid "Unique ID file"
msgstr "Unik ID fil"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-04-14 16:40+0200\n"
"Last-Translator: Tomecki <przykryweczka@gmail.com>\n"
"Language-Team: none\n"
"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.4\n"
msgid "AHCP Server"
msgstr "Serwer 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 to protokół automatycznej konfiguracji sieci IPv6 i IPv6/IPv4 "
"przeznaczone do stosowania zamiast DHCP w sieciach, w których jest trudne "
"lub wręcz niemożliwe, aby skonfigurować serwer w każdej warstwie łącza "
"domeny rozgłoszeniowej, na przykład w mobilnych sieciach ad-hoc."
msgid "Active AHCP Leases"
msgstr "Aktywne dzierżawy AHCP"
msgid "Address"
msgstr "Adres"
msgid "Advanced Settings"
msgstr "Ustawienia zaawansowane"
msgid "Age"
msgstr "Wiek"
msgid "Announced DNS servers"
msgstr "Rozgłaszane serwery DNS"
msgid "Announced NTP servers"
msgstr "Rozgłaszane serwery NTP"
msgid "Announced prefixes"
msgstr "Rozgłaszane prefiksy"
msgid "Collecting data..."
msgstr "Zbieranie informacji..."
msgid "Forwarder"
msgstr "Przekierowanie"
msgid "General Setup"
msgstr "Ustawienia podstawowe"
msgid "IPv4 and IPv6"
msgstr "IPv4 oraz IPv6"
msgid "IPv4 only"
msgstr "Tylko IPv4"
msgid "IPv6 only"
msgstr "Tylko IPv6"
msgid "Lease directory"
msgstr "Katalog dzierżaw"
msgid "Lease validity time"
msgstr "Czas dzierżawy"
msgid "Log file"
msgstr "Plik dziennika"
msgid "Multicast address"
msgstr "Adres Multicast"
msgid "Operation mode"
msgstr "Tryb pracy"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Rodzina protokołów"
msgid "Served interfaces"
msgstr "Udostępniane interfejsy"
msgid "Server"
msgstr "Serwer"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Określa rozgłaszane adresy IPv4/6 serwerów NTP"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Określa rozgłaszane adresy IPv4/6 serwerów nazw"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Określa rozgłaszane prefiksy sieciowe w notacji CIDR"
msgid "The AHCP Service is not running."
msgstr "Usługa AHCP nie jest uruchomiona."
msgid "The AHCP Service is running with ID %s."
msgstr "Usługa AHCP jest uruchomiona z ID %s."
msgid "There are no active leases."
msgstr "Nie ma aktywnych dzierżaw."
msgid "Unique ID file"
msgstr "Unikalny plik ID"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"PO-Revision-Date: 2017-02-17 17:07-0200\n"
"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.8.11\n"
"POT-Creation-Date: \n"
msgid "AHCP Server"
msgstr "Servidor AHCP"
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 é um protocolo de autoconfiguração para redes IPv6 ou IPv6/IPv4 "
"projetado para ser usado no lugar da \"descoberta de roteador\" ou DHCP em "
"redes onde é difícil ou impossível configurar um servidor em cada camada de "
"enlace de domínio de broadcast, como exemplo as redes móvel ad-hoc."
msgid "Active AHCP Leases"
msgstr "Alocações AHCP Ativas"
msgid "Address"
msgstr "Endereço"
msgid "Advanced Settings"
msgstr "Configurações Avançadas"
msgid "Age"
msgstr "Tempo de vida"
msgid "Announced DNS servers"
msgstr "Servidores DNS anunciados"
msgid "Announced NTP servers"
msgstr "Servidores NTP anunciados"
msgid "Announced prefixes"
msgstr "Prefixos anunciados"
msgid "Collecting data..."
msgstr "Coletando dados..."
msgid "Forwarder"
msgstr "Forwarder"
msgid "General Setup"
msgstr "Configurações Gerais"
msgid "IPv4 and IPv6"
msgstr "IPv4 e IPv6"
msgid "IPv4 only"
msgstr "Apenas IPv4"
msgid "IPv6 only"
msgstr "Apenas IPv6"
msgid "Lease directory"
msgstr "Diretório de atribuições"
msgid "Lease validity time"
msgstr "Tempo de validade da atribuição"
msgid "Log file"
msgstr "Arquivo de registro"
msgid "Multicast address"
msgstr "Endereço multicast"
msgid "Operation mode"
msgstr "Modo de operação"
msgid "Port"
msgstr "Porta"
msgid "Protocol family"
msgstr "Família de protocolos"
msgid "Served interfaces"
msgstr "Interfaces configuradas"
msgid "Server"
msgstr "Servidor"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Especifica os servidores NTP IPv4 e IPv6 anunciados"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Especifica os servidores de nomes IPv4 e IPv6 anunciados"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Especifica os prefixos de rede IPv4 e IPv6, em notação CIDR, anunciados"
msgid "The AHCP Service is not running."
msgstr "O serviço AHCP está parado"
msgid "The AHCP Service is running with ID %s."
msgstr "O serviço AHCP esta executando com o ID %s."
msgid "There are no active leases."
msgstr "Não existe alocações ativas."
msgid "Unique ID file"
msgstr "Arquivo de identificador único"

View File

@ -0,0 +1,116 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-06-02 21:12+0200\n"
"Last-Translator: joao.f.vieira <joao.f.vieira@gmail.com>\n"
"Language-Team: none\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Servidor 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 ""
"O AHCP é um protocolo de auto-configuração para redes IPv6 e IPv6/IPv4 dual-"
"stack foi desenhado para ser usado no lugar do router discovery e DHCP nas "
"redes onde é difícil ou impossível configurar o servidor dentro de cada "
"camada de ligação no dominio de broadcast, por exemplo, redes ad-hoc móveis."
msgid "Active AHCP Leases"
msgstr "Concessões AHCP Ativas"
msgid "Address"
msgstr "Endereço"
msgid "Advanced Settings"
msgstr "Definições Avançadas"
msgid "Age"
msgstr "Idade"
msgid "Announced DNS servers"
msgstr "Servidores DNS anunciados"
msgid "Announced NTP servers"
msgstr "Servidores NTP anunciados"
msgid "Announced prefixes"
msgstr "Prefixos anunciados"
msgid "Collecting data..."
msgstr "A obter dados..."
msgid "Forwarder"
msgstr "Encaminhador"
msgid "General Setup"
msgstr "Configuração Geral"
msgid "IPv4 and IPv6"
msgstr "IPv4 e IPv6"
msgid "IPv4 only"
msgstr "Só IPv4"
msgid "IPv6 only"
msgstr "Só IPv6"
msgid "Lease directory"
msgstr "Directório de concessões"
msgid "Lease validity time"
msgstr "Prazo de validade das concessões"
msgid "Log file"
msgstr "Ficheiro log"
msgid "Multicast address"
msgstr "Endereço de multicast"
msgid "Operation mode"
msgstr "Modo de operação"
msgid "Port"
msgstr "Porta"
msgid "Protocol family"
msgstr "Família do protocolo"
msgid "Served interfaces"
msgstr "Interfaces servidas"
msgid "Server"
msgstr "Servidor"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Especifica os servidores NTP anunciados em IPv4 e IPv6"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Especifica os servidores de nomes anunciados em IPv4 e IPv6"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Especifica os prefixos de rede na notação CIDR a serem anunciados em IPv4 e "
"IPv6"
msgid "The AHCP Service is not running."
msgstr "O serviço AHCP não está a correr."
msgid "The AHCP Service is running with ID %s."
msgstr "O serviço AHCP está a correr com o ID %s"
msgid "There are no active leases."
msgstr "Não existem concessões activas."
msgid "Unique ID file"
msgstr "Ficheiro de ID único"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-06-28 19:14+0200\n"
"Last-Translator: xxvirusxx <condor20_05@yahoo.it>\n"
"Language-Team: none\n"
"Language: ro\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==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2);;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "Server 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 este un protocol de autoconfigurare pentru IPv6 si IPv4 menit sa "
"inlocuie \"router discovery\" si DHCP in retele unde este dificil de "
"configurat un server pentru fiecare domeniu de broadcast pe fiecare "
"legatura, de exemplu pentru retele mobile ad-hoc."
msgid "Active AHCP Leases"
msgstr "Conexiuni active AHCP"
msgid "Address"
msgstr "Adresă"
msgid "Advanced Settings"
msgstr "Setări avansate"
msgid "Age"
msgstr "Vârstă"
msgid "Announced DNS servers"
msgstr "Servere DNS anuntate"
msgid "Announced NTP servers"
msgstr "Servere NTP anuntate"
msgid "Announced prefixes"
msgstr "Prefixe anuntate"
msgid "Collecting data..."
msgstr "Colectare date.."
msgid "Forwarder"
msgstr "Forwarder"
msgid "General Setup"
msgstr "Configurare generala"
msgid "IPv4 and IPv6"
msgstr "IPv4 si IPv6"
msgid "IPv4 only"
msgstr "Doar IPv4 "
msgid "IPv6 only"
msgstr "Doar IPv6 "
msgid "Lease directory"
msgstr "Director de conexiuni"
msgid "Lease validity time"
msgstr "Timpul pentru conexiuni valide"
msgid "Log file"
msgstr "Fisier log"
msgid "Multicast address"
msgstr "Adresa multicast"
msgid "Operation mode"
msgstr "Modul de operare"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Familia de protocol"
msgid "Served interfaces"
msgstr "Interfetele servite"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Specifica serverele de NTP IPv4 si IPv6 anuntate"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Specifica serverele de DNS IPv4 si IPv6 anuntate"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Specifica prefixele IPv4 si IPv6 anuntate in format CIDR"
msgid "The AHCP Service is not running."
msgstr "Serviciul AHCP nu ruleaza"
msgid "The AHCP Service is running with ID %s."
msgstr "Serviciul AHCP nu ruleaza cu ID %s."
msgid "There are no active leases."
msgstr "Nu exista conexiuni active."
msgid "Unique ID file"
msgstr "ID de fisier unic"

View File

@ -0,0 +1,119 @@
msgid ""
msgstr ""
"Project-Id-Version: LuCI: ahcp\n"
"POT-Creation-Date: 2013-09-05 15:29+0200\n"
"PO-Revision-Date: 2018-01-24 14:59+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: Poedit 1.8.7.1\n"
"X-Poedit-SourceCharset: UTF-8\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
msgid "AHCP Server"
msgstr "AHCP сервер"
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, "
"разработанный для использования вместо DHCP и протоколов обнаружения "
"маршрутизаторов в сетях, где сложно или невозможно настроить сервер внутри "
"каждой широковещательной зоны канального уровня, например в мобильных ad-hoc "
"сетях."
msgid "Active AHCP Leases"
msgstr "Активные арендованные AHCP-адреса"
msgid "Address"
msgstr "Адрес"
msgid "Advanced Settings"
msgstr "Дополнительные настройки"
msgid "Age"
msgstr "Возраст"
msgid "Announced DNS servers"
msgstr "Объявить DNS сервера"
msgid "Announced NTP servers"
msgstr "Объявить NTP сервера"
msgid "Announced prefixes"
msgstr "Объявить префиксы"
msgid "Collecting data..."
msgstr "Сбор данных..."
msgid "Forwarder"
msgstr "Перенаправление запросов"
msgid "General Setup"
msgstr "Основные настройки"
msgid "IPv4 and IPv6"
msgstr "IPv4 и IPv6"
msgid "IPv4 only"
msgstr "Только IPv4"
msgid "IPv6 only"
msgstr "Только IPv6"
msgid "Lease directory"
msgstr "Файл арендованных<br />адресов"
msgid "Lease validity time"
msgstr "Срок действия аренды"
msgid "Log file"
msgstr "Файл журнала"
msgid "Multicast address"
msgstr "Адрес мультивещания"
msgid "Operation mode"
msgstr "Режим работы"
msgid "Port"
msgstr "Порт"
msgid "Protocol family"
msgstr "Семейство протоколов"
msgid "Served interfaces"
msgstr "Используемые интерфейсы"
msgid "Server"
msgstr "Сервер"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Задайте IPv4 и IPv6 NTP сервера."
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Задайте IPv4 и IPv6 DNS сервера."
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Задайте IPv4 и IPv6 префиксы сети в нотации CIDR."
msgid "The AHCP Service is not running."
msgstr "Служба AHCP не запущена."
msgid "The AHCP Service is running with ID %s."
msgstr "Служба AHCP запущена с ID %s."
msgid "There are no active leases."
msgstr "Нет активных арендованных адресов."
msgid "Unique ID file"
msgstr "Файл уникального идентификатора"

View File

@ -0,0 +1,106 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
msgid "AHCP Server"
msgstr ""
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 ""
msgid "Active AHCP Leases"
msgstr ""
msgid "Address"
msgstr ""
msgid "Advanced Settings"
msgstr ""
msgid "Age"
msgstr ""
msgid "Announced DNS servers"
msgstr ""
msgid "Announced NTP servers"
msgstr ""
msgid "Announced prefixes"
msgstr ""
msgid "Collecting data..."
msgstr ""
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr ""
msgid "IPv4 and IPv6"
msgstr ""
msgid "IPv4 only"
msgstr ""
msgid "IPv6 only"
msgstr ""
msgid "Lease directory"
msgstr ""
msgid "Lease validity time"
msgstr ""
msgid "Log file"
msgstr ""
msgid "Multicast address"
msgstr ""
msgid "Operation mode"
msgstr ""
msgid "Port"
msgstr ""
msgid "Protocol family"
msgstr ""
msgid "Served interfaces"
msgstr ""
msgid "Server"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
msgid "There are no active leases."
msgstr ""
msgid "Unique ID file"
msgstr ""

View File

@ -0,0 +1,113 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-04-27 22:52+0200\n"
"Last-Translator: Umeaboy <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP-server"
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 är ett autokonfigurationsprotokoll för IPv6 och dual-stack IPv6/IPv4- "
"nätverk designade för att användas vid upptäckt av router eller DHCP på "
"nätverk där det är svårt eller omöjligt att ställa in en server inom "
"varje sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
msgid "Active AHCP Leases"
msgstr "Aktiva AHCP-hyror"
msgid "Address"
msgstr "Adress"
msgid "Advanced Settings"
msgstr "Avancerade inställningar"
msgid "Age"
msgstr "Ålder"
msgid "Announced DNS servers"
msgstr "Aviserade DNS-servrar"
msgid "Announced NTP servers"
msgstr "Aviserade NTP-servrar"
msgid "Announced prefixes"
msgstr "Aviserade prefix"
msgid "Collecting data..."
msgstr "Samlar in data..."
msgid "Forwarder"
msgstr "Vidarebefordrare"
msgid "General Setup"
msgstr "Allmän inställning"
msgid "IPv4 and IPv6"
msgstr "IPv4 och IPv6"
msgid "IPv4 only"
msgstr "Endast IPv4"
msgid "IPv6 only"
msgstr "Endast IPv6"
msgid "Lease directory"
msgstr "Hyr mappen"
msgid "Lease validity time"
msgstr "Giltighetstid för hyran"
msgid "Log file"
msgstr "Logg-fil"
msgid "Multicast address"
msgstr "Multicast-adress"
msgid "Operation mode"
msgstr "Driftsläge"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protokoll-familj"
msgid "Served interfaces"
msgstr "Betjänade gränssnitt"
msgid "Server"
msgstr "Server"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Specificerar de aviserade IPv4 och IPv6 NTP-servrarna"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Specificerar de aviserade IPv4 och IPv6 namn-servrarna"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Specificerar de aviserade IPv4 och IPv6 nätverksprefixen i CIDR-noteringen"
msgid "The AHCP Service is not running."
msgstr "AHCP-tjänsten körs inte."
msgid "The AHCP Service is running with ID %s."
msgstr "AHCP-tjänsten körs med ID %s."
msgid "There are no active leases."
msgstr "Det finns inga aktiva hyror."
msgid "Unique ID file"
msgstr "Unik ID-fil"

View File

@ -0,0 +1,99 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "AHCP Server"
msgstr ""
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 ""
msgid "Active AHCP Leases"
msgstr ""
msgid "Address"
msgstr ""
msgid "Advanced Settings"
msgstr ""
msgid "Age"
msgstr ""
msgid "Announced DNS servers"
msgstr ""
msgid "Announced NTP servers"
msgstr ""
msgid "Announced prefixes"
msgstr ""
msgid "Collecting data..."
msgstr ""
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr ""
msgid "IPv4 and IPv6"
msgstr ""
msgid "IPv4 only"
msgstr ""
msgid "IPv6 only"
msgstr ""
msgid "Lease directory"
msgstr ""
msgid "Lease validity time"
msgstr ""
msgid "Log file"
msgstr ""
msgid "Multicast address"
msgstr ""
msgid "Operation mode"
msgstr ""
msgid "Port"
msgstr ""
msgid "Protocol family"
msgstr ""
msgid "Served interfaces"
msgstr ""
msgid "Server"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
msgid "The AHCP Service is not running."
msgstr ""
msgid "The AHCP Service is running with ID %s."
msgstr ""
msgid "There are no active leases."
msgstr ""
msgid "Unique ID file"
msgstr ""

View File

@ -0,0 +1,113 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-11-25 14:51+0200\n"
"Last-Translator: qbilay <qbilay@mynet.com>\n"
"Language-Team: none\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP Sunucusu"
#, 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 bir IPv6 ve IPv4/IPv6 çift ağ için otomatik yapılandırma protokolüdür. "
"Yönlendirici Bildirimleri ve DHCP sunucuları geçici olarak yerine dağıtılmış "
"ağlar için tasarlanmıştır."
msgid "Active AHCP Leases"
msgstr "Aktif ACHP Kiralamaları"
msgid "Address"
msgstr "Adres"
msgid "Advanced Settings"
msgstr "Gelişmiş Ayarlar"
msgid "Age"
msgstr "Yaş"
msgid "Announced DNS servers"
msgstr ""
msgid "Announced NTP servers"
msgstr ""
msgid "Announced prefixes"
msgstr ""
msgid "Collecting data..."
msgstr "Veriler toplanıyor..."
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr "Genel Ayarlar"
msgid "IPv4 and IPv6"
msgstr "IPv4 ve IPv6"
msgid "IPv4 only"
msgstr "Sadece IPv4"
msgid "IPv6 only"
msgstr "Sadece IPv6"
msgid "Lease directory"
msgstr "Kiralama Dizini"
msgid "Lease validity time"
msgstr "Kiralama Geçerlilik Süresi"
msgid "Log file"
msgstr "Kayıt Dosyası"
msgid "Multicast address"
msgstr ""
msgid "Operation mode"
msgstr "Çalışma Modu"
msgid "Port"
msgstr "Port"
msgid "Protocol family"
msgstr "Protokol Ailesi"
msgid "Served interfaces"
msgstr "Sunucu Arayüzleri"
msgid "Server"
msgstr "Sunucu"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr ""
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
msgid "The AHCP Service is not running."
msgstr " AHCP Hizmeti Çalışmıyor"
msgid "The AHCP Service is running with ID %s."
msgstr " AHCP Hizmeti ID %ile çalışıyor"
msgid "There are no active leases."
msgstr "Aktif Kiralama Yok"
msgid "Unique ID file"
msgstr "Benzersiz ID Dosyası"

View File

@ -0,0 +1,115 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2012-04-28 21:17+0200\n"
"Last-Translator: Yurii <yuripet@gmail.com>\n"
"Language-Team: none\n"
"Language: uk\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"
msgid "AHCP Server"
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, що "
"разраблений для використання замість DHCP. Наприклад, він використовується у "
"стільникових ad-hoc мережах."
msgid "Active AHCP Leases"
msgstr "Активні оренди AHCP"
msgid "Address"
msgstr "Адреса"
msgid "Advanced Settings"
msgstr "Додаткові параметри"
msgid "Age"
msgstr "Вік"
msgid "Announced DNS servers"
msgstr "Оголошені DNS-сервери"
msgid "Announced NTP servers"
msgstr "Оголошені NTP-сервери"
msgid "Announced prefixes"
msgstr "Оголошені префікси"
msgid "Collecting data..."
msgstr "Збирання даних..."
msgid "Forwarder"
msgstr "Спрямовувач"
msgid "General Setup"
msgstr "Загальні параметри"
msgid "IPv4 and IPv6"
msgstr "IPv4 та IPv6"
msgid "IPv4 only"
msgstr "Тільки IPv4"
msgid "IPv6 only"
msgstr "Тільки IPv6"
msgid "Lease directory"
msgstr "Каталог оренд"
msgid "Lease validity time"
msgstr "Термін дії оренди"
msgid "Log file"
msgstr "Файл журналу"
msgid "Multicast address"
msgstr "Групова адреса"
msgid "Operation mode"
msgstr "Режим роботи"
msgid "Port"
msgstr "Порт"
msgid "Protocol family"
msgstr "Протокол"
msgid "Served interfaces"
msgstr "Інтерфейси, які обслуговуються"
msgid "Server"
msgstr "Сервер"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 NTP-сервери"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 DNS-сервери"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr ""
"Дозволяє вказати оголошувані IPv4 та IPv6 префікси мережі в нотації CIDR"
msgid "The AHCP Service is not running."
msgstr "Сервіс AHCP не запущено"
msgid "The AHCP Service is running with ID %s."
msgstr "Сервіс AHCP запущено з ID %s."
msgid "There are no active leases."
msgstr "Активних оренд немає."
msgid "Unique ID file"
msgstr "Файл унікальних ідентифікаторів"

View File

@ -0,0 +1,114 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-12-05 04:46+0200\n"
"Last-Translator: Thành <tienthanh.dqc@gmail.com>\n"
"Language-Team: none\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP Server"
#, 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 là một giao thức tự động cấu hình cho IPv6 và mạng IPv6/IPv4 dual-stack "
"thiết kế để được sử dụng trong địa điểm phát hiện router và DHCP trên mạng, "
"nơi rất khó hoặc không thể cấu hình một máy chủ trong tất cả các lĩnh vực "
"phát sóng liên kết lớp, ví dụ như mạng Ad-hoc."
msgid "Active AHCP Leases"
msgstr "Kích hoạt thuê AHCP"
msgid "Address"
msgstr "Địa chỉ"
msgid "Advanced Settings"
msgstr "Thiết lập nâng cao"
msgid "Age"
msgstr "Thời gian thuê"
msgid "Announced DNS servers"
msgstr "Quảng bá máy chủ DNS"
msgid "Announced NTP servers"
msgstr "Quảng bá máy chủ NTP"
msgid "Announced prefixes"
msgstr "Quảng bá tiền tố"
msgid "Collecting data..."
msgstr "Đang kết xuất dữ liệu..."
msgid "Forwarder"
msgstr "Chuyển tiếp"
msgid "General Setup"
msgstr "Thiết lập chung"
msgid "IPv4 and IPv6"
msgstr "IPv4 và IPv6"
msgid "IPv4 only"
msgstr "Chỉ IPv4"
msgid "IPv6 only"
msgstr "Chỉ IPv6"
msgid "Lease directory"
msgstr "Thư mục cho thuê"
msgid "Lease validity time"
msgstr "Thời gian cho thuê"
msgid "Log file"
msgstr "Tệp nhật ký"
msgid "Multicast address"
msgstr "Đa địa chỉ"
msgid "Operation mode"
msgstr "Chế độ hoạt động"
msgid "Port"
msgstr "Cổng"
msgid "Protocol family"
msgstr "Giao thức"
msgid "Served interfaces"
msgstr "Giao diện phục vụ"
msgid "Server"
msgstr "Máy chủ"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "Quy định cụ thể máy chủ IPv4, IPv6 và NTP"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "Quy định cụ thể tên máy chủ IPv4, IPv6 và NTP"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "Định rõ công bố IPv4 và IPv6 mạng tiền tố trong ký hiệu CIDR"
msgid "The AHCP Service is not running."
msgstr "Dịch vụ AHCP khộng hoạt động."
msgid "The AHCP Service is running with ID %s."
msgstr "Dịch vụ AHCP đang hoạt động với ID %s."
msgid "There are no active leases."
msgstr "Hiện không có người thuê"
msgid "Unique ID file"
msgstr "Tệp Unique ID"

View File

@ -0,0 +1,113 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-10-09 03:31+0200\n"
"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
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双栈网络的协议用于在网络上进行路由探测和地"
"址分配。因为在某些网络上为每个链路层广播域均配置服务器是非常困难的,例如移动"
"ad-hoc网络。"
msgid "Active AHCP Leases"
msgstr "活动的AHCP租约"
msgid "Address"
msgstr "地址"
msgid "Advanced Settings"
msgstr "高级设置"
msgid "Age"
msgstr "有效期"
msgid "Announced DNS servers"
msgstr "公布DNS服务器"
msgid "Announced NTP servers"
msgstr "公布NTP服务器"
msgid "Announced prefixes"
msgstr "公布地址前缀"
msgid "Collecting data..."
msgstr "数据收集中..."
msgid "Forwarder"
msgstr "转发器"
msgid "General Setup"
msgstr "通用设置"
msgid "IPv4 and IPv6"
msgstr "IPv4和IPv6"
msgid "IPv4 only"
msgstr "仅IPv4"
msgid "IPv6 only"
msgstr "仅IPv6"
msgid "Lease directory"
msgstr "租赁目录"
msgid "Lease validity time"
msgstr "租约有效期"
msgid "Log file"
msgstr "日志文件"
msgid "Multicast address"
msgstr "多播地址"
msgid "Operation mode"
msgstr "工作模式"
msgid "Port"
msgstr "端口"
msgid "Protocol family"
msgstr "协议簇"
msgid "Served interfaces"
msgstr "服务接口"
msgid "Server"
msgstr "服务器"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "指定IPv4与IPv6 时间服务器"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "指定IPv4与IPv6 域名服务器"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "指定IPv4与IPv6网络地址前缀(CIDR表示法)"
msgid "The AHCP Service is not running."
msgstr "AHCP服务没有运行。"
msgid "The AHCP Service is running with ID %s."
msgstr "AHCP服务程序进程ID %s"
msgid "There are no active leases."
msgstr "没有活跃租约。"
msgid "Unique ID file"
msgstr "UID文件"

View File

@ -0,0 +1,109 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2013-08-10 12:30+0200\n"
"Last-Translator: mp607 <mickey60711@gmail.com>\n"
"Language-Team: none\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.0.6\n"
msgid "AHCP Server"
msgstr "AHCP伺服器"
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 ""
msgid "Active AHCP Leases"
msgstr ""
msgid "Address"
msgstr "位置"
msgid "Advanced Settings"
msgstr "進階設定"
msgid "Age"
msgstr ""
msgid "Announced DNS servers"
msgstr "匿名的DNS伺服器"
msgid "Announced NTP servers"
msgstr "匿名的NTP伺服器"
msgid "Announced prefixes"
msgstr "匿名的前綴"
msgid "Collecting data..."
msgstr "收集資料"
msgid "Forwarder"
msgstr ""
msgid "General Setup"
msgstr "一般設定"
msgid "IPv4 and IPv6"
msgstr "IPv4 和 IPv6"
msgid "IPv4 only"
msgstr "只有IPv4"
msgid "IPv6 only"
msgstr "只有IPv6"
msgid "Lease directory"
msgstr "租用目錄"
msgid "Lease validity time"
msgstr "租用有效時間"
msgid "Log file"
msgstr "記錄檔"
msgid "Multicast address"
msgstr "多點廣播位置"
msgid "Operation mode"
msgstr "操作模式"
msgid "Port"
msgstr "通訊埠"
msgid "Protocol family"
msgstr "協定群組"
msgid "Served interfaces"
msgstr "提供服務的界面"
msgid "Server"
msgstr "伺服器"
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
msgstr "特別的匿名IPv4 與 IPv6 NTP 伺服器"
msgid "Specifies the announced IPv4 and IPv6 name servers"
msgstr "特別的匿名IPv4 與 IPv6 名稱伺服器"
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
msgstr "特別的匿名IPv4 與 IPv6 網路CIDR前綴"
msgid "The AHCP Service is not running."
msgstr "AHCP服務沒有運作"
msgid "The AHCP Service is running with ID %s."
msgstr "AHCP服務運作中 ID為 %s"
msgid "There are no active leases."
msgstr "沒有使用中的租用"
msgid "Unique ID file"
msgstr "獨立的ID檔案"

View File

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

View File

@ -0,0 +1,39 @@
#
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-aria2
# 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:=2
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Hsing-Wang Liao <kuoruan@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Aria2
LUCI_DEPENDS:=+aria2
LUCI_PKGARCH:=all
define Package/$(PKG_NAME)/config
# shown in make menuconfig <Help>
help
$(LUCI_TITLE)
.
Version: $(PKG_VERSION)-$(PKG_RELEASE)
$(PKG_MAINTAINER)
endef
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,42 @@
--[[
LuCI - Lua Configuration Interface - aria2 support
Copyright 2014-2015 nanpuyue <nanpuyue@gmail.com>
Modified by kuoruan <kuoruan@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
]]--
module("luci.controller.aria2", package.seeall)
function index()
if not nixio.fs.access("/etc/config/aria2") then
return
end
local page = entry({"admin", "services", "aria2"}, cbi("aria2"), _("Aria2 Settings"))
page.dependent = true
entry({"admin", "services", "aria2", "status"}, call("status")).leaf = true
end
function status()
local sys = require "luci.sys"
local ipkg = require "luci.model.ipkg"
local http = require "luci.http"
local uci = require "luci.model.uci".cursor()
local status = {
running = (sys.call("pidof aria2c > /dev/null") == 0),
yaaw = ipkg.installed("yaaw"),
webui = ipkg.installed("webui-aria2")
}
http.prepare_content("application/json")
http.write_json(status)
end

View File

@ -0,0 +1,211 @@
--[[
LuCI - Lua Configuration Interface - Aria2 support
Copyright 2014-2016 nanpuyue <nanpuyue@gmail.com>
Modified by maz-1 <ohmygod19993@gmail.com>
Modified by kuoruan <kuoruan@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
]]--
local sys = require "luci.sys"
local util = require "luci.util"
local uci = require "luci.model.uci".cursor()
local cfgbtn = "<input type=\"button\" value=\"" .. translate("Generate Randomly") .. "\" onclick=\"randomSecret(32);\" />"
local sessionbtn = "<input class=\"cbi-button mar-10\" type=\"button\" value=\"" .. translate("View Json-RPC URL") .. "\" onclick=\"showRPCURL();\" />"
local aria2rpctxt = "<input class=\"mar-10\" id=\"aria2rpcpath\" onmouseover=\"obj=document.getElementById(this.id);obj.focus();obj.select()\" />"
local use_websocket = "<input id=\"use_websocket\" type=\"checkbox\" /><label for=\"use_websocket\">" .. translate("Use WebSocket") .. "</label>"
function ipkg_ver(pkg)
local version = nil
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: ", ""):gsub("-%d", "")
break
end
until not ln
control:close()
end
return version
end
function ipkg_ver_lined(pkg)
return ipkg_ver(pkg):gsub("%.", "-")
end
m = Map("aria2", translate("Aria2"), translate("Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."))
m:section(SimpleSection).template = "aria2/overview_status"
s = m:section(TypedSection, "aria2", translate("Aria2 Settings"))
s.addremove = false
s.anonymous = true
s:tab("general", translate("General Settings"))
s:tab("file", translate("Files and Locations"))
s:tab("task", translate("Task Settings"))
s:tab("bittorrent", translate("BitTorrent Settings"))
o = s:taboption("general", Flag, "enabled", translate("Enabled"))
o.rmempty = false
user = s:taboption("general", ListValue, "user", translate("Run daemon as user"))
local p_user
for _, p_user in util.vspairs(util.split(sys.exec("cat /etc/passwd | cut -f 1 -d :"))) do
user:value(p_user)
end
o = s:taboption("general", Value, "rpc_listen_port", translate("RPC port"))
o.datatype = "port"
o.placeholder = "6800"
rpc_auth_method = s:taboption("general", ListValue, "rpc_auth_method", translate("RPC authentication method"))
rpc_auth_method:value("none", translate("No Authentication"))
rpc_auth_method:value("user_pass", translate("Username & Password"))
rpc_auth_method:value("token", translate("Token"))
o = s:taboption("general", Value, "rpc_user", translate("RPC username"))
o:depends("rpc_auth_method", "user_pass")
o.rmempty = false
o = s:taboption("general", Value, "rpc_passwd", translate("RPC password"))
o:depends("rpc_auth_method", "user_pass")
o.password = true
o.rmempty = true
o = s:taboption("general", Value, "rpc_secret", translate("RPC Token"), "<br/>" .. cfgbtn)
o:depends("rpc_auth_method", "token")
o.rmempty = true
o = s:taboption("file", Value, "config_dir", translate("Config file directory"))
o.placeholder = "/var/etc/aria2"
o = s:taboption("file", Flag, "enable_log", translate("Enable log"), translate("Log file is in the config file dir."))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("file", ListValue, "log_level", translate("Log level"))
o:depends("enable_log", "true")
o:value("debug", translate("Debug"))
o:value("info", translate("Info"))
o:value("notice", translate("Notice"))
o:value("warn", translate("Warn"))
o:value("error", translate("Error"))
o = s:taboption("file", Value, "dir", translate("Default download directory"))
o.rmempty = false
o = s:taboption("file", Value, "disk_cache", translate("Disk cache"), translate("in bytes, You can append K or M."))
o.rmempty = true
o = s:taboption("file", ListValue, "file_allocation", translate("Preallocation"), translate("\"Falloc\" is not available in all cases."))
o:value("none", translate("Off"))
o:value("prealloc", translate("Prealloc"))
o:value("trunc", translate("Trunc"))
o:value("falloc", translate("Falloc"))
overall_speed_limit = s:taboption("task", Flag, "overall_speed_limit", translate("Overall speed limit enabled"))
overall_speed_limit.rmempty = true
o = s:taboption("task", Value, "max_overall_download_limit", translate("Overall download limit"), translate("in bytes/sec, You can append K or M."))
o:depends("overall_speed_limit", "1")
o = s:taboption("task", Value, "max_overall_upload_limit", translate("Overall upload limit"), translate("in bytes/sec, You can append K or M."))
o:depends("overall_speed_limit", "1")
task_speed_limit = s:taboption("task", Flag, "task_speed_limit", translate("Per task speed limit enabled"))
task_speed_limit.rmempty = true
o = s:taboption("task", Value, "max_download_limit", translate("Per task download limit"), translate("in bytes/sec, You can append K or M."))
o:depends("task_speed_limit", "1")
o = s:taboption("task", Value, "max_upload_limit", translate("Per task upload limit"), translate("in bytes/sec, You can append K or M."))
o:depends("task_speed_limit", "1")
o = s:taboption("task", Value, "max_concurrent_downloads", translate("Max concurrent downloads"))
o.placeholder = "5"
o = s:taboption("task", Value, "max_connection_per_server", translate("Max connection per server"), "1-16")
o.datetype = "range(1, 16)"
o.placeholder = "1"
o = s:taboption("task", Value, "min_split_size", translate("Min split size"), "1M-1024M")
o.placeholder = "20M"
o = s:taboption("task", Value, "split", translate("Max number of split"))
o.placeholder = "5"
o = s:taboption("task", Value, "save_session_interval", translate("Autosave session interval"), translate("Sec"))
o.default = "30"
o = s:taboption("task", Value, "user_agent", translate("User agent value"))
o.placeholder = "aria2/" .. ipkg_ver("aria2")
o = s:taboption("bittorrent", Flag, "enable_dht", translate("<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Flag, "bt_enable_lpd", translate("<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Flag, "follow_torrent", translate("Follow torrent"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Value, "listen_port", translate("BitTorrent listen port"))
o.placeholder = "6881-6999"
o = s:taboption("bittorrent", Value, "bt_max_peers", translate("Max number of peers per torrent"))
o.placeholder = "55"
bt_tracker_enable = s:taboption("bittorrent", Flag, "bt_tracker_enable", translate("Additional Bt tracker enabled"))
bt_tracker = s:taboption("bittorrent", DynamicList, "bt_tracker", translate("List of additional Bt tracker"))
bt_tracker:depends("bt_tracker_enable", "1")
bt_tracker.rmempty = true
function bt_tracker.cfgvalue(self, section)
local rv = {}
local val = Value.cfgvalue(self, section)
if type(val) == "table" then
val = table.concat(val, ",")
elseif not val then
val = ""
end
for v in val:gmatch("[^,%s]+") do
rv[#rv+1] = v
end
return rv
end
function bt_tracker.write(self, section, value)
local rv = {}
for v in util.imatch(value) do
rv[#rv+1] = v
end
Value.write(self, section, table.concat(rv, ","))
end
o = s:taboption("bittorrent", Value, "peer_id_prefix", translate("Prefix of peer ID"))
o.placeholder = "A2-" .. ipkg_ver_lined("aria2") .. "-"
s = m:section(TypedSection, "aria2", translate("Extra Settings"))
s.addremove = false
s.anonymous = true
o = s:option(DynamicList, "extra_settings", translate("List of extra settings"))
o.placeholder = "option=value"
o.rmempty = true
m:section(SimpleSection, nil, sessionbtn .. use_websocket .. aria2rpctxt)
return m

View File

@ -0,0 +1,77 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=luci.dispatcher.build_url("admin/services/aria2/status")%>', null,
function(x, data) {
var tb = document.getElementById('aria2_status');
if (data && tb) {
if (data.running) {
var links = '<em><%:The Aria2 service is running.%></em>';
if (data.yaaw) {
links += '<input class="cbi-button mar-10" type="button" value="<%:Open YAAW%>" onclick="openWebUI(\'yaaw\');" />';
}
if (data.webui) {
links += '<input class="cbi-button mar-10" type="button" value="<%:Open WebUI-Aria2%>" onclick="openWebUI(\'webui-aria2\');" />';
}
tb.innerHTML = links;
} else {
tb.innerHTML = '<em><%:The Aria2 service is not running.%></em>';
}
}
}
);
function randomString(len) {
len = len || 32;
var $chars = 'abcdefghijklmnopqrstuvwxyz1234567890';
var maxPos = $chars.length;
var pwd = '';
for (i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
};
function randomSecret() {
var Token = document.getElementById("cbid.aria2.main.rpc_secret");
Token.value = randomString(32);
};
function showRPCURL() {
var websocket = document.getElementById("use_websocket");
var protocol = (websocket.checked) ? "ws" : "http";
var newTextNode = document.getElementById("aria2rpcpath");
var auth_method = document.getElementById("cbid.aria2.main.rpc_auth_method");
var auth_port = document.getElementById("cbid.aria2.main.rpc_listen_port");
if (auth_port.value == "") {
auth_port_value = "6800"
} else {
auth_port_value = auth_port.value
};
if (auth_method.value == "token") {
var auth_token = document.getElementById("cbid.aria2.main.rpc_secret");
newTextNode.value = protocol + "://token:" + auth_token.value + "@" + document.domain + ":" + auth_port_value + "/jsonrpc";
} else if (auth_method.value == "user_pass") {
var auth_user = document.getElementById("cbid.aria2.main.rpc_user");
var auth_passwd = document.getElementById("cbid.aria2.main.rpc_passwd");
newTextNode.value = protocol + "://" + auth_user.value + ":" + auth_passwd.value + "@" + document.domain + ":" + auth_port_value + "/jsonrpc";
} else {
newTextNode.value = protocol + "://" + document.domain + ":" + auth_port_value + "/jsonrpc";
}
};
function openWebUI(path) {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos);
var url = "http:" + localhostPath.substring(window.location.protocol.length) + "/" + path;
window.open(url)
};
//]]>
</script>
<style>.mar-10 {margin-left: 10px; margin-right: 10px;}</style>
<fieldset class="cbi-section">
<legend><%:Aria2 Status%></legend>
<p id="aria2_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View File

@ -0,0 +1,236 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
msgid "\"Falloc\" is not available in all cases."
msgstr "\"Falloc\" não está disponível em todas as classes."
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr ""
"<abbr title=\"Distributed Hash Table/Tabla de disperção distribuída\">DHT</"
"abbr> habilitado"
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr ""
"<abbr title=\"Local Peer Discovery/Descoberta de Parceiros Locais\">LPD</"
"abbr> habilitado"
msgid "Additional Bt tracker enabled"
msgstr "Rastreadores BitTorrent adicionais habilitado"
msgid "Aria2"
msgstr "Aria2"
msgid "Aria2 Settings"
msgstr "Configurações do Aria2"
msgid "Aria2 Status"
msgstr "Estado do Aria2"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr ""
"Aria2 é um utilitário de transferência multi-protocolo de múltiplas fontes, "
"aqui você pode configurá-lo."
msgid "Autosave session interval"
msgstr "Intervalo para autossalvamento da sessão"
msgid "BitTorrent Settings"
msgstr "Configurações do BitTorrent"
msgid "BitTorrent listen port"
msgstr "Porta de escuta do BitTorrent"
msgid "Collecting data..."
msgstr "Coletando dados..."
msgid "Config file directory"
msgstr "Diretório dos arquivos de configuração"
msgid "Debug"
msgstr "Depuração"
msgid "Default download directory"
msgstr "Diretório padrão de arquivos baixados"
msgid "Disk cache"
msgstr "Cache em Disco"
msgid "Enable log"
msgstr "Habilitar registros"
msgid "Enabled"
msgstr "Habilitado"
msgid "Error"
msgstr "Erro"
msgid "Extra Settings"
msgstr "Configurações Adicionais"
msgid "Falloc"
msgstr "Falloc"
msgid "Files and Locations"
msgstr "Arquivos e Locais"
msgid "Follow torrent"
msgstr "Seguir torrent"
msgid "General Settings"
msgstr "Configurações Gerais"
msgid "Generate Randomly"
msgstr "Gerar aleatoriamente"
msgid "Info"
msgstr "Informações"
msgid "List of additional Bt tracker"
msgstr "Lista de rastreadores BitTorrent adicionais"
msgid "List of extra settings"
msgstr "Lista de configurações adicionais"
msgid "Log file is in the config file dir."
msgstr ""
"Arquivo de registro (log) está no diretório do arquivo de configuração."
msgid "Log level"
msgstr "Nível do registro"
msgid "Max concurrent downloads"
msgstr "Número máximo de transferencias simultâneas"
msgid "Max connection per server"
msgstr "Numero máximo de conexões por servidor"
msgid "Max number of peers per torrent"
msgstr "Numero máximo de parceiros por torrent"
msgid "Max number of split"
msgstr "Numero máximo de divisões"
msgid "Min split size"
msgstr "Tamanho mínimo da divisão"
msgid "No Authentication"
msgstr "Sem Autenticação"
msgid "Notice"
msgstr "Aviso"
msgid "Off"
msgstr "Desligado"
msgid "Open WebUI-Aria2"
msgstr "Abrir WebUI-Aria2"
msgid "Open YAAW"
msgstr "Abrir YAAW"
msgid "Overall download limit"
msgstr "Limite global para baixar"
msgid "Overall speed limit enabled"
msgstr "Limite da taxa de transferência global habilitado"
msgid "Overall upload limit"
msgstr "Limite global para subir"
msgid "Per task download limit"
msgstr "Limite por tarefa para baixar"
msgid "Per task speed limit enabled"
msgstr "Limite da taxa de transferência por tarefa habilitado"
msgid "Per task upload limit"
msgstr "Limite por tarefa para subir"
msgid "Prealloc"
msgstr "Pré-alocação"
msgid "Preallocation"
msgstr "Pré-alocação"
msgid "Prefix of peer ID"
msgstr "Prefixo da identificação do paceiro"
msgid "RPC Token"
msgstr ""
"Chave eletrônica do <abbr title=\"Remote Procedure Call/Chamada de "
"Procedimento Remoto\">RPC</abbr>"
msgid "RPC authentication method"
msgstr ""
"Método de autenticação do <abbr title=\"Remote Procedure Call/Chamada de "
"Procedimento Remoto\">RPC</abbr>"
msgid "RPC password"
msgstr ""
"Senha do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto"
"\">RPC</abbr>"
msgid "RPC port"
msgstr ""
"Porta do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto"
"\">RPC</abbr>"
msgid "RPC username"
msgstr ""
"Nome do usuario do <abbr title=\"Remote Procedure Call/Chamada de "
"Procedimento Remoto\">RPC</abbr>"
msgid "Run daemon as user"
msgstr "Executar serviço como usuário"
msgid "Sec"
msgstr "Segurança"
msgid "Task Settings"
msgstr "Configurações das tarefas"
msgid "The Aria2 service is not running."
msgstr "O serviço Aria2 está parado."
msgid "The Aria2 service is running."
msgstr "O serviço Aria2 está em execução."
msgid "Token"
msgstr "Chave eletrônica"
msgid "Trunc"
msgstr "Truncar"
msgid "Use WebSocket"
msgstr "Use WebSockets"
msgid "User agent value"
msgstr "Valor da identificação do agente do usuário"
msgid "Username & Password"
msgstr "Usuário & Senha"
msgid "View Json-RPC URL"
msgstr "Visualizar URL do JSON-RPC"
msgid "Warn"
msgstr "Atenção"
msgid "in bytes, You can append K or M."
msgstr "em bytes. Você pode sufixar com K (quilo) ou M (mega)."
msgid "in bytes/sec, You can append K or M."
msgstr "em bytes por segundo. Você pode sufixar com K (quilo) ou M (mega)."

View File

@ -0,0 +1,225 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: aria2\n"
"POT-Creation-Date: 2017-11-30 23:45+0300\n"
"PO-Revision-Date: 2018-01-31 18:33+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 "\"Falloc\" is not available in all cases."
msgstr "'Falloc' возможен не всегда."
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr "<abbr title=\"Распределенная Hash таблица\">DHT</abbr> включена"
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr "<abbr title=\"Обнаружение локальных пиров\">LPD</abbr> включено"
msgid "Additional Bt tracker enabled"
msgstr "Дополнительный<br />Bt tracker включен"
msgid "Aria2"
msgstr "Aria2"
msgid "Aria2 Settings"
msgstr "Настройка Aria2"
msgid "Aria2 Status"
msgstr "Состояние Aria2"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr ""
"Aria2 - это мульти-протокольная и мульти-платформенная утилита загрузки, "
"здесь вы сможете ее настроить."
msgid "Autosave session interval"
msgstr "Интервал сессии автосохранения"
msgid "BitTorrent Settings"
msgstr "Настройки BitTorrent-а"
msgid "BitTorrent listen port"
msgstr "Порты BitTorrent-а"
msgid "Collecting data..."
msgstr "Сбор данных..."
msgid "Config file directory"
msgstr "Папка расположения<br />сonfig файла"
msgid "Debug"
msgstr "Отладка"
msgid "Default download directory"
msgstr "Папка для загрузки<br />файлов по умолчанию"
msgid "Disk cache"
msgstr "Дисковый кэш"
msgid "Enable log"
msgstr "Включить ведение системного журнала"
msgid "Enabled"
msgstr "Включено"
msgid "Error"
msgstr "Ошибка"
msgid "Extra Settings"
msgstr "Дополнительные настройки"
msgid "Falloc"
msgstr "Falloc"
msgid "Files and Locations"
msgstr "Файлы и папки"
msgid "Follow torrent"
msgstr "Запустить<br />торрент-файл"
msgid "General Settings"
msgstr "Основные настройки"
msgid "Generate Randomly"
msgstr "Генерировать случайно"
msgid "Info"
msgstr "Информация"
msgid "List of additional Bt tracker"
msgstr "Список дополнительных BT tracker-ов"
msgid "List of extra settings"
msgstr "Список дополнительных настроек"
msgid "Log file is in the config file dir."
msgstr "Файл системного журнала находится в папке с config файлом."
msgid "Log level"
msgstr "Записывать в журнал"
msgid "Max concurrent downloads"
msgstr "Максимальное количество одновременных загрузок"
msgid "Max connection per server"
msgstr "Максимальное количество<br />подключений на сервер"
msgid "Max number of peers per torrent"
msgstr "Максимальное число<br />пиров на торрент-файл"
msgid "Max number of split"
msgstr "Максимальное<br />число разделений"
msgid "Min split size"
msgstr "Минимальный размер разделений"
msgid "No Authentication"
msgstr "Без проверки подлинности"
msgid "Notice"
msgstr "Заметка"
msgid "Off"
msgstr "Выключено"
msgid "Open WebUI-Aria2"
msgstr "Открыть WebUI-Aria2"
msgid "Open YAAW"
msgstr "Открыть YAAW"
msgid "Overall download limit"
msgstr "Общее ограничение<br />скорости загрузки"
msgid "Overall speed limit enabled"
msgstr "Общее ограничение скорости<br /> для утилиты включено"
msgid "Overall upload limit"
msgstr "Общее ограничение<br />скорости раздачи"
msgid "Per task download limit"
msgstr "Ограничить скорость загрузки"
msgid "Per task speed limit enabled"
msgstr "Ограничить скорость для одной задачи включено"
msgid "Per task upload limit"
msgstr "Ограничить скорость раздачи"
msgid "Prealloc"
msgstr "Предварительно"
msgid "Preallocation"
msgstr "Предварительное<br />распределение<br />места под файл"
msgid "Prefix of peer ID"
msgstr "Префикс ID пира"
msgid "RPC Token"
msgstr "Токен для доступа к удаленному управлению (RPC)"
msgid "RPC authentication method"
msgstr "Метод аутентификации для доступа к удаленному управлению (RPC)"
msgid "RPC password"
msgstr "Пароль для доступа к удаленному управлению (RPC)"
msgid "RPC port"
msgstr "Порт для доступа к удаленному управлению (RPC)"
msgid "RPC username"
msgstr "Логин для доступа к удаленному управлению (RPC)"
msgid "Run daemon as user"
msgstr "Запуск демона<br />от имени пользователя"
msgid "Sec"
msgstr "Секунды"
msgid "Task Settings"
msgstr "Настройки задач"
msgid "The Aria2 service is not running."
msgstr "Aria2 сервис не запущен."
msgid "The Aria2 service is running."
msgstr "Aria2 сервис запущен."
msgid "Token"
msgstr "Токен"
msgid "Trunc"
msgstr "Сокращать"
msgid "Use WebSocket"
msgstr "Использовать WebSockets"
msgid "User agent value"
msgstr "Агент пользователя"
msgid "Username & Password"
msgstr "Имя и пароль"
msgid "View Json-RPC URL"
msgstr "Показать URL Json-RPC"
msgid "Warn"
msgstr "Внимание"
msgid "in bytes, You can append K or M."
msgstr ""
"Дисковый кэш в байтах. Вы можете добавить суффикс K (кило) или М (мега)."
msgid "in bytes/sec, You can append K or M."
msgstr "в байтах/секундах. Вы можете добавить суффикс K (кило) или М (мега)."

View File

@ -0,0 +1,208 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "\"Falloc\" is not available in all cases."
msgstr ""
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr ""
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr ""
msgid "Additional Bt tracker enabled"
msgstr ""
msgid "Aria2"
msgstr "Aria2"
msgid "Aria2 Settings"
msgstr "Inställningar för Aria2"
msgid "Aria2 Status"
msgstr "Status för Aria2"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr ""
msgid "Autosave session interval"
msgstr "Autospara sessionintervall"
msgid "BitTorrent Settings"
msgstr "Inställningar för BitTorrent"
msgid "BitTorrent listen port"
msgstr "Lyssningsport för BitTorrent"
msgid "Collecting data..."
msgstr "Samlar in data..."
msgid "Config file directory"
msgstr "Ställ in fil-mapp"
msgid "Debug"
msgstr "Avlusa"
msgid "Default download directory"
msgstr "Standard nerladdningsmapp"
msgid "Disk cache"
msgstr "Disk-cache"
msgid "Enable log"
msgstr "Aktivera logg"
msgid "Enabled"
msgstr "Aktiverad"
msgid "Error"
msgstr "Fel"
msgid "Extra Settings"
msgstr "Extra inställningar"
msgid "Falloc"
msgstr "Falloc"
msgid "Files and Locations"
msgstr "Filer och Platser"
msgid "Follow torrent"
msgstr "Följ torrenten"
msgid "General Settings"
msgstr "Generella inställningar"
msgid "Generate Randomly"
msgstr "Generera slumpmässigt"
msgid "Info"
msgstr "Info"
msgid "List of additional Bt tracker"
msgstr "Lista över extra Bt-tracker"
msgid "List of extra settings"
msgstr "Lista över extra inställningar"
msgid "Log file is in the config file dir."
msgstr "Logg-filen är i konfigurationsfilens mapp."
msgid "Log level"
msgstr "Loggnivå"
msgid "Max concurrent downloads"
msgstr "Maximalt sammanhängande nerladdningar"
msgid "Max connection per server"
msgstr "Max antalet anslutningar per server"
msgid "Max number of peers per torrent"
msgstr "Maximalt antalet jämlikar per torrent"
msgid "Max number of split"
msgstr "Högst antal split"
msgid "Min split size"
msgstr "Minsta split-storlek"
msgid "No Authentication"
msgstr "Ingen autentisering"
msgid "Notice"
msgstr "Avisering"
msgid "Off"
msgstr "Av"
msgid "Open WebUI-Aria2"
msgstr "Öppna WebUI-Aria2"
msgid "Open YAAW"
msgstr "Öppna YAAW"
msgid "Overall download limit"
msgstr ""
msgid "Overall speed limit enabled"
msgstr ""
msgid "Overall upload limit"
msgstr ""
msgid "Per task download limit"
msgstr ""
msgid "Per task speed limit enabled"
msgstr ""
msgid "Per task upload limit"
msgstr ""
msgid "Prealloc"
msgstr "Prealloc"
msgid "Preallocation"
msgstr "Förallokering"
msgid "Prefix of peer ID"
msgstr "Peer-ID prefix"
msgid "RPC Token"
msgstr ""
msgid "RPC authentication method"
msgstr ""
msgid "RPC password"
msgstr "RPC-lösenord"
msgid "RPC port"
msgstr "RPC-port"
msgid "RPC username"
msgstr "RPC-användarnamn"
msgid "Run daemon as user"
msgstr "Kör daemonen som användare"
msgid "Sec"
msgstr "Sek"
msgid "Task Settings"
msgstr "Inställningar för uppgifter"
msgid "The Aria2 service is not running."
msgstr "Aria2-tjänsten körs inte."
msgid "The Aria2 service is running."
msgstr "Aria2-tjänsten körs."
msgid "Token"
msgstr "Tecken"
msgid "Trunc"
msgstr ""
msgid "Use WebSocket"
msgstr "Använd WebSocket"
msgid "User agent value"
msgstr "Använd agent-värde"
msgid "Username & Password"
msgstr "Användarnamn & Lösenord"
msgid "View Json-RPC URL"
msgstr "Visa Json-RPC URL"
msgid "Warn"
msgstr "Varna"
msgid "in bytes, You can append K or M."
msgstr "i bytes, Du kan bifoga K eller M."
msgid "in bytes/sec, You can append K or M."
msgstr "i bytes/sek, Du kan bifoga K eller M."

View File

@ -0,0 +1,208 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "\"Falloc\" is not available in all cases."
msgstr ""
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr ""
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr ""
msgid "Additional Bt tracker enabled"
msgstr ""
msgid "Aria2"
msgstr ""
msgid "Aria2 Settings"
msgstr ""
msgid "Aria2 Status"
msgstr ""
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr ""
msgid "Autosave session interval"
msgstr ""
msgid "BitTorrent Settings"
msgstr ""
msgid "BitTorrent listen port"
msgstr ""
msgid "Collecting data..."
msgstr ""
msgid "Config file directory"
msgstr ""
msgid "Debug"
msgstr ""
msgid "Default download directory"
msgstr ""
msgid "Disk cache"
msgstr ""
msgid "Enable log"
msgstr ""
msgid "Enabled"
msgstr ""
msgid "Error"
msgstr ""
msgid "Extra Settings"
msgstr ""
msgid "Falloc"
msgstr ""
msgid "Files and Locations"
msgstr ""
msgid "Follow torrent"
msgstr ""
msgid "General Settings"
msgstr ""
msgid "Generate Randomly"
msgstr ""
msgid "Info"
msgstr ""
msgid "List of additional Bt tracker"
msgstr ""
msgid "List of extra settings"
msgstr ""
msgid "Log file is in the config file dir."
msgstr ""
msgid "Log level"
msgstr ""
msgid "Max concurrent downloads"
msgstr ""
msgid "Max connection per server"
msgstr ""
msgid "Max number of peers per torrent"
msgstr ""
msgid "Max number of split"
msgstr ""
msgid "Min split size"
msgstr ""
msgid "No Authentication"
msgstr ""
msgid "Notice"
msgstr ""
msgid "Off"
msgstr ""
msgid "Open WebUI-Aria2"
msgstr ""
msgid "Open YAAW"
msgstr ""
msgid "Overall download limit"
msgstr ""
msgid "Overall speed limit enabled"
msgstr ""
msgid "Overall upload limit"
msgstr ""
msgid "Per task download limit"
msgstr ""
msgid "Per task speed limit enabled"
msgstr ""
msgid "Per task upload limit"
msgstr ""
msgid "Prealloc"
msgstr ""
msgid "Preallocation"
msgstr ""
msgid "Prefix of peer ID"
msgstr ""
msgid "RPC Token"
msgstr ""
msgid "RPC authentication method"
msgstr ""
msgid "RPC password"
msgstr ""
msgid "RPC port"
msgstr ""
msgid "RPC username"
msgstr ""
msgid "Run daemon as user"
msgstr ""
msgid "Sec"
msgstr ""
msgid "Task Settings"
msgstr ""
msgid "The Aria2 service is not running."
msgstr ""
msgid "The Aria2 service is running."
msgstr ""
msgid "Token"
msgstr ""
msgid "Trunc"
msgstr ""
msgid "Use WebSocket"
msgstr ""
msgid "User agent value"
msgstr ""
msgid "Username & Password"
msgstr ""
msgid "View Json-RPC URL"
msgstr ""
msgid "Warn"
msgstr ""
msgid "in bytes, You can append K or M."
msgstr ""
msgid "in bytes/sec, You can append K or M."
msgstr ""

View File

@ -0,0 +1,221 @@
#
# Yangfl <mmyangfl@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
"Language-Team: <debian-l10n-chinese@lists.debian.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"PO-Revision-Date: 2017-10-28 16:10+0800\n"
"X-Generator: Gtranslator 2.91.7\n"
msgid "\"Falloc\" is not available in all cases."
msgstr "\"Falloc\" 并不是在所有情况下都可用"
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
msgid "Additional Bt tracker enabled"
msgstr "添加额外的Tracker"
msgid "Aria2"
msgstr "Aria2"
msgid "Aria2 Settings"
msgstr "Aria2 配置"
msgid "Aria2 Status"
msgstr "Aria2 状态"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr "Aria2 是一个支持多协议多线程的下载器, 您可以在这里对其进行配置。"
msgid "Autosave session interval"
msgstr "定时保存会话间隔"
msgid "BitTorrent Settings"
msgstr "BitTorrent 设置"
msgid "BitTorrent listen port"
msgstr "BitTorrent 监听端口"
msgid "Collecting data..."
msgstr "正在收集数据..."
msgid "Config file directory"
msgstr "配置文件目录"
msgid "Debug"
msgstr "调试"
msgid "Default download directory"
msgstr "默认下载目录"
msgid "Disk cache"
msgstr "磁盘缓存"
msgid "Enable log"
msgstr "启用日志"
msgid "Enabled"
msgstr "启用"
msgid "Error"
msgstr "错误"
msgid "Extra Settings"
msgstr "附加选项"
msgid "Falloc"
msgstr "快速 allocFalloc"
msgid "Files and Locations"
msgstr "文件和目录"
msgid "Follow torrent"
msgstr "自动添加下载的种子"
msgid "General Settings"
msgstr ""
msgid "Generate Randomly"
msgstr "随机生成"
msgid "Info"
msgstr "信息"
msgid "List of additional Bt tracker"
msgstr "附加 Bt tracker 列表"
msgid "List of extra settings"
msgstr "附加选项列表"
msgid "Log file is in the config file dir."
msgstr "日志文件在配置文件目录下"
msgid "Log level"
msgstr "日志记录等级"
msgid "Max concurrent downloads"
msgstr "最大同时下载任务数"
msgid "Max connection per server"
msgstr "单服务器最大连接数"
msgid "Max number of peers per torrent"
msgstr "单个种子最大连接数"
msgid "Max number of split"
msgstr "单文件最大线程数"
msgid "Min split size"
msgstr "最小文件分片大小"
msgid "No Authentication"
msgstr "无认证"
msgid "Notice"
msgstr "注意"
msgid "Off"
msgstr "关闭"
msgid "Open WebUI-Aria2"
msgstr "打开 WebUI-Aria2"
msgid "Open YAAW"
msgstr "打开 YAAW"
msgid "Overall download limit"
msgstr "全局下载限速"
msgid "Overall speed limit enabled"
msgstr "启用全局限速"
msgid "Overall upload limit"
msgstr "全局上传限速"
msgid "Per task download limit"
msgstr "单任务下载限速"
msgid "Per task speed limit enabled"
msgstr "启用单任务限速"
msgid "Per task upload limit"
msgstr "单任务上传限速"
msgid "Prealloc"
msgstr "预分配"
msgid "Preallocation"
msgstr "磁盘预分配"
msgid "Prefix of peer ID"
msgstr "Peer ID 前缀"
msgid "RPC Token"
msgstr "RPC 令牌"
msgid "RPC authentication method"
msgstr "RPC 认证方式"
msgid "RPC password"
msgstr "RPC 密码"
msgid "RPC port"
msgstr "RPC 端口"
msgid "RPC username"
msgstr "RPC 用户名"
msgid "Run daemon as user"
msgstr "以此用户权限运行"
msgid "Sec"
msgstr "秒"
msgid "Task Settings"
msgstr "任务设置"
msgid "The Aria2 service is not running."
msgstr "Aria2 未运行"
msgid "The Aria2 service is running."
msgstr "Aria2 正在运行"
msgid "Token"
msgstr "令牌"
msgid "Trunc"
msgstr ""
msgid "Use WebSocket"
msgstr "使用 WebSocket"
msgid "User agent value"
msgstr "用户代理UA"
msgid "Username & Password"
msgstr "用户名与密码"
msgid "View Json-RPC URL"
msgstr "查看 Json-RPC URL"
msgid "Warn"
msgstr "警告"
msgid "in bytes, You can append K or M."
msgstr "单位 B, 您可以在数字后跟上 K 或 M。"
msgid "in bytes/sec, You can append K or M."
msgstr "单位 B/s, 您可以在数字后跟上 K 或 M。"
#~ msgid "General settings"
#~ msgstr "基本设置"

View File

@ -0,0 +1,221 @@
#
# Yangfl <mmyangfl@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
"Language-Team: <debian-l10n-chinese@lists.debian.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"PO-Revision-Date: 2017-10-28 16:10+0800\n"
"X-Generator: Gtranslator 2.91.7\n"
msgid "\"Falloc\" is not available in all cases."
msgstr "\"Falloc\" 並不是在所有情況下都可用"
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr "啟用<abbr title=\"分散式雜湊表\">DHT</abbr>"
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr "啟用<abbr title=\"本地節點發現\">LPD</abbr>"
msgid "Additional Bt tracker enabled"
msgstr "新增額外的Tracker"
msgid "Aria2"
msgstr "Aria2"
msgid "Aria2 Settings"
msgstr "Aria2 配置"
msgid "Aria2 Status"
msgstr "Aria2 狀態"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
msgstr "Aria2 是一個支援多協議多執行緒的下載器, 您可以在這裡對其進行配置。"
msgid "Autosave session interval"
msgstr "定時儲存會話間隔"
msgid "BitTorrent Settings"
msgstr "BitTorrent 設定"
msgid "BitTorrent listen port"
msgstr "BitTorrent 監聽埠"
msgid "Collecting data..."
msgstr "正在收集資料..."
msgid "Config file directory"
msgstr "配置檔案目錄"
msgid "Debug"
msgstr "除錯"
msgid "Default download directory"
msgstr "預設下載目錄"
msgid "Disk cache"
msgstr "磁碟快取"
msgid "Enable log"
msgstr "啟用日誌"
msgid "Enabled"
msgstr "啟用"
msgid "Error"
msgstr "錯誤"
msgid "Extra Settings"
msgstr "附加選項"
msgid "Falloc"
msgstr "快速 allocFalloc"
msgid "Files and Locations"
msgstr "檔案和目錄"
msgid "Follow torrent"
msgstr "自動新增下載的種子"
msgid "General Settings"
msgstr ""
msgid "Generate Randomly"
msgstr "隨機生成"
msgid "Info"
msgstr "資訊"
msgid "List of additional Bt tracker"
msgstr "附加 Bt tracker 列表"
msgid "List of extra settings"
msgstr "附加選項列表"
msgid "Log file is in the config file dir."
msgstr "日誌檔案在配置檔案目錄下"
msgid "Log level"
msgstr "日誌記錄等級"
msgid "Max concurrent downloads"
msgstr "最大同時下載任務數"
msgid "Max connection per server"
msgstr "單伺服器最大連線數"
msgid "Max number of peers per torrent"
msgstr "單個種子最大連線數"
msgid "Max number of split"
msgstr "單檔案最大執行緒數"
msgid "Min split size"
msgstr "最小檔案分片大小"
msgid "No Authentication"
msgstr "無認證"
msgid "Notice"
msgstr "注意"
msgid "Off"
msgstr "關閉"
msgid "Open WebUI-Aria2"
msgstr "開啟 WebUI-Aria2"
msgid "Open YAAW"
msgstr "開啟 YAAW"
msgid "Overall download limit"
msgstr "全域性下載限速"
msgid "Overall speed limit enabled"
msgstr "啟用全侷限速"
msgid "Overall upload limit"
msgstr "全域性上傳限速"
msgid "Per task download limit"
msgstr "單任務下載限速"
msgid "Per task speed limit enabled"
msgstr "啟用單任務限速"
msgid "Per task upload limit"
msgstr "單任務上傳限速"
msgid "Prealloc"
msgstr "預分配"
msgid "Preallocation"
msgstr "磁碟預分配"
msgid "Prefix of peer ID"
msgstr "Peer ID 字首"
msgid "RPC Token"
msgstr "RPC 令牌"
msgid "RPC authentication method"
msgstr "RPC 認證方式"
msgid "RPC password"
msgstr "RPC 密碼"
msgid "RPC port"
msgstr "RPC 埠"
msgid "RPC username"
msgstr "RPC 使用者名稱"
msgid "Run daemon as user"
msgstr "以此使用者許可權執行"
msgid "Sec"
msgstr "秒"
msgid "Task Settings"
msgstr "任務設定"
msgid "The Aria2 service is not running."
msgstr "Aria2 未執行"
msgid "The Aria2 service is running."
msgstr "Aria2 正在執行"
msgid "Token"
msgstr "令牌"
msgid "Trunc"
msgstr ""
msgid "Use WebSocket"
msgstr "使用 WebSocket"
msgid "User agent value"
msgstr "使用者代理UA"
msgid "Username & Password"
msgstr "使用者名稱與密碼"
msgid "View Json-RPC URL"
msgstr "檢視 Json-RPC URL"
msgid "Warn"
msgstr "警告"
msgid "in bytes, You can append K or M."
msgstr "單位 B, 您可以在數字後跟上 K 或 M。"
msgid "in bytes/sec, You can append K or M."
msgstr "單位 B/s, 您可以在數字後跟上 K 或 M。"
#~ msgid "General settings"
#~ msgstr "基本設定"

View File

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

View File

@ -0,0 +1,13 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for Asterisk
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,746 @@
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
module("luci.asterisk", package.seeall)
require("luci.asterisk.cc_idd")
local _io = require("io")
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
AST_BIN = "/usr/sbin/asterisk"
AST_FLAGS = "-r -x"
--- LuCI Asterisk - Resync uci context
function uci_resync()
uci = luci.model.uci.cursor()
end
--- LuCI Asterisk io interface
-- Handles low level io.
-- @type module
io = luci.util.class()
--- Execute command and return output
-- @param command String containing the command to execute
-- @return String containing the command output
function io.exec(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
local buffer = fh:read("*a")
fh:close()
return buffer
end
--- Execute command and invoke given callback for each readed line
-- @param command String containing the command to execute
-- @param callback Function to call back for each line
-- @return Always true
function io.execl(command, callback)
local ln
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
repeat
ln = fh:read("*l")
callback(ln)
until not ln
fh:close()
return true
end
--- Execute command and return an iterator that returns one line per invokation
-- @param command String containing the command to execute
-- @return Iterator function
function io.execi(command)
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
assert(fh, "Failed to invoke asterisk")
return function()
local ln = fh:read("*l")
if not ln then fh:close() end
return ln
end
end
--- LuCI Asterisk - core status
core = luci.util.class()
--- Retrive version string.
-- @return String containing the reported asterisk version
function core.version(self)
local version = io.exec("core show version")
return version:gsub(" *\n", "")
end
--- LuCI Asterisk - SIP information.
-- @type module
sip = luci.util.class()
--- Get a list of known SIP peers
-- @return Table containing each SIP peer
function sip.peers(self)
local head = false
local peers = { }
for line in io.execi("sip show peers") do
if not head then
head = true
elseif not line:match(" sip peers ") then
local online, delay, id, uid
local name, host, dyn, nat, acl, port, status =
line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)")
if host == '(Unspecified)' then host = nil end
if port == '0' then port = nil else port = tonumber(port) end
dyn = ( dyn == 'D' and true or false )
nat = ( nat == 'N' and true or false )
acl = ( acl ~= ' ' and true or false )
online, delay = status:match("(OK) %((%d+) ms%)")
if online == 'OK' then
online = true
delay = tonumber(delay)
elseif status ~= 'Unmonitored' then
online = false
delay = 0
else
online = nil
delay = 0
end
id, uid = name:match("(.+)/(.+)")
if not ( id and uid ) then
id = name .. "..."
uid = nil
end
peers[#peers+1] = {
online = online,
delay = delay,
name = id,
user = uid,
dynamic = dyn,
nat = nat,
acl = acl,
host = host,
port = port
}
end
end
return peers
end
--- Get informations of given SIP peer
-- @param peer String containing the name of the SIP peer
function sip.peer(peer)
local info = { }
local keys = { }
for line in io.execi("sip show peer " .. peer) do
if #line > 0 then
local key, val = line:match("(.-) *: +(.*)")
if key and val then
key = key:gsub("^ +",""):gsub(" +$", "")
val = val:gsub("^ +",""):gsub(" +$", "")
if key == "* Name" then
key = "Name"
elseif key == "Addr->IP" then
info.address, info.port = val:match("(.+) Port (.+)")
info.port = tonumber(info.port)
elseif key == "Status" then
info.online, info.delay = val:match("(OK) %((%d+) ms%)")
if info.online == 'OK' then
info.online = true
info.delay = tonumber(info.delay)
elseif status ~= 'Unmonitored' then
info.online = false
info.delay = 0
else
info.online = nil
info.delay = 0
end
end
if val == 'Yes' or val == 'yes' or val == '<Set>' then
val = true
elseif val == 'No' or val == 'no' then
val = false
elseif val == '<Not set>' or val == '(none)' then
val = nil
end
keys[#keys+1] = key
info[key] = val
end
end
end
return info, keys
end
--- LuCI Asterisk - Internal helpers
-- @type module
tools = luci.util.class()
--- Convert given value to a list of tokens. Split by white space.
-- @param val String or table value
-- @return Table containing tokens
function tools.parse_list(v)
local tokens = { }
v = type(v) == "table" and v or { v }
for _, v in ipairs(v) do
if type(v) == "string" then
for v in v:gmatch("(%S+)") do
tokens[#tokens+1] = v
end
end
end
return tokens
end
--- Convert given list to a collection of hyperlinks
-- @param list Table of tokens
-- @param url String pattern or callback function to construct urls (optional)
-- @param sep String containing the seperator (optional, default is ", ")
-- @return String containing the html fragment
function tools.hyperlinks(list, url, sep)
local html
local function mkurl(p, t)
if type(p) == "string" then
return p:format(t)
elseif type(p) == "function" then
return p(t)
else
return '#'
end
end
list = list or { }
url = url or "%s"
sep = sep or ", "
for _, token in ipairs(list) do
html = ( html and html .. sep or '' ) ..
'<a href="%s">%s</a>' %{ mkurl(url, token), token }
end
return html or ''
end
--- LuCI Asterisk - International Direct Dialing Prefixes
-- @type module
idd = luci.util.class()
--- Lookup the country name for the given IDD code.
-- @param country String containing IDD code
-- @return String containing the country name
function idd.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[3] == tostring(c) then
return v[1]
end
end
end
--- Lookup the country code for the given IDD code.
-- @param country String containing IDD code
-- @return Table containing the country code(s)
function idd.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
for _, v2 in ipairs(v[3]) do
if v2 == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
elseif v[3] == tostring(c) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Lookup the IDD code(s) for the given country.
-- @param idd String containing the country name
-- @return Table containing the IDD code(s)
function idd.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Populate given CBI field with IDD codes.
-- @param field CBI option object
-- @return (nothing)
function idd.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][3]) == "table"
and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[3]) == "table" then
if v[3][1] == val[1] then
return "_%i" % i
end
else
if v[3] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Country Code Prefixes
-- @type module
cc = luci.util.class()
--- Lookup the country name for the given CC code.
-- @param country String containing CC code
-- @return String containing the country name
function cc.country(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return v[1]
end
end
elseif v[2] == tostring(c) then
return v[1]
end
end
end
--- Lookup the international dialing code for the given CC code.
-- @param cc String containing CC code
-- @return String containing IDD code
function cc.idd(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
for _, v2 in ipairs(v[2]) do
if v2 == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
elseif v[2] == tostring(c) then
return type(v[3]) == "table"
and v[3] or { v[3] }
end
end
end
--- Lookup the CC code(s) for the given country.
-- @param country String containing the country name
-- @return Table containing the CC code(s)
function cc.cc(c)
for _, v in ipairs(cc_idd.CC_IDD) do
if v[1]:lower():match(c:lower()) then
return type(v[2]) == "table"
and v[2] or { v[2] }
end
end
end
--- Populate given CBI field with CC codes.
-- @param field CBI option object
-- @return (nothing)
function cc.cbifill(o)
for i, v in ipairs(cc_idd.CC_IDD) do
o:value("_%i" % i, util.pcdata(v[1]))
end
o.formvalue = function(...)
local val = luci.cbi.Value.formvalue(...)
if val:sub(1,1) == "_" then
val = tonumber((val:gsub("^_", "")))
if val then
return type(cc_idd.CC_IDD[val][2]) == "table"
and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] }
end
end
return val
end
o.cfgvalue = function(...)
local val = luci.cbi.Value.cfgvalue(...)
if val then
val = tools.parse_list(val)
for i, v in ipairs(cc_idd.CC_IDD) do
if type(v[2]) == "table" then
if v[2][1] == val[1] then
return "_%i" % i
end
else
if v[2] == val[1] then
return "_%i" % i
end
end
end
end
return val
end
end
--- LuCI Asterisk - Dialzone
-- @type module
dialzone = luci.util.class()
--- Parse a dialzone section
-- @param zone Table containing the zone info
-- @return Table with parsed information
function dialzone.parse(z)
if z['.name'] then
return {
trunks = tools.parse_list(z.uses),
name = z['.name'],
description = z.description or z['.name'],
addprefix = z.addprefix,
matches = tools.parse_list(z.match),
intlmatches = tools.parse_list(z.international),
countrycode = z.countrycode,
localzone = z.localzone,
localprefix = z.localprefix
}
end
end
--- Get a list of known dial zones
-- @return Associative table of zones and table of zone names
function dialzone.zones()
local zones = { }
local znames = { }
uci:foreach("asterisk", "dialzone",
function(z)
zones[z['.name']] = dialzone.parse(z)
znames[#znames+1] = z['.name']
end)
return zones, znames
end
--- Get a specific dial zone
-- @param name Name of the dial zone
-- @return Table containing zone information
function dialzone.zone(n)
local zone
uci:foreach("asterisk", "dialzone",
function(z)
if z['.name'] == n then
zone = dialzone.parse(z)
end
end)
return zone
end
--- Find uci section hash for given zone number
-- @param idx Zone number
-- @return String containing the uci hash pointing to the section
function dialzone.ucisection(i)
local hash
local index = 1
i = tonumber(i)
uci:foreach("asterisk", "dialzone",
function(z)
if not hash and index == i then
hash = z['.name']
end
index = index + 1
end)
return hash
end
--- LuCI Asterisk - Voicemailbox
-- @type module
voicemail = luci.util.class()
--- Parse a voicemail section
-- @param zone Table containing the mailbox info
-- @return Table with parsed information
function voicemail.parse(z)
if z.number and #z.number > 0 then
local v = {
id = '%s@%s' %{ z.number, z.context or 'default' },
number = z.number,
context = z.context or 'default',
name = z.name or z['.name'] or 'OpenWrt',
zone = z.zone or 'homeloc',
password = z.password or '0000',
email = z.email or '',
page = z.page or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.dialplan and #s.dialplan > 0 and
s.voicebox == v.number
then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known voicemail boxes
-- @return Associative table of boxes and table of box numbers
function voicemail.boxes()
local vboxes = { }
local vnames = { }
uci:foreach("asterisk", "voicemail",
function(z)
local v = voicemail.parse(z)
if v then
local n = '%s@%s' %{ v.number, v.context }
vboxes[n] = v
vnames[#vnames+1] = n
end
end)
return vboxes, vnames
end
--- Get a specific voicemailbox
-- @param number Number of the voicemailbox
-- @return Table containing mailbox information
function voicemail.box(n)
local box
n = n:gsub("@.+$","")
uci:foreach("asterisk", "voicemail",
function(z)
if z.number == tostring(n) then
box = voicemail.parse(z)
end
end)
return box
end
--- Find all voicemailboxes within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to mailbox info
function voicemail.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local boxes = { }
uci:foreach("asterisk", "dialplanvoice",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local box = voicemail.box(s.voicebox)
if box then
boxes[s.extension] = box
end
end
end)
return boxes
end
--- Remove voicemailbox and associated extensions from config
-- @param box Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function voicemail.remove(v, ctx)
ctx = ctx or uci
local box = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box})
local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - MeetMe Conferences
-- @type module
meetme = luci.util.class()
--- Parse a meetme section
-- @param room Table containing the room info
-- @return Table with parsed information
function meetme.parse(r)
if r.room and #r.room > 0 then
local v = {
room = r.room,
pin = r.pin or '',
adminpin = r.adminpin or '',
description = r._description or '',
dialplans = { }
}
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.dialplan and #s.dialplan > 0 and s.room == v.room then
v.dialplans[#v.dialplans+1] = s.dialplan
end
end)
return v
end
end
--- Get a list of known meetme rooms
-- @return Associative table of rooms and table of room numbers
function meetme.rooms()
local mrooms = { }
local mnames = { }
uci:foreach("asterisk", "meetme",
function(r)
local v = meetme.parse(r)
if v then
mrooms[v.room] = v
mnames[#mnames+1] = v.room
end
end)
return mrooms, mnames
end
--- Get a specific meetme room
-- @param number Number of the room
-- @return Table containing room information
function meetme.room(n)
local room
uci:foreach("asterisk", "meetme",
function(r)
if r.room == tostring(n) then
room = meetme.parse(r)
end
end)
return room
end
--- Find all meetme rooms within the given dialplan
-- @param plan Dialplan name or table
-- @return Associative table containing extensions mapped to room info
function meetme.in_dialplan(p)
local plan = type(p) == "string" and p or p.name
local rooms = { }
uci:foreach("asterisk", "dialplanmeetme",
function(s)
if s.extension and #s.extension > 0 and s.dialplan == plan then
local room = meetme.room(s.room)
if room then
rooms[s.extension] = room
end
end
end)
return rooms
end
--- Remove meetme room and associated extensions from config
-- @param room Voicemailbox number or table
-- @param ctx UCI context to use (optional)
-- @return Boolean indicating success
function meetme.remove(v, ctx)
ctx = ctx or uci
local room = type(v) == "string" and v or v.number
local ok1 = ctx:delete_all("asterisk", "meetme", {room=room})
local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room})
return ( ok1 or ok2 ) and true or false
end
--- LuCI Asterisk - Dialplan
-- @type module
dialplan = luci.util.class()
--- Parse a dialplan section
-- @param plan Table containing the plan info
-- @return Table with parsed information
function dialplan.parse(z)
if z['.name'] then
local plan = {
zones = { },
name = z['.name'],
description = z.description or z['.name']
}
-- dialzones
for _, name in ipairs(tools.parse_list(z.include)) do
local zone = dialzone.zone(name)
if zone then
plan.zones[#plan.zones+1] = zone
end
end
-- voicemailboxes
plan.voicemailboxes = voicemail.in_dialplan(plan)
-- meetme conferences
plan.meetmerooms = meetme.in_dialplan(plan)
return plan
end
end
--- Get a list of known dial plans
-- @return Associative table of plans and table of plan names
function dialplan.plans()
local plans = { }
local pnames = { }
uci:foreach("asterisk", "dialplan",
function(p)
plans[p['.name']] = dialplan.parse(p)
pnames[#pnames+1] = p['.name']
end)
return plans, pnames
end
--- Get a specific dial plan
-- @param name Name of the dial plan
-- @return Table containing plan information
function dialplan.plan(n)
local plan
uci:foreach("asterisk", "dialplan",
function(p)
if p['.name'] == n then
plan = dialplan.parse(p)
end
end)
return plan
end

View File

@ -0,0 +1,245 @@
-- Licensed to the public under the Apache License 2.0.
module "luci.asterisk.cc_idd"
CC_IDD = {
-- Country, CC, IDD
{ "Afghanistan", "93", "00" },
{ "Albania", "355", "00" },
{ "Algeria", "213", "00" },
{ "American Samoa", "684", "00" },
{ "Andorra", "376", "00" },
{ "Angola", "244", "00" },
{ "Anguilla", "264", "011" },
{ "Antarctica", "672", "" },
{ "Antigua", "268", "011" },
{ "Argentina", "54", "00" },
{ "Armenia", "374", "00" },
{ "Aruba", "297", "00" },
{ "Ascension Island", "247", "00" },
{ "Australia", "61", "0011" },
{ "Austria", "43", "00" },
{ "Azberbaijan", "994", "00" },
{ "Bahamas", "242", "011" },
{ "Bahrain", "973", "00" },
{ "Bangladesh", "880", "00" },
{ "Barbados", "246", "011" },
{ "Barbuda", "268", "011" },
{ "Belarus", "375", "810" },
{ "Belgium", "32", "00" },
{ "Belize", "501", "00" },
{ "Benin", "229", "00" },
{ "Bermuda", "441", "011" },
{ "Bhutan", "975", "00" },
{ "Bolivia", "591", "00" },
{ "Bosnia", "387", "00" },
{ "Botswana", "267", "00" },
{ "Brazil", "55", "00" },
{ "British Virgin Islands", "284", "011" },
{ "Brunei", "673", "00" },
{ "Bulgaria", "359", "00" },
{ "Burkina Faso", "226", "00" },
{ "Burma (Myanmar)", "95", "00" },
{ "Burundi", "257", "00" },
{ "Cambodia", "855", "001" },
{ "Cameroon", "237", "00" },
{ "Canada", "1", "011" },
{ "Cape Verde Islands", "238", "0" },
{ "Cayman Islands", "345", "011" },
{ "Central African Rep.", "236", "00" },
{ "Chad", "235", "15" },
{ "Chile", "56", "00" },
{ "China", "86", "00" },
{ "Christmas Island", "61", "0011" },
{ "Cocos Islands", "61", "0011" },
{ "Colombia", "57", "00" },
{ "Comoros", "269", "00" },
{ "Congo", "242", "00" },
{ "Congo, Dem. Rep. of", "243", "00" },
{ "Cook Islands", "682", "00" },
{ "Costa Rica", "506", "00" },
{ "Croatia", "385", "00" },
{ "Cuba", "53", "119" },
{ "Cyprus", "357", "00" },
{ "Czech Republic", "420", "00" },
{ "Denmark", "45", "00" },
{ "Diego Garcia", "246", "00" },
{ "Djibouti", "253", "00" },
{ "Dominica", "767", "011" },
{ "Dominican Rep.", "809", "011" },
{ "Ecuador", "593", "00" },
{ "Egypt", "20", "00" },
{ "El Salvador", "503", "00" },
{ "Equatorial Guinea", "240", "00" },
{ "Eritrea", "291", "00" },
{ "Estonia", "372", "00" },
{ "Ethiopia", "251", "00" },
{ "Faeroe Islands", "298", "00" },
{ "Falkland Islands", "500", "00" },
{ "Fiji Islands", "679", "00" },
{ "Finland", "358", "00" },
{ "France", "33", "00" },
{ "French Antilles", "596", "00" },
{ "French Guiana", "594", "00" },
{ "French Polynesia", "689", "00" },
{ "Gabon", "241", "00" },
{ "Gambia", "220", "00" },
{ "Georgia", "995", "810" },
{ "Germany", "49", "00" },
{ "Ghana", "233", "00" },
{ "Gibraltar", "350", "00" },
{ "Greece", "30", "00" },
{ "Greenland", "299", "00" },
{ "Grenada", "473", "011" },
{ "Guadeloupe", "590", "00" },
{ "Guam", "671", "011" },
{ "Guantanamo Bay", "5399", "00" },
{ "Guatemala", "502", "00" },
{ "Guinea", "224", "00" },
{ "Guinea Bissau", "245", "00" },
{ "Guyana", "592", "001" },
{ "Haiti", "509", "00" },
{ "Honduras", "504", "00" },
{ "Hong Kong", "852", "001" },
{ "Hungary", "36", "00" },
{ "Iceland", "354", "00" },
{ "India", "91", "00" },
{ "Indonesia", "62", { "001", "008" } },
{ "Iran", "98", "00" },
{ "Iraq", "964", "00" },
{ "Ireland", "353", "00" },
{ "Israel", "972", "00" },
{ "Italy", "39", "00" },
{ "Ivory Coast", "225", "00" },
{ "Jamaica", "876", "011" },
{ "Japan", "81", "001" },
{ "Jordan", "962", "00" },
{ "Kazakhstan", "7", "810" },
{ "Kenya", "254", "000" },
{ "Kiribati", "686", "00" },
{ "Korea, North", "850", "00" },
{ "Korea, South", "82", "001" },
{ "Kuwait", "965", "00" },
{ "Kyrgyzstan", "996", "00" },
{ "Laos", "856", "00" },
{ "Latvia", "371", "00" },
{ "Lebanon", "961", "00" },
{ "Lesotho", "266", "00" },
{ "Liberia", "231", "00" },
{ "Libya", "218", "00" },
{ "Liechtenstein", "423", "00" },
{ "Lithuania", "370", "00" },
{ "Luxembourg", "352", "00" },
{ "Macau", "853", "00" },
{ "Macedonia", "389", "00" },
{ "Madagascar", "261", "00" },
{ "Malawi", "265", "00" },
{ "Malaysia", "60", "00" },
{ "Maldives", "960", "00" },
{ "Mali", "223", "00" },
{ "Malta", "356", "00" },
{ "Mariana Islands", "670", "011" },
{ "Marshall Islands", "692", "011" },
{ "Martinique", "596", "00" },
{ "Mauritania", "222", "00" },
{ "Mauritius", "230", "00" },
{ "Mayotte Islands", "269", "00" },
{ "Mexico", "52", "00" },
{ "Micronesia", "691", "011" },
{ "Midway Island", "808", "011" },
{ "Moldova", "373", "00" },
{ "Monaco", "377", "00" },
{ "Mongolia", "976", "001" },
{ "Montserrat", "664", "011" },
{ "Morocco", "212", "00" },
{ "Mozambique", "258", "00" },
{ "Myanmar (Burma)", "95", "00" },
{ "Namibia", "264", "00" },
{ "Nauru", "674", "00" },
{ "Nepal", "977", "00" },
{ "Netherlands", "31", "00" },
{ "Netherlands Antilles", "599", "00" },
{ "Nevis", "869", "011" },
{ "New Caledonia", "687", "00" },
{ "New Zealand", "64", "00" },
{ "Nicaragua", "505", "00" },
{ "Niger", "227", "00" },
{ "Nigeria", "234", "009" },
{ "Niue", "683", "00" },
{ "Norfolk Island", "672", "00" },
{ "Norway", "47", "00" },
{ "Oman", "968", "00" },
{ "Pakistan", "92", "00" },
{ "Palau", "680", "011" },
{ "Palestine", "970", "00" },
{ "Panama", "507", "00" },
{ "Papua New Guinea", "675", "05" },
{ "Paraguay", "595", "002" },
{ "Peru", "51", "00" },
{ "Philippines", "63", "00" },
{ "Poland", "48", "00" },
{ "Portugal", "351", "00" },
{ "Puerto Rico", { "787", "939" }, "011" },
{ "Qatar", "974", "00" },
{ "Reunion Island", "262", "00" },
{ "Romania", "40", "00" },
{ "Russia", "7", "810" },
{ "Rwanda", "250", "00" },
{ "St. Helena", "290", "00" },
{ "St. Kitts", "869", "011" },
{ "St. Lucia", "758", "011" },
{ "St. Perre & Miquelon", "508", "00" },
{ "St. Vincent", "784", "011" },
{ "San Marino", "378", "00" },
{ "Sao Tome & Principe", "239", "00" },
{ "Saudi Arabia", "966", "00" },
{ "Senegal", "221", "00" },
{ "Serbia", "381", "99" },
{ "Seychelles", "248", "00" },
{ "Sierra Leone", "232", "00" },
{ "Singapore", "65", "001" },
{ "Slovakia", "421", "00" },
{ "Slovenia", "386", "00" },
{ "Solomon Islands", "677", "00" },
{ "Somalia", "252", "00" },
{ "South Africa", "27", "09" },
{ "Spain", "34", "00" },
{ "Sri Lanka", "94", "00" },
{ "Sudan", "249", "00" },
{ "Suriname", "597", "00" },
{ "Swaziland", "268", "00" },
{ "Sweden", "46", "00" },
{ "Switzerland", "41", "00" },
{ "Syria", "963", "00" },
{ "Taiwan", "886", "002" },
{ "Tajikistan", "992", "810" },
{ "Tanzania", "255", "00" },
{ "Thailand", "66", "001" },
{ "Togo", "228", "00" },
{ "Tonga", "676", "00" },
{ "Trinidad & Tobago", "868", "011" },
{ "Tunisia", "216", "00" },
{ "Turkey", "90", "00" },
{ "Turkmenistan", "993", "810" },
{ "Turks & Caicos", "649", "011" },
{ "Tuvalu", "688", "00" },
{ "Uganda", "256", "000" },
{ "Ukraine", "380", "810" },
{ "United Arab Emirates", "971", "00" },
{ "United Kingdom", "44", "00" },
{ "Uruguay", "598", "00" },
{ "USA", "1", "011" },
{ "US Virgin Islands", "340", "011" },
{ "Uzbekistan", "998", "810" },
{ "Vanuatu", "678", "00" },
{ "Vatican City", "39", "00" },
{ "Venezuela", "58", "00" },
{ "Vietnam", "84", "00" },
{ "Wake Island", "808", "00" },
{ "Wallis & Futuna", "681", "19" },
{ "Western Samoa", "685", "00" },
{ "Yemen", "967", "00" },
{ "Yugoslavia", "381", "99" },
{ "Zambia", "260", "00" },
{ "Zimbabwe", "263", "00" }
}

View File

@ -0,0 +1,194 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.asterisk", package.seeall)
function index()
entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80)
entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1)
entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2)
entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3)
entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4)
entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5)
entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4)
entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1)
entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2)
entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3)
entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4)
entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5)
entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6)
entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7)
entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8)
entry({"admin", "services", "asterisk", "mod", "res", "feature"},
cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 )
entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk"
entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1)
entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true
--entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true
entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2)
entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true
entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3)
entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1)
entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2)
entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4)
entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1)
entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2)
entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5)
entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true
entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true
end
function handle_dialplan()
local uci = luci.model.uci.cursor()
local ast = require "luci.asterisk"
local err = false
for k, v in pairs(luci.http.formvaluetable("delzone")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
local newinc = { }
for _, z in ipairs(plan.zones) do
if z.name ~= v then
newinc[#newinc+1] = z.name
end
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("addzone")) do
local plan = ast.dialplan.plan(k)
local zone = ast.dialzone.zone(v)
if #v > 0 and plan and zone then
local newinc = { zone.name }
for _, z in ipairs(plan.zones) do
newinc[#newinc+1] = z.name
end
uci:delete("asterisk", plan.name, "include")
if #newinc > 0 then
uci:set("asterisk", plan.name, "include", newinc)
end
end
end
for k, v in pairs(luci.http.formvaluetable("delvbox")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanvoice",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addvbox")) do
local plan = ast.dialplan.plan(k)
local vbox = ast.voicemail.box(v)
if plan and vbox then
local vext = luci.http.formvalue("addvboxext.%s" % plan.name)
vext = ( vext and #vext > 0 ) and vext or vbox.number
uci:section("asterisk", "dialplanvoice", nil, {
dialplan = plan.name,
extension = vext,
voicebox = vbox.number,
voicecontext = vbox.context
})
end
end
for k, v in pairs(luci.http.formvaluetable("delmeetme")) do
local plan = ast.dialplan.plan(k)
if #v > 0 and plan then
uci:delete_all("asterisk", "dialplanmeetme",
{ extension=v, dialplan=plan.name })
end
end
for k, v in pairs(luci.http.formvaluetable("addmeetme")) do
local plan = ast.dialplan.plan(k)
local meetme = ast.meetme.room(v)
if plan and meetme then
local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name)
mext = ( mext and #mext > 0 ) and mext or meetme.room
uci:section("asterisk", "dialplanmeetme", nil, {
dialplan = plan.name,
extension = mext,
room = meetme.room
})
end
end
local aname = luci.http.formvalue("addplan")
if aname and #aname > 0 then
if aname:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialplan", aname, { })
else
err = true
end
end
local dname = luci.http.formvalue("delplan")
if dname and #dname > 0 then
if uci:get("asterisk", dname) == "dialplan" then
uci:delete("asterisk", dname)
uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname })
uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname })
end
end
uci:save("asterisk")
ast.uci_resync()
luci.template.render("asterisk/dialplans", { create_error = err })
end
function handle_dialzones()
local ast = require "luci.asterisk"
local uci = luci.model.uci.cursor()
local err = false
if luci.http.formvalue("newzone") then
local name = luci.http.formvalue("newzone_name")
if name and name:match("^[a-zA-Z0-9_]+$") then
uci:section("asterisk", "dialzone", name, {
uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}),
match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {})
})
uci:save("asterisk")
else
err = true
end
end
if luci.http.formvalue("delzone") then
local name = luci.http.formvalue("delzone")
if uci:get("asterisk", name) == "dialzone" then
uci:delete("asterisk", name)
uci:save("asterisk")
end
end
luci.template.render("asterisk/dialzones", { create_error = err })
end

View File

@ -0,0 +1,91 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "")
dialplan.addremove = true
dialplan.dynamic = true
include = dialplan:option(MultiValue, "include", "Include zones and plans", "")
cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end )
dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "")
dialplanexten.anonymous = true
dialplanexten.addremove = true
dialplanexten.dynamic = true
dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "")
dialplangeneral.anonymous = true
dialplangeneral.addremove = true
allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "")
allowtransfer.rmempty = true
canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.rmempty = true
clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "")
clearglobalvars.rmempty = true
dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "")
dialplangoto.anonymous = true
dialplangoto.addremove = true
dialplangoto.dynamic = true
dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "")
dialplanmeetme.anonymous = true
dialplanmeetme.addremove = true
dialplanmeetme.dynamic = true
dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "")
dialplansaytime.anonymous = true
dialplansaytime.addremove = true
dialplansaytime.dynamic = true
dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "")
dialplanvoice.anonymous = true
dialplanvoice.addremove = true
dialplanvoice.dynamic = true
dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "")
dialzone.addremove = true
dialzone.template = "cbi/tblsection"
addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "")
addprefix.rmempty = true
--international = dialzone:option(DynamicList, "international", "Match International prefix", "")
international = dialzone:option(Value, "international", "Match International prefix", "")
international.rmempty = true
localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "")
localprefix.rmempty = true
localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "")
localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end )
match = dialzone:option(Value, "match", "Match plan", "")
match.rmempty = true
uses = dialzone:option(ListValue, "uses", "Connection to use", "")
uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" )
cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end )
cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end )
return cbimap

View File

@ -0,0 +1,49 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
iax = cbimap:section(TypedSection, "iax", "IAX Connection", "")
iax.addremove = true
alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "")
alwaysinternational.optional = true
context = iax:option(ListValue, "context", "Context to use", "")
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
countrycode = iax:option(Value, "countrycode", "Country Code for connection", "")
countrycode.optional = true
extension = iax:option(Value, "extension", "Add as Extension", "")
extension.optional = true
host = iax:option(Value, "host", "Host name (or blank)", "")
host.optional = true
internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "")
internationalprefix.optional = true
prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "")
prefix.optional = true
secret = iax:option(Value, "secret", "Secret", "")
secret.optional = true
timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "")
timeout.optional = true
type = iax:option(ListValue, "type", "Option type", "")
type:value("friend", "Friend (outbound/inbound)")
type:value("user", "User (inbound - authenticate by \"from\")")
type:value("peer", "Peer (outbound - match by host)")
type.optional = true
username = iax:option(Value, "username", "User name", "")
username.optional = true
return cbimap

View File

@ -0,0 +1,22 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "")
audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "")
meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "")
meetme.addremove = true
adminpin = meetme:option(Value, "adminpin", "Admin PIN", "")
adminpin.password = true
pin = meetme:option(Value, "pin", "Meeting PIN", "")
pin.password = true
return cbimap

View File

@ -0,0 +1,391 @@
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
app_alarmreceiver = module:option(ListValue, "app_alarmreceiver", "Alarm Receiver Application", "")
app_alarmreceiver:value("yes", "Load")
app_alarmreceiver:value("no", "Do Not Load")
app_alarmreceiver:value("auto", "Load as Required")
app_alarmreceiver.rmempty = true
app_authenticate = module:option(ListValue, "app_authenticate", "Authentication Application", "")
app_authenticate:value("yes", "Load")
app_authenticate:value("no", "Do Not Load")
app_authenticate:value("auto", "Load as Required")
app_authenticate.rmempty = true
app_cdr = module:option(ListValue, "app_cdr", "Make sure asterisk doesn't save CDR", "")
app_cdr:value("yes", "Load")
app_cdr:value("no", "Do Not Load")
app_cdr:value("auto", "Load as Required")
app_cdr.rmempty = true
app_chanisavail = module:option(ListValue, "app_chanisavail", "Check if channel is available", "")
app_chanisavail:value("yes", "Load")
app_chanisavail:value("no", "Do Not Load")
app_chanisavail:value("auto", "Load as Required")
app_chanisavail.rmempty = true
app_chanspy = module:option(ListValue, "app_chanspy", "Listen in on any channel", "")
app_chanspy:value("yes", "Load")
app_chanspy:value("no", "Do Not Load")
app_chanspy:value("auto", "Load as Required")
app_chanspy.rmempty = true
app_controlplayback = module:option(ListValue, "app_controlplayback", "Control Playback Application", "")
app_controlplayback:value("yes", "Load")
app_controlplayback:value("no", "Do Not Load")
app_controlplayback:value("auto", "Load as Required")
app_controlplayback.rmempty = true
app_cut = module:option(ListValue, "app_cut", "Cuts up variables", "")
app_cut:value("yes", "Load")
app_cut:value("no", "Do Not Load")
app_cut:value("auto", "Load as Required")
app_cut.rmempty = true
app_db = module:option(ListValue, "app_db", "Database access functions", "")
app_db:value("yes", "Load")
app_db:value("no", "Do Not Load")
app_db:value("auto", "Load as Required")
app_db.rmempty = true
app_dial = module:option(ListValue, "app_dial", "Dialing Application", "")
app_dial:value("yes", "Load")
app_dial:value("no", "Do Not Load")
app_dial:value("auto", "Load as Required")
app_dial.rmempty = true
app_dictate = module:option(ListValue, "app_dictate", "Virtual Dictation Machine Application", "")
app_dictate:value("yes", "Load")
app_dictate:value("no", "Do Not Load")
app_dictate:value("auto", "Load as Required")
app_dictate.rmempty = true
app_directed_pickup = module:option(ListValue, "app_directed_pickup", "Directed Call Pickup Support", "")
app_directed_pickup:value("yes", "Load")
app_directed_pickup:value("no", "Do Not Load")
app_directed_pickup:value("auto", "Load as Required")
app_directed_pickup.rmempty = true
app_directory = module:option(ListValue, "app_directory", "Extension Directory", "")
app_directory:value("yes", "Load")
app_directory:value("no", "Do Not Load")
app_directory:value("auto", "Load as Required")
app_directory.rmempty = true
app_disa = module:option(ListValue, "app_disa", "DISA (Direct Inward System Access) Application", "")
app_disa:value("yes", "Load")
app_disa:value("no", "Do Not Load")
app_disa:value("auto", "Load as Required")
app_disa.rmempty = true
app_dumpchan = module:option(ListValue, "app_dumpchan", "Dump channel variables Application", "")
app_dumpchan:value("yes", "Load")
app_dumpchan:value("no", "Do Not Load")
app_dumpchan:value("auto", "Load as Required")
app_dumpchan.rmempty = true
app_echo = module:option(ListValue, "app_echo", "Simple Echo Application", "")
app_echo:value("yes", "Load")
app_echo:value("no", "Do Not Load")
app_echo:value("auto", "Load as Required")
app_echo.rmempty = true
app_enumlookup = module:option(ListValue, "app_enumlookup", "ENUM Lookup", "")
app_enumlookup:value("yes", "Load")
app_enumlookup:value("no", "Do Not Load")
app_enumlookup:value("auto", "Load as Required")
app_enumlookup.rmempty = true
app_eval = module:option(ListValue, "app_eval", "Reevaluates strings", "")
app_eval:value("yes", "Load")
app_eval:value("no", "Do Not Load")
app_eval:value("auto", "Load as Required")
app_eval.rmempty = true
app_exec = module:option(ListValue, "app_exec", "Executes applications", "")
app_exec:value("yes", "Load")
app_exec:value("no", "Do Not Load")
app_exec:value("auto", "Load as Required")
app_exec.rmempty = true
app_externalivr = module:option(ListValue, "app_externalivr", "External IVR application interface", "")
app_externalivr:value("yes", "Load")
app_externalivr:value("no", "Do Not Load")
app_externalivr:value("auto", "Load as Required")
app_externalivr.rmempty = true
app_forkcdr = module:option(ListValue, "app_forkcdr", "Fork The CDR into 2 separate entities", "")
app_forkcdr:value("yes", "Load")
app_forkcdr:value("no", "Do Not Load")
app_forkcdr:value("auto", "Load as Required")
app_forkcdr.rmempty = true
app_getcpeid = module:option(ListValue, "app_getcpeid", "Get ADSI CPE ID", "")
app_getcpeid:value("yes", "Load")
app_getcpeid:value("no", "Do Not Load")
app_getcpeid:value("auto", "Load as Required")
app_getcpeid.rmempty = true
app_groupcount = module:option(ListValue, "app_groupcount", "Group Management Routines", "")
app_groupcount:value("yes", "Load")
app_groupcount:value("no", "Do Not Load")
app_groupcount:value("auto", "Load as Required")
app_groupcount.rmempty = true
app_ices = module:option(ListValue, "app_ices", "Encode and Stream via icecast and ices", "")
app_ices:value("yes", "Load")
app_ices:value("no", "Do Not Load")
app_ices:value("auto", "Load as Required")
app_ices.rmempty = true
app_image = module:option(ListValue, "app_image", "Image Transmission Application", "")
app_image:value("yes", "Load")
app_image:value("no", "Do Not Load")
app_image:value("auto", "Load as Required")
app_image.rmempty = true
app_lookupblacklist = module:option(ListValue, "app_lookupblacklist", "Look up Caller*ID name/number from black", "")
app_lookupblacklist:value("yes", "Load")
app_lookupblacklist:value("no", "Do Not Load")
app_lookupblacklist:value("auto", "Load as Required")
app_lookupblacklist.rmempty = true
app_lookupcidname = module:option(ListValue, "app_lookupcidname", "Look up CallerID Name from local databas", "")
app_lookupcidname:value("yes", "Load")
app_lookupcidname:value("no", "Do Not Load")
app_lookupcidname:value("auto", "Load as Required")
app_lookupcidname.rmempty = true
app_macro = module:option(ListValue, "app_macro", "Extension Macros", "")
app_macro:value("yes", "Load")
app_macro:value("no", "Do Not Load")
app_macro:value("auto", "Load as Required")
app_macro.rmempty = true
app_math = module:option(ListValue, "app_math", "A simple math Application", "")
app_math:value("yes", "Load")
app_math:value("no", "Do Not Load")
app_math:value("auto", "Load as Required")
app_math.rmempty = true
app_md5 = module:option(ListValue, "app_md5", "MD5 checksum Application", "")
app_md5:value("yes", "Load")
app_md5:value("no", "Do Not Load")
app_md5:value("auto", "Load as Required")
app_md5.rmempty = true
app_milliwatt = module:option(ListValue, "app_milliwatt", "Digital Milliwatt (mu-law) Test Application", "")
app_milliwatt:value("yes", "Load")
app_milliwatt:value("no", "Do Not Load")
app_milliwatt:value("auto", "Load as Required")
app_milliwatt.rmempty = true
app_mixmonitor = module:option(ListValue, "app_mixmonitor", "Record a call and mix the audio during the recording", "")
app_mixmonitor:value("yes", "Load")
app_mixmonitor:value("no", "Do Not Load")
app_mixmonitor:value("auto", "Load as Required")
app_mixmonitor.rmempty = true
app_parkandannounce = module:option(ListValue, "app_parkandannounce", "Call Parking and Announce Application", "")
app_parkandannounce:value("yes", "Load")
app_parkandannounce:value("no", "Do Not Load")
app_parkandannounce:value("auto", "Load as Required")
app_parkandannounce.rmempty = true
app_playback = module:option(ListValue, "app_playback", "Trivial Playback Application", "")
app_playback:value("yes", "Load")
app_playback:value("no", "Do Not Load")
app_playback:value("auto", "Load as Required")
app_playback.rmempty = true
app_privacy = module:option(ListValue, "app_privacy", "Require phone number to be entered", "")
app_privacy:value("yes", "Load")
app_privacy:value("no", "Do Not Load")
app_privacy:value("auto", "Load as Required")
app_privacy.rmempty = true
app_queue = module:option(ListValue, "app_queue", "True Call Queueing", "")
app_queue:value("yes", "Load")
app_queue:value("no", "Do Not Load")
app_queue:value("auto", "Load as Required")
app_queue.rmempty = true
app_random = module:option(ListValue, "app_random", "Random goto", "")
app_random:value("yes", "Load")
app_random:value("no", "Do Not Load")
app_random:value("auto", "Load as Required")
app_random.rmempty = true
app_read = module:option(ListValue, "app_read", "Read Variable Application", "")
app_read:value("yes", "Load")
app_read:value("no", "Do Not Load")
app_read:value("auto", "Load as Required")
app_read.rmempty = true
app_readfile = module:option(ListValue, "app_readfile", "Read in a file", "")
app_readfile:value("yes", "Load")
app_readfile:value("no", "Do Not Load")
app_readfile:value("auto", "Load as Required")
app_readfile.rmempty = true
app_realtime = module:option(ListValue, "app_realtime", "Realtime Data Lookup/Rewrite", "")
app_realtime:value("yes", "Load")
app_realtime:value("no", "Do Not Load")
app_realtime:value("auto", "Load as Required")
app_realtime.rmempty = true
app_record = module:option(ListValue, "app_record", "Trivial Record Application", "")
app_record:value("yes", "Load")
app_record:value("no", "Do Not Load")
app_record:value("auto", "Load as Required")
app_record.rmempty = true
app_sayunixtime = module:option(ListValue, "app_sayunixtime", "Say time", "")
app_sayunixtime:value("yes", "Load")
app_sayunixtime:value("no", "Do Not Load")
app_sayunixtime:value("auto", "Load as Required")
app_sayunixtime.rmempty = true
app_senddtmf = module:option(ListValue, "app_senddtmf", "Send DTMF digits Application", "")
app_senddtmf:value("yes", "Load")
app_senddtmf:value("no", "Do Not Load")
app_senddtmf:value("auto", "Load as Required")
app_senddtmf.rmempty = true
app_sendtext = module:option(ListValue, "app_sendtext", "Send Text Applications", "")
app_sendtext:value("yes", "Load")
app_sendtext:value("no", "Do Not Load")
app_sendtext:value("auto", "Load as Required")
app_sendtext.rmempty = true
app_setcallerid = module:option(ListValue, "app_setcallerid", "Set CallerID Application", "")
app_setcallerid:value("yes", "Load")
app_setcallerid:value("no", "Do Not Load")
app_setcallerid:value("auto", "Load as Required")
app_setcallerid.rmempty = true
app_setcdruserfield = module:option(ListValue, "app_setcdruserfield", "CDR user field apps", "")
app_setcdruserfield:value("yes", "Load")
app_setcdruserfield:value("no", "Do Not Load")
app_setcdruserfield:value("auto", "Load as Required")
app_setcdruserfield.rmempty = true
app_setcidname = module:option(ListValue, "app_setcidname", "load => .so ; Set CallerID Name", "")
app_setcidname:value("yes", "Load")
app_setcidname:value("no", "Do Not Load")
app_setcidname:value("auto", "Load as Required")
app_setcidname.rmempty = true
app_setcidnum = module:option(ListValue, "app_setcidnum", "load => .so ; Set CallerID Number", "")
app_setcidnum:value("yes", "Load")
app_setcidnum:value("no", "Do Not Load")
app_setcidnum:value("auto", "Load as Required")
app_setcidnum.rmempty = true
app_setrdnis = module:option(ListValue, "app_setrdnis", "Set RDNIS Number", "")
app_setrdnis:value("yes", "Load")
app_setrdnis:value("no", "Do Not Load")
app_setrdnis:value("auto", "Load as Required")
app_setrdnis.rmempty = true
app_settransfercapability = module:option(ListValue, "app_settransfercapability", "Set ISDN Transfer Capability", "")
app_settransfercapability:value("yes", "Load")
app_settransfercapability:value("no", "Do Not Load")
app_settransfercapability:value("auto", "Load as Required")
app_settransfercapability.rmempty = true
app_sms = module:option(ListValue, "app_sms", "SMS/PSTN handler", "")
app_sms:value("yes", "Load")
app_sms:value("no", "Do Not Load")
app_sms:value("auto", "Load as Required")
app_sms.rmempty = true
app_softhangup = module:option(ListValue, "app_softhangup", "Hangs up the requested channel", "")
app_softhangup:value("yes", "Load")
app_softhangup:value("no", "Do Not Load")
app_softhangup:value("auto", "Load as Required")
app_softhangup.rmempty = true
app_stack = module:option(ListValue, "app_stack", "Stack Routines", "")
app_stack:value("yes", "Load")
app_stack:value("no", "Do Not Load")
app_stack:value("auto", "Load as Required")
app_stack.rmempty = true
app_system = module:option(ListValue, "app_system", "Generic System() application", "")
app_system:value("yes", "Load")
app_system:value("no", "Do Not Load")
app_system:value("auto", "Load as Required")
app_system.rmempty = true
app_talkdetect = module:option(ListValue, "app_talkdetect", "Playback with Talk Detection", "")
app_talkdetect:value("yes", "Load")
app_talkdetect:value("no", "Do Not Load")
app_talkdetect:value("auto", "Load as Required")
app_talkdetect.rmempty = true
app_test = module:option(ListValue, "app_test", "Interface Test Application", "")
app_test:value("yes", "Load")
app_test:value("no", "Do Not Load")
app_test:value("auto", "Load as Required")
app_test.rmempty = true
app_transfer = module:option(ListValue, "app_transfer", "Transfer", "")
app_transfer:value("yes", "Load")
app_transfer:value("no", "Do Not Load")
app_transfer:value("auto", "Load as Required")
app_transfer.rmempty = true
app_txtcidname = module:option(ListValue, "app_txtcidname", "TXTCIDName", "")
app_txtcidname:value("yes", "Load")
app_txtcidname:value("no", "Do Not Load")
app_txtcidname:value("auto", "Load as Required")
app_txtcidname.rmempty = true
app_url = module:option(ListValue, "app_url", "Send URL Applications", "")
app_url:value("yes", "Load")
app_url:value("no", "Do Not Load")
app_url:value("auto", "Load as Required")
app_url.rmempty = true
app_userevent = module:option(ListValue, "app_userevent", "Custom User Event Application", "")
app_userevent:value("yes", "Load")
app_userevent:value("no", "Do Not Load")
app_userevent:value("auto", "Load as Required")
app_userevent.rmempty = true
app_verbose = module:option(ListValue, "app_verbose", "Send verbose output", "")
app_verbose:value("yes", "Load")
app_verbose:value("no", "Do Not Load")
app_verbose:value("auto", "Load as Required")
app_verbose.rmempty = true
app_voicemail = module:option(ListValue, "app_voicemail", "Voicemail", "")
app_voicemail:value("yes", "Load")
app_voicemail:value("no", "Do Not Load")
app_voicemail:value("auto", "Load as Required")
app_voicemail.rmempty = true
app_waitforring = module:option(ListValue, "app_waitforring", "Waits until first ring after time", "")
app_waitforring:value("yes", "Load")
app_waitforring:value("no", "Do Not Load")
app_waitforring:value("auto", "Load as Required")
app_waitforring.rmempty = true
app_waitforsilence = module:option(ListValue, "app_waitforsilence", "Wait For Silence Application", "")
app_waitforsilence:value("yes", "Load")
app_waitforsilence:value("no", "Do Not Load")
app_waitforsilence:value("auto", "Load as Required")
app_waitforsilence.rmempty = true
app_while = module:option(ListValue, "app_while", "While Loops and Conditional Execution", "")
app_while:value("yes", "Load")
app_while:value("no", "Do Not Load")
app_while:value("auto", "Load as Required")
app_while.rmempty = true
return cbimap

View File

@ -0,0 +1,47 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
cdr_csv = module:option(ListValue, "cdr_csv", "Comma Separated Values CDR Backend", "")
cdr_csv:value("yes", "Load")
cdr_csv:value("no", "Do Not Load")
cdr_csv:value("auto", "Load as Required")
cdr_csv.rmempty = true
cdr_custom = module:option(ListValue, "cdr_custom", "Customizable Comma Separated Values CDR Backend", "")
cdr_custom:value("yes", "Load")
cdr_custom:value("no", "Do Not Load")
cdr_custom:value("auto", "Load as Required")
cdr_custom.rmempty = true
cdr_manager = module:option(ListValue, "cdr_manager", "Asterisk Call Manager CDR Backend", "")
cdr_manager:value("yes", "Load")
cdr_manager:value("no", "Do Not Load")
cdr_manager:value("auto", "Load as Required")
cdr_manager.rmempty = true
cdr_mysql = module:option(ListValue, "cdr_mysql", "MySQL CDR Backend", "")
cdr_mysql:value("yes", "Load")
cdr_mysql:value("no", "Do Not Load")
cdr_mysql:value("auto", "Load as Required")
cdr_mysql.rmempty = true
cdr_pgsql = module:option(ListValue, "cdr_pgsql", "PostgreSQL CDR Backend", "")
cdr_pgsql:value("yes", "Load")
cdr_pgsql:value("no", "Do Not Load")
cdr_pgsql:value("auto", "Load as Required")
cdr_pgsql.rmempty = true
cdr_sqlite = module:option(ListValue, "cdr_sqlite", "SQLite CDR Backend", "")
cdr_sqlite:value("yes", "Load")
cdr_sqlite:value("no", "Do Not Load")
cdr_sqlite:value("auto", "Load as Required")
cdr_sqlite.rmempty = true
return cbimap

View File

@ -0,0 +1,45 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
chan_agent = module:option(ListValue, "chan_agent", "Agent Proxy Channel", "")
chan_agent:value("yes", "Load")
chan_agent:value("no", "Do Not Load")
chan_agent:value("auto", "Load as Required")
chan_agent.rmempty = true
chan_alsa = module:option(ListValue, "chan_alsa", "Channel driver for GTalk", "")
chan_alsa:value("yes", "Load")
chan_alsa:value("no", "Do Not Load")
chan_alsa:value("auto", "Load as Required")
chan_alsa.rmempty = true
chan_gtalk = module:option(ListValue, "chan_gtalk", "Channel driver for GTalk", "")
chan_gtalk:value("yes", "Load")
chan_gtalk:value("no", "Do Not Load")
chan_gtalk:value("auto", "Load as Required")
chan_gtalk.rmempty = true
chan_iax2 = module:option(Flag, "chan_iax2", "Option chan_iax2", "")
chan_iax2.rmempty = true
chan_local = module:option(ListValue, "chan_local", "Local Proxy Channel", "")
chan_local:value("yes", "Load")
chan_local:value("no", "Do Not Load")
chan_local:value("auto", "Load as Required")
chan_local.rmempty = true
chan_sip = module:option(ListValue, "chan_sip", "Session Initiation Protocol (SIP)", "")
chan_sip:value("yes", "Load")
chan_sip:value("no", "Do Not Load")
chan_sip:value("auto", "Load as Required")
chan_sip.rmempty = true
return cbimap

View File

@ -0,0 +1,53 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
codec_a_mu = module:option(ListValue, "codec_a_mu", "A-law and Mulaw direct Coder/Decoder", "")
codec_a_mu:value("yes", "Load")
codec_a_mu:value("no", "Do Not Load")
codec_a_mu:value("auto", "Load as Required")
codec_a_mu.rmempty = true
codec_adpcm = module:option(ListValue, "codec_adpcm", "Adaptive Differential PCM Coder/Decoder", "")
codec_adpcm:value("yes", "Load")
codec_adpcm:value("no", "Do Not Load")
codec_adpcm:value("auto", "Load as Required")
codec_adpcm.rmempty = true
codec_alaw = module:option(ListValue, "codec_alaw", "A-law Coder/Decoder", "")
codec_alaw:value("yes", "Load")
codec_alaw:value("no", "Do Not Load")
codec_alaw:value("auto", "Load as Required")
codec_alaw.rmempty = true
codec_g726 = module:option(ListValue, "codec_g726", "ITU G.726-32kbps G726 Transcoder", "")
codec_g726:value("yes", "Load")
codec_g726:value("no", "Do Not Load")
codec_g726:value("auto", "Load as Required")
codec_g726.rmempty = true
codec_gsm = module:option(ListValue, "codec_gsm", "GSM/PCM16 (signed linear) Codec Translation", "")
codec_gsm:value("yes", "Load")
codec_gsm:value("no", "Do Not Load")
codec_gsm:value("auto", "Load as Required")
codec_gsm.rmempty = true
codec_speex = module:option(ListValue, "codec_speex", "Speex/PCM16 (signed linear) Codec Translator", "")
codec_speex:value("yes", "Load")
codec_speex:value("no", "Do Not Load")
codec_speex:value("auto", "Load as Required")
codec_speex.rmempty = true
codec_ulaw = module:option(ListValue, "codec_ulaw", "Mu-law Coder/Decoder", "")
codec_ulaw:value("yes", "Load")
codec_ulaw:value("no", "Do Not Load")
codec_ulaw:value("auto", "Load as Required")
codec_ulaw.rmempty = true
return cbimap

View File

@ -0,0 +1,89 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
format_au = module:option(ListValue, "format_au", "Sun Microsystems AU format (signed linear)", "")
format_au:value("yes", "Load")
format_au:value("no", "Do Not Load")
format_au:value("auto", "Load as Required")
format_au.rmempty = true
format_g723 = module:option(ListValue, "format_g723", "G.723.1 Simple Timestamp File Format", "")
format_g723:value("yes", "Load")
format_g723:value("no", "Do Not Load")
format_g723:value("auto", "Load as Required")
format_g723.rmempty = true
format_g726 = module:option(ListValue, "format_g726", "Raw G.726 (16/24/32/40kbps) data", "")
format_g726:value("yes", "Load")
format_g726:value("no", "Do Not Load")
format_g726:value("auto", "Load as Required")
format_g726.rmempty = true
format_g729 = module:option(ListValue, "format_g729", "Raw G729 data", "")
format_g729:value("yes", "Load")
format_g729:value("no", "Do Not Load")
format_g729:value("auto", "Load as Required")
format_g729.rmempty = true
format_gsm = module:option(ListValue, "format_gsm", "Raw GSM data", "")
format_gsm:value("yes", "Load")
format_gsm:value("no", "Do Not Load")
format_gsm:value("auto", "Load as Required")
format_gsm.rmempty = true
format_h263 = module:option(ListValue, "format_h263", "Raw h263 data", "")
format_h263:value("yes", "Load")
format_h263:value("no", "Do Not Load")
format_h263:value("auto", "Load as Required")
format_h263.rmempty = true
format_jpeg = module:option(ListValue, "format_jpeg", "JPEG (Joint Picture Experts Group) Image", "")
format_jpeg:value("yes", "Load")
format_jpeg:value("no", "Do Not Load")
format_jpeg:value("auto", "Load as Required")
format_jpeg.rmempty = true
format_pcm = module:option(ListValue, "format_pcm", "Raw uLaw 8khz Audio support (PCM)", "")
format_pcm:value("yes", "Load")
format_pcm:value("no", "Do Not Load")
format_pcm:value("auto", "Load as Required")
format_pcm.rmempty = true
format_pcm_alaw = module:option(ListValue, "format_pcm_alaw", "load => .so ; Raw aLaw 8khz PCM Audio support", "")
format_pcm_alaw:value("yes", "Load")
format_pcm_alaw:value("no", "Do Not Load")
format_pcm_alaw:value("auto", "Load as Required")
format_pcm_alaw.rmempty = true
format_sln = module:option(ListValue, "format_sln", "Raw Signed Linear Audio support (SLN)", "")
format_sln:value("yes", "Load")
format_sln:value("no", "Do Not Load")
format_sln:value("auto", "Load as Required")
format_sln.rmempty = true
format_vox = module:option(ListValue, "format_vox", "Dialogic VOX (ADPCM) File Format", "")
format_vox:value("yes", "Load")
format_vox:value("no", "Do Not Load")
format_vox:value("auto", "Load as Required")
format_vox.rmempty = true
format_wav = module:option(ListValue, "format_wav", "Microsoft WAV format (8000hz Signed Line", "")
format_wav:value("yes", "Load")
format_wav:value("no", "Do Not Load")
format_wav:value("auto", "Load as Required")
format_wav.rmempty = true
format_wav_gsm = module:option(ListValue, "format_wav_gsm", "Microsoft WAV format (Proprietary GSM)", "")
format_wav_gsm:value("yes", "Load")
format_wav_gsm:value("no", "Do Not Load")
format_wav_gsm:value("auto", "Load as Required")
format_wav_gsm.rmempty = true
return cbimap

View File

@ -0,0 +1,29 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
func_callerid = module:option(ListValue, "func_callerid", "Caller ID related dialplan functions", "")
func_callerid:value("yes", "Load")
func_callerid:value("no", "Do Not Load")
func_callerid:value("auto", "Load as Required")
func_callerid.rmempty = true
func_enum = module:option(ListValue, "func_enum", "ENUM Functions", "")
func_enum:value("yes", "Load")
func_enum:value("no", "Do Not Load")
func_enum:value("auto", "Load as Required")
func_enum.rmempty = true
func_uri = module:option(ListValue, "func_uri", "URI encoding / decoding functions", "")
func_uri:value("yes", "Load")
func_uri:value("no", "Do Not Load")
func_uri:value("auto", "Load as Required")
func_uri.rmempty = true
return cbimap

View File

@ -0,0 +1,53 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
pbx_ael = module:option(ListValue, "pbx_ael", "Asterisk Extension Language Compiler", "")
pbx_ael:value("yes", "Load")
pbx_ael:value("no", "Do Not Load")
pbx_ael:value("auto", "Load as Required")
pbx_ael.rmempty = true
pbx_config = module:option(ListValue, "pbx_config", "Text Extension Configuration", "")
pbx_config:value("yes", "Load")
pbx_config:value("no", "Do Not Load")
pbx_config:value("auto", "Load as Required")
pbx_config.rmempty = true
pbx_functions = module:option(ListValue, "pbx_functions", "load => .so ; Builtin dialplan functions", "")
pbx_functions:value("yes", "Load")
pbx_functions:value("no", "Do Not Load")
pbx_functions:value("auto", "Load as Required")
pbx_functions.rmempty = true
pbx_loopback = module:option(ListValue, "pbx_loopback", "Loopback Switch", "")
pbx_loopback:value("yes", "Load")
pbx_loopback:value("no", "Do Not Load")
pbx_loopback:value("auto", "Load as Required")
pbx_loopback.rmempty = true
pbx_realtime = module:option(ListValue, "pbx_realtime", "Realtime Switch", "")
pbx_realtime:value("yes", "Load")
pbx_realtime:value("no", "Do Not Load")
pbx_realtime:value("auto", "Load as Required")
pbx_realtime.rmempty = true
pbx_spool = module:option(ListValue, "pbx_spool", "Outgoing Spool Support", "")
pbx_spool:value("yes", "Load")
pbx_spool:value("no", "Do Not Load")
pbx_spool:value("auto", "Load as Required")
pbx_spool.rmempty = true
pbx_wilcalu = module:option(ListValue, "pbx_wilcalu", "Wil Cal U (Auto Dialer)", "")
pbx_wilcalu:value("yes", "Load")
pbx_wilcalu:value("no", "Do Not Load")
pbx_wilcalu:value("auto", "Load as Required")
pbx_wilcalu.rmempty = true
return cbimap

View File

@ -0,0 +1,100 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
featuremap = cbimap:section(TypedSection, "featuremap", "Feature Key maps", "")
featuremap.anonymous = true
featuremap.addremove = true
atxfer = featuremap:option(Value, "atxfer", "Attended transfer key", "")
atxfer.rmempty = true
blindxfer = featuremap:option(Value, "blindxfer", "Blind transfer key", "")
blindxfer.rmempty = true
disconnect = featuremap:option(Value, "disconnect", "Key to Disconnect call", "")
disconnect.rmempty = true
parkcall = featuremap:option(Value, "parkcall", "Key to Park call", "")
parkcall.rmempty = true
featurepark = cbimap:section(TypedSection, "featurepark", "Parking Feature", "")
featurepark.anonymous = true
parkenabled = featurepark:option(Flag, "parkenabled", "Enable Parking", "")
adsipark = featurepark:option(Flag, "adsipark", "ADSI Park", "")
adsipark.rmempty = true
adsipark:depends({ parkenabled = "1" })
atxfernoanswertimeout = featurepark:option(Value, "atxfernoanswertimeout", "Attended transfer timeout (sec)", "")
atxfernoanswertimeout.rmempty = true
atxfernoanswertimeout:depends({ parkenabled = "1" })
automon = featurepark:option(Value, "automon", "One touch record key", "")
automon.rmempty = true
automon:depends({ parkenabled = "1" })
context = featurepark:option(Value, "context", "Name of call context for parking", "")
context.rmempty = true
context:depends({ parkenabled = "1" })
courtesytone = featurepark:option(Value, "courtesytone", "Sound file to play to parked caller", "")
courtesytone.rmempty = true
courtesytone:depends({ parkenabled = "1" })
featuredigittimeout = featurepark:option(Value, "featuredigittimeout", "Max time (ms) between digits for feature activation", "")
featuredigittimeout.rmempty = true
featuredigittimeout:depends({ parkenabled = "1" })
findslot = featurepark:option(ListValue, "findslot", "Method to Find Parking slot", "")
findslot:value("first", "First available slot")
findslot:value("next", "Next free parking space")
findslot.rmempty = true
findslot:depends({ parkenabled = "1" })
parkedmusicclass = featurepark:option(ListValue, "parkedmusicclass", "Music on Hold class for the parked channel", "")
parkedmusicclass.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk" )
parkedmusicclass:depends({ parkenabled = "1" })
cbimap.uci:foreach( "asterisk", "moh", function(s) parkedmusicclass:value(s['.name']) end )
parkedplay = featurepark:option(ListValue, "parkedplay", "Play courtesy tone to", "")
parkedplay:value("caller", "Caller")
parkedplay:value("parked", "Parked user")
parkedplay:value("both", "Both")
parkedplay.rmempty = true
parkedplay:depends({ parkenabled = "1" })
parkext = featurepark:option(Value, "parkext", "Extension to dial to park", "")
parkext.rmempty = true
parkext:depends({ parkenabled = "1" })
parkingtime = featurepark:option(Value, "parkingtime", "Parking time (secs)", "")
parkingtime.rmempty = true
parkingtime:depends({ parkenabled = "1" })
parkpos = featurepark:option(Value, "parkpos", "Range of extensions for call parking", "")
parkpos.rmempty = true
parkpos:depends({ parkenabled = "1" })
pickupexten = featurepark:option(Value, "pickupexten", "Pickup extension", "")
pickupexten.rmempty = true
pickupexten:depends({ parkenabled = "1" })
transferdigittimeout = featurepark:option(Value, "transferdigittimeout", "Seconds to wait between digits when transferring", "")
transferdigittimeout.rmempty = true
transferdigittimeout:depends({ parkenabled = "1" })
xferfailsound = featurepark:option(Value, "xferfailsound", "sound when attended transfer is complete", "")
xferfailsound.rmempty = true
xferfailsound:depends({ parkenabled = "1" })
xfersound = featurepark:option(Value, "xfersound", "Sound when attended transfer fails", "")
xfersound.rmempty = true
xfersound:depends({ parkenabled = "1" })
return cbimap

View File

@ -0,0 +1,77 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
module = cbimap:section(TypedSection, "module", "Modules", "")
module.anonymous = true
res_config_mysql = module:option(ListValue, "res_config_mysql", "MySQL Config Resource", "")
res_config_mysql:value("yes", "Load")
res_config_mysql:value("no", "Do Not Load")
res_config_mysql:value("auto", "Load as Required")
res_config_mysql.rmempty = true
res_config_odbc = module:option(ListValue, "res_config_odbc", "ODBC Config Resource", "")
res_config_odbc:value("yes", "Load")
res_config_odbc:value("no", "Do Not Load")
res_config_odbc:value("auto", "Load as Required")
res_config_odbc.rmempty = true
res_config_pgsql = module:option(ListValue, "res_config_pgsql", "PGSQL Module", "")
res_config_pgsql:value("yes", "Load")
res_config_pgsql:value("no", "Do Not Load")
res_config_pgsql:value("auto", "Load as Required")
res_config_pgsql.rmempty = true
res_crypto = module:option(ListValue, "res_crypto", "Cryptographic Digital Signatures", "")
res_crypto:value("yes", "Load")
res_crypto:value("no", "Do Not Load")
res_crypto:value("auto", "Load as Required")
res_crypto.rmempty = true
res_features = module:option(ListValue, "res_features", "Call Parking Resource", "")
res_features:value("yes", "Load")
res_features:value("no", "Do Not Load")
res_features:value("auto", "Load as Required")
res_features.rmempty = true
res_indications = module:option(ListValue, "res_indications", "Indications Configuration", "")
res_indications:value("yes", "Load")
res_indications:value("no", "Do Not Load")
res_indications:value("auto", "Load as Required")
res_indications.rmempty = true
res_monitor = module:option(ListValue, "res_monitor", "Call Monitoring Resource", "")
res_monitor:value("yes", "Load")
res_monitor:value("no", "Do Not Load")
res_monitor:value("auto", "Load as Required")
res_monitor.rmempty = true
res_musiconhold = module:option(ListValue, "res_musiconhold", "Music On Hold Resource", "")
res_musiconhold:value("yes", "Load")
res_musiconhold:value("no", "Do Not Load")
res_musiconhold:value("auto", "Load as Required")
res_musiconhold.rmempty = true
res_odbc = module:option(ListValue, "res_odbc", "ODBC Resource", "")
res_odbc:value("yes", "Load")
res_odbc:value("no", "Do Not Load")
res_odbc:value("auto", "Load as Required")
res_odbc.rmempty = true
res_smdi = module:option(ListValue, "res_smdi", "SMDI Module", "")
res_smdi:value("yes", "Load")
res_smdi:value("no", "Do Not Load")
res_smdi:value("auto", "Load as Required")
res_smdi.rmempty = true
res_snmp = module:option(ListValue, "res_snmp", "SNMP Module", "")
res_snmp:value("yes", "Load")
res_snmp:value("no", "Do Not Load")
res_snmp:value("auto", "Load as Required")
res_snmp.rmempty = true
return cbimap

View File

@ -0,0 +1,98 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
sip = cbimap:section(TypedSection, "sip", "SIP Connection", "")
sip.addremove = true
alwaysinternational = sip:option(Flag, "alwaysinternational", "Always Dial International", "")
alwaysinternational.optional = true
canreinvite = sip:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.optional = true
context = sip:option(ListValue, "context", "Context to use", "")
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
countrycode = sip:option(Value, "countrycode", "Country Code for connection", "")
countrycode.optional = true
dtmfmode = sip:option(ListValue, "dtmfmode", "DTMF mode", "")
dtmfmode:value("info", "Use RFC2833 or INFO for the BudgeTone")
dtmfmode:value("rfc2833", "Use RFC2833 for the BudgeTone")
dtmfmode:value("inband", "Use Inband (only with ulaw/alaw)")
dtmfmode.optional = true
extension = sip:option(Value, "extension", "Add as Extension", "")
extension.optional = true
fromdomain = sip:option(Value, "fromdomain", "Primary domain identity for From: headers", "")
fromdomain.optional = true
fromuser = sip:option(Value, "fromuser", "From user (required by many SIP providers)", "")
fromuser.optional = true
host = sip:option(Value, "host", "Host name (or blank)", "")
host.optional = true
incoming = sip:option(DynamicList, "incoming", "Ring on incoming dialplan contexts", "")
incoming.optional = true
insecure = sip:option(ListValue, "insecure", "Allow Insecure for", "")
insecure:value("port", "Allow mismatched port number")
insecure:value("invite", "Do not require auth of incoming INVITE")
insecure:value("port,invite", "Allow mismatched port and Do not require auth of incoming INVITE")
insecure.optional = true
internationalprefix = sip:option(Value, "internationalprefix", "International Dial Prefix", "")
internationalprefix.optional = true
mailbox = sip:option(Value, "mailbox", "Mailbox for MWI", "")
mailbox.optional = true
nat = sip:option(Flag, "nat", "NAT between phone and Asterisk", "")
nat.optional = true
pedantic = sip:option(Flag, "pedantic", "Check tags in headers", "")
pedantic.optional = true
port = sip:option(Value, "port", "SIP Port", "")
port.optional = true
prefix = sip:option(Value, "prefix", "Dial Prefix (for external line)", "")
prefix.optional = true
qualify = sip:option(Value, "qualify", "Reply Timeout (ms) for down connection", "")
qualify.optional = true
register = sip:option(Flag, "register", "Register connection", "")
register.optional = true
secret = sip:option(Value, "secret", "Secret", "")
secret.optional = true
selfmailbox = sip:option(Flag, "selfmailbox", "Dial own extension for mailbox", "")
selfmailbox.optional = true
timeout = sip:option(Value, "timeout", "Dial Timeout (sec)", "")
timeout.optional = true
type = sip:option(ListValue, "type", "Client Type", "")
type:value("friend", "Friend (outbound/inbound)")
type:value("user", "User (inbound - authenticate by \"from\")")
type:value("peer", "Peer (outbound - match by host)")
type.optional = true
username = sip:option(Value, "username", "Username", "")
username.optional = true
return cbimap

View File

@ -0,0 +1,41 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
voicegeneral = cbimap:section(TypedSection, "voicegeneral", "Voicemail general options", "")
serveremail = voicegeneral:option(Value, "serveremail", "From Email address of server", "")
voicemail = cbimap:section(TypedSection, "voicemail", "Voice Mail boxes", "")
voicemail.addremove = true
attach = voicemail:option(Flag, "attach", "Email contains attachment", "")
attach.rmempty = true
email = voicemail:option(Value, "email", "Email", "")
email.rmempty = true
name = voicemail:option(Value, "name", "Display Name", "")
name.rmempty = true
password = voicemail:option(Value, "password", "Password", "")
password.rmempty = true
zone = voicemail:option(ListValue, "zone", "Voice Zone", "")
cbimap.uci:foreach( "asterisk", "voicezone", function(s) zone:value(s['.name']) end )
voicezone = cbimap:section(TypedSection, "voicezone", "Voice Zone settings", "")
voicezone.addremove = true
message = voicezone:option(Value, "message", "Message Format", "")
message.rmempty = true
zone = voicezone:option(Value, "zone", "Time Zone", "")
zone.rmempty = true
return cbimap

View File

@ -0,0 +1,151 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Licensed to the public under the Apache License 2.0.
cbimap = Map("asterisk", "asterisk", "")
asterisk = cbimap:section(TypedSection, "asterisk", "Asterisk General Options", "")
asterisk.anonymous = true
agidir = asterisk:option(Value, "agidir", "AGI directory", "")
agidir.rmempty = true
cache_record_files = asterisk:option(Flag, "cache_record_files", "Cache recorded sound files during recording", "")
cache_record_files.rmempty = true
debug = asterisk:option(Value, "debug", "Debug Level", "")
debug.rmempty = true
dontwarn = asterisk:option(Flag, "dontwarn", "Disable some warnings", "")
dontwarn.rmempty = true
dumpcore = asterisk:option(Flag, "dumpcore", "Dump core on crash", "")
dumpcore.rmempty = true
highpriority = asterisk:option(Flag, "highpriority", "High Priority", "")
highpriority.rmempty = true
initcrypto = asterisk:option(Flag, "initcrypto", "Initialise Crypto", "")
initcrypto.rmempty = true
internal_timing = asterisk:option(Flag, "internal_timing", "Use Internal Timing", "")
internal_timing.rmempty = true
logdir = asterisk:option(Value, "logdir", "Log directory", "")
logdir.rmempty = true
maxcalls = asterisk:option(Value, "maxcalls", "Maximum number of calls allowed", "")
maxcalls.rmempty = true
maxload = asterisk:option(Value, "maxload", "Maximum load to stop accepting new calls", "")
maxload.rmempty = true
nocolor = asterisk:option(Flag, "nocolor", "Disable console colors", "")
nocolor.rmempty = true
record_cache_dir = asterisk:option(Value, "record_cache_dir", "Sound files Cache directory", "")
record_cache_dir.rmempty = true
record_cache_dir:depends({ ["cache_record_files"] = "true" })
rungroup = asterisk:option(Flag, "rungroup", "The Group to run as", "")
rungroup.rmempty = true
runuser = asterisk:option(Flag, "runuser", "The User to run as", "")
runuser.rmempty = true
spooldir = asterisk:option(Value, "spooldir", "Voicemail Spool directory", "")
spooldir.rmempty = true
systemname = asterisk:option(Value, "systemname", "Prefix UniquID with system name", "")
systemname.rmempty = true
transcode_via_sln = asterisk:option(Flag, "transcode_via_sln", "Build transcode paths via SLINEAR, not directly", "")
transcode_via_sln.rmempty = true
transmit_silence_during_record = asterisk:option(Flag, "transmit_silence_during_record", "Transmit SLINEAR silence while recording a channel", "")
transmit_silence_during_record.rmempty = true
verbose = asterisk:option(Value, "verbose", "Verbose Level", "")
verbose.rmempty = true
zone = asterisk:option(Value, "zone", "Time Zone", "")
zone.rmempty = true
hardwarereboot = cbimap:section(TypedSection, "hardwarereboot", "Reload Hardware Config", "")
method = hardwarereboot:option(ListValue, "method", "Reboot Method", "")
method:value("web", "Web URL (wget)")
method:value("system", "program to run")
method.rmempty = true
param = hardwarereboot:option(Value, "param", "Parameter", "")
param.rmempty = true
iaxgeneral = cbimap:section(TypedSection, "iaxgeneral", "IAX General Options", "")
iaxgeneral.anonymous = true
iaxgeneral.addremove = true
allow = iaxgeneral:option(MultiValue, "allow", "Allow Codecs", "")
allow:value("alaw", "alaw")
allow:value("gsm", "gsm")
allow:value("g726", "g726")
allow.rmempty = true
canreinvite = iaxgeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
canreinvite:value("yes", "Yes")
canreinvite:value("nonat", "Yes when not behind NAT")
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
canreinvite:value("no", "No")
canreinvite.rmempty = true
static = iaxgeneral:option(Flag, "static", "Static", "")
static.rmempty = true
writeprotect = iaxgeneral:option(Flag, "writeprotect", "Write Protect", "")
writeprotect.rmempty = true
sipgeneral = cbimap:section(TypedSection, "sipgeneral", "Section sipgeneral", "")
sipgeneral.anonymous = true
sipgeneral.addremove = true
allow = sipgeneral:option(MultiValue, "allow", "Allow codecs", "")
allow:value("ulaw", "ulaw")
allow:value("alaw", "alaw")
allow:value("gsm", "gsm")
allow:value("g726", "g726")
allow.rmempty = true
port = sipgeneral:option(Value, "port", "SIP Port", "")
port.rmempty = true
realm = sipgeneral:option(Value, "realm", "SIP realm", "")
realm.rmempty = true
moh = cbimap:section(TypedSection, "moh", "Music On Hold", "")
application = moh:option(Value, "application", "Application", "")
application.rmempty = true
application:depends({ ["asterisk.moh.mode"] = "custom" })
directory = moh:option(Value, "directory", "Directory of Music", "")
directory.rmempty = true
mode = moh:option(ListValue, "mode", "Option mode", "")
mode:value("system", "program to run")
mode:value("files", "Read files from directory")
mode:value("quietmp3", "Quite MP3")
mode:value("mp3", "Loud MP3")
mode:value("mp3nb", "unbuffered MP3")
mode:value("quietmp3nb", "Quiet Unbuffered MP3")
mode:value("custom", "Run a custom application")
mode.rmempty = true
random = moh:option(Flag, "random", "Random Play", "")
random.rmempty = true
return cbimap

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