diff --git a/.buildpath b/.buildpath new file mode 100644 index 00000000..81fa6469 --- /dev/null +++ b/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/.cproject b/.cproject new file mode 100644 index 00000000..e1a47741 --- /dev/null +++ b/.cproject @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..07494e98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +dist/ +/host +*.o +*.so +*.swp +*.po~ +/docs +modules/luci-base/src/po2lmo diff --git a/.project b/.project new file mode 100644 index 00000000..11b398b2 --- /dev/null +++ b/.project @@ -0,0 +1,78 @@ + + + luci + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.cnature + org.eclipse.dltk.lua.core.nature + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..e4edf0c1 --- /dev/null +++ b/CONTRIBUTING.md @@ -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 ) + +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. + diff --git a/LICENSE b/LICENSE index f288702d..f49a4e16 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,201 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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. - - - Copyright (C) - - 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 . - -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: - - Copyright (C) - 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 -. - - 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 -. + 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. \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..47e19692 --- /dev/null +++ b/NOTICE @@ -0,0 +1,9 @@ +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 Jo-Philipp Wich +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 diff --git a/README.md b/README.md new file mode 100644 index 00000000..48863a45 --- /dev/null +++ b/README.md @@ -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. diff --git a/THANKYOU b/THANKYOU new file mode 100644 index 00000000..f0519bd8 --- /dev/null +++ b/THANKYOU @@ -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 + diff --git a/applications/luci-app-adblock/Makefile b/applications/luci-app-adblock/Makefile new file mode 100644 index 00000000..2de2ed86 --- /dev/null +++ b/applications/luci-app-adblock/Makefile @@ -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 diff --git a/applications/luci-app-adblock/luasrc/controller/adblock.lua b/applications/luci-app-adblock/luasrc/controller/adblock.lua new file mode 100644 index 00000000..10110666 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/controller/adblock.lua @@ -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 diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua new file mode 100644 index 00000000..86ebdd0e --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua @@ -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 (> 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).
", 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 diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua new file mode 100644 index 00000000..1d89485e --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua @@ -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 diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua new file mode 100644 index 00000000..3f396229 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua @@ -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 " + .. "" + .. "check the online documentation", "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.
") + .. 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.
") + .. 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("Caution: 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 (< 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 & list processing in parallel (default '4').
") + .. 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.
") + .. 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 ≤ 0.
") + .. 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),
") + .. 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 diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua new file mode 100644 index 00000000..e5a05cf4 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua @@ -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 (> 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).
", 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 diff --git a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm new file mode 100644 index 00000000..b4b62db5 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm @@ -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 +-%> + + + +
+ <% if self.title then -%> + <%=self.title%> + <%- end %> +
<%=self.description%>
+
+ + + <%- if self.sectionhead then -%> + + <%- else -%> + + <%- end -%> + <%- for i, k in pairs(self.children) do -%> + + <%- end -%> + + <%- local isempty = true + for i, k in ipairs(self:cfgsections()) do + section = k + isempty = false + scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } + -%> + + + <%- + for k, node in ipairs(self.children) do + node:render(section, scope or {}) + end + if not scope.cbid:match("adb_src_cat") then + -%> + + <%- end -%> + + <%- end -%> +
<%=self.sectionhead%> > + <%-=k.title-%> +
<%=k%> 
+
+
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm new file mode 100644 index 00000000..2233a15e --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm @@ -0,0 +1,13 @@ + diff --git a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm new file mode 100644 index 00000000..082ec806 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm @@ -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%> + +
+
+
<%:This form shows the syslog output, pre-filtered for adblock related messages only.%>
+ +
+
+ + + +<%+footer%> diff --git a/applications/luci-app-adblock/luasrc/view/adblock/query.htm b/applications/luci-app-adblock/luasrc/view/adblock/query.htm new file mode 100644 index 00000000..8bbc9266 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/query.htm @@ -0,0 +1,65 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +This is free software, licensed under the Apache License, Version 2.0 +-%> + +<%+header%> + + + + +
+
+
+
<%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%>
+
+ + +
+
+
+
+
+ +
+ +<%+footer%> diff --git a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm new file mode 100644 index 00000000..c01d9a5c --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm @@ -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%> + + + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po new file mode 100644 index 00000000..0a1b65ac --- /dev/null +++ b/applications/luci-app-adblock/po/it/adblock.po @@ -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 \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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "" +"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili " +"nella sezione 'Avanzato'.
" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +msgstr "" +"Lista dei backend DNS supportati con la loro directory di default di esporto " +"della lista.
" + +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in " +"parallel (default '4').
" +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 (> 512 KB)." +msgstr "" +"La grandezza del file è troppo grande per modificarla online in LuCI (> " +"512 KB)." + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" +"Questo form ti consente di modificare il contenuto della lista nera di " +"adblock (%s).
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "" +"Questo form ti consente di modificare il contenuto della lista bianca di " +"adblock (%s).
" + +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 (< 64 MB RAM)" +#~ msgstr "" +#~ "Attiva l'ordinamento globale / rimozione duplicati stressante per la " +#~ "memoria su dispositivi con poca memoria (< 64 MB RAM)" + +#~ msgid "" +#~ "For further information see online " +#~ "documentation" +#~ msgstr "" +#~ "Per ulteriori informazioni vedi " +#~ "documentazione online" + +#~ msgid "" +#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing " +#~ "config file or download a fresh default config from here" +#~ msgstr "" +#~ "In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-" +#~ "esistente file di configurazione o scarica una nuova configurazione di " +#~ "default da qui" + +#~ msgid "" +#~ "List of available network interfaces. By default the startup will be " +#~ "triggered by the 'wan' interface.
" +#~ msgstr "" +#~ "Lista delle interfacce di rete disponibili. Per default l'avvio sarà " +#~ "innescato dall'interfaccia 'wan'.
" + +#~ 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." diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po new file mode 100644 index 00000000..dfd72cbf --- /dev/null +++ b/applications/luci-app-adblock/po/ja/adblock.po @@ -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 \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.
" +msgstr "" +"ホワイトリストに存在しない全ドメインへのアクセスをブロックするために、追加で " +"'Jail' リスト (/tmp/adb_list.jail) を作成します。
" + +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 here" +msgstr "" +"opkg でパッケージをインストールする際に '--force-maintainer' オプションを使用" +"して既存の設定ファイルを上書きするか、 ここ" +" からデフォルトの設定ファイルをダウンロードしてください。" + +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 " +"(< 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 check the online " +"documentation" +msgstr "" +"詳細な情報は オンライン ドキュメント を" +"確認してください。" + +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.
" +msgstr "" +"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション" +"で設定することができます。
" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" +"利用可能なネットワーク インターフェースの一覧です。通常、 'wan' インター" +"フェースによりスタートアップがトリガされます。
" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +msgstr "" +"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク" +"トリのリストです
" + +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.
" +msgstr "" +"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。" +"
" + +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),
" +msgstr "" +"メール通知を行うドメイン カウントの下限を設定します。全体カウントが指定された" +"値以下の場合、メールを受け取ります(規定値: 0)。
" + +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 " +"≤ 0.
" +msgstr "" +"処理エラーまたはドメイン カウントが0以下の場合、メールを送信します。
" + +msgid "" +"Size of the download queue to handle downloads & list processing in " +"parallel (default '4').
" +msgstr "" +"ダウンロードの制御とリストの処理を同時並行的に行うダウンロード キューのサイズ" +"です(既定値: '4')。
" + +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 (> 512 KB)." +msgstr "" +"ファイル サイズが大きすぎる(512 KB超)ため、 LuCI 上でオンライン編集できませ" +"ん。" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" +"このフォームでは、Adblock ブラックリスト (%s) の内容を変更することができま" +"す。
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "" +"このフォームでは、Adblock ホワイトリスト (%s) の内容を変更することができま" +"す。
" + +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 "実行中" diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po new file mode 100644 index 00000000..c0d9d816 --- /dev/null +++ b/applications/luci-app-adblock/po/pt-br/adblock.po @@ -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 \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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in " +"parallel (default '4').
" +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 (> 512 KB)." +msgstr "" +"O tamanho do arquivo é muito grande para edição online no LuCI (> 512 KB)." + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" +"Esse formulário permite que você modifique o conteúdo das listas de bloqueio " +"do adblock (%s).
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "" +"Esse formulário permite que você modifique o conteúdo das listas de " +"permissão do adblock (%s).
" + +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 (< 64 MB RAM)" +#~ msgstr "" +#~ "Ativar tipo geral intenso de memória / duplicar remoção em dispositivos " +#~ "com pouca memória (< 64 MB RAM)" + +#~ msgid "" +#~ "For further information see online " +#~ "documentation" +#~ msgstr "" +#~ "Para outras informações veja a " +#~ "documentação online" + +#~ 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" diff --git a/applications/luci-app-adblock/po/ru/adblock.po b/applications/luci-app-adblock/po/ru/adblock.po new file mode 100644 index 00000000..17f39fdd --- /dev/null +++ b/applications/luci-app-adblock/po/ru/adblock.po @@ -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 \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 "Создание Черного
списка '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.
" +msgstr "" +"Создать дополнительный Черный список 'Jail' (/tmp/adb_list.jail), чтобы " +"заблокировать доступ ко всем доменам, кроме тех что перечислены в файле " +"Белого списка.
" + +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 here" +msgstr "" +"Устанавливая пакет с помощью opkg, используйте '--force-maintainer', чтобы " +"перезаписать существующий config файл или загрузить новый дефолтный config " +"файл здесь" + +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 "Включить сохранение
списка блокировок" + +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB free RAM)" +msgstr "" +"Включите полную сортировку / удаление дубликатов памяти на устройствах с " +"низким объемом памяти (< 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 check the online " +"documentation" +msgstr "" +"
Для получения дополнительной информации смотрите онлайн документацию." + +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.
" +msgstr "" +"Список URL-адресов и настройка списка использования, настраиваются на " +"странице 'Дополнительно'.
" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" +"Список доступных сетевых интерфейсов. По умолчанию установлен 'wan' " +"интерфейс.
" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +msgstr "" +"Список поддерживаемых серверов DNS перемещается в папку по умолчанию.
" + +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.
" +msgstr "Обновите config файл Adblock, чтобы использовать этот пакет.
" + +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),
" +msgstr "" +"Увеличьте количество уведомлений по email, чтобы получить сообщения, если " +"общее количество меньше или равно заданному пределу (по умолчанию 0),
" + +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 " +"≤ 0.
" +msgstr "" +"Отправлять по email уведомления в случае ошибки обработки или если домен " +"≤ 0.
" + +msgid "" +"Size of the download queue to handle downloads & list processing in " +"parallel (default '4').
" +msgstr "" +"Значение очереди загрузки для выполнения параллельных загрузок (по умолчанию " +"'4').
" + +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 (> 512 KB)." +msgstr "" +"Размер файла слишком большой, для онлайн редактирования в LuCI (> 512 KB)." + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" +"Страница позволяет изменять содержимое Черного списка Adblock (%s).
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "" +"Страница позволяет изменять содержимое Белого списка Adblock (%s).
" + +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 "Подробное ведение
журнала отладки" + +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 "работает" diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po new file mode 100644 index 00000000..d875a69f --- /dev/null +++ b/applications/luci-app-adblock/po/sv/adblock.po @@ -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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in parallel " +"(default '4').
" +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 (> 512 KB)." +msgstr "Filstorleken är för stor för online-redigering i LuCi (> 512 KB)." + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" +"Det här formuläret tillåter dig att förändra innehållet i adblock's " +"svartlista (%s).
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "" +"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista " +"(%s).
" + +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 see online " +#~ "documentation" +#~ msgstr "" +#~ "För mer information se dokumentationen " +#~ "på internet" + +#~ 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" diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot new file mode 100644 index 00000000..6fbaa652 --- /dev/null +++ b/applications/luci-app-adblock/po/templates/adblock.pot @@ -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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in " +"parallel (default '4').
" +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 (> 512 KB)." +msgstr "" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +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 "" diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po new file mode 100644 index 00000000..e26c44c4 --- /dev/null +++ b/applications/luci-app-adblock/po/zh-cn/adblock.po @@ -0,0 +1,371 @@ +# liushuyu , 2017. +# Yangfl , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-10-28 16:06+0800\n" +"Last-Translator: Yangfl \n" +"Language-Team: \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: 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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "列表 URL 和 Shallalist 类别选择可在“高级”选项卡中配置。
" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +msgstr "支持的 DNS 后端列表及其默认列表导出目录。
" + +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in parallel " +"(default '4').
" +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 (> 512 KB)." +msgstr "文件大小太大,无法在 LuCI(> 512 KB)中进行在线编辑。" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "此表单允许您修改 adblock 黑名单(%s)的内容。
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "此表单允许您修改 adblock 白名单(%s)的内容。
" + +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 "" + diff --git a/applications/luci-app-adblock/po/zh-tw/adblock.po b/applications/luci-app-adblock/po/zh-tw/adblock.po new file mode 100644 index 00000000..417fc6bc --- /dev/null +++ b/applications/luci-app-adblock/po/zh-tw/adblock.po @@ -0,0 +1,371 @@ +# liushuyu , 2017. +# Yangfl , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-10-28 16:06+0800\n" +"Last-Translator: Yangfl \n" +"Language-Team: \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.
" +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 here" +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 " +"(< 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 check the online " +"documentation" +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.
" +msgstr "列表 URL 和 Shallalist 類別選擇可在“高階”選項卡中配置。
" + +msgid "" +"List of available network interfaces. Usually the startup will be triggered " +"by the 'wan' interface.
" +msgstr "" + +msgid "" +"List of supported DNS backends with their default list export directory.
" +msgstr "支援的 DNS 後端列表及其預設列表匯出目錄。
" + +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.
" +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),
" +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 " +"≤ 0.
" +msgstr "" + +msgid "" +"Size of the download queue to handle downloads & list processing in parallel " +"(default '4').
" +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 (> 512 KB)." +msgstr "檔案大小太大,無法在 LuCI(> 512 KB)中進行線上編輯。" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"
" +msgstr "此表單允許您修改 adblock 黑名單(%s)的內容。
" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"
" +msgstr "此表單允許您修改 adblock 白名單(%s)的內容。
" + +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 "" + diff --git a/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock b/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock new file mode 100755 index 00000000..1f7fb1c0 --- /dev/null +++ b/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock @@ -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 diff --git a/applications/luci-app-advanced-reboot/Makefile b/applications/luci-app-advanced-reboot/Makefile new file mode 100644 index 00000000..d2704983 --- /dev/null +++ b/applications/luci-app-advanced-reboot/Makefile @@ -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 + +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 diff --git a/applications/luci-app-advanced-reboot/README.md b/applications/luci-app-advanced-reboot/README.md new file mode 100644 index 00000000..d4659c8d --- /dev/null +++ b/applications/luci-app-advanced-reboot/README.md @@ -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. diff --git a/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua new file mode 100644 index 00000000..b5dd4fe0 --- /dev/null +++ b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua @@ -0,0 +1,205 @@ +-- Copyright 2017 Stan Grishin +-- 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.
DO NOT POWER OFF THE DEVICE!
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.
DO NOT POWER OFF THE DEVICE!
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.
DO NOT POWER OFF THE DEVICE!
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 diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm new file mode 100644 index 00000000..0629c84b --- /dev/null +++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm @@ -0,0 +1,96 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Copyright 2017 Stan Grishin + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Advanced Reboot%>

+
+ +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> +

<%:Warning: There are unsaved changes that will get lost on reboot!%>

+<%- end -%> + +<%- if errorMessage and errorMessage ~= "" then -%> +

<%:ERROR: %><%=errorMessage%>

+<%- end -%> + +<%- if device_name then -%> +
+ <%=device_name%><%: Partitions%> + + + + + + + + + + + + + + + + + + + +
<%:Partition%><%:Status%><%:Firmware/OS (Kernel)%><%:Action%>
+ <%=string.format("%X", boot_envvar1_partition_one)%> + + <%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%> + + <%=partition_one_os%> + + <%- if boot_envvar1_partition_one == current_partition then -%> +
+ + +
+ <%- else -%> +
+ + +
+ <%- end -%> +
+ <%=string.format("%X", boot_envvar1_partition_two)%> + + <%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%> + + <%=partition_two_os%> + + <%- if boot_envvar1_partition_two == current_partition then -%> +
+ + +
+ <%- else -%> +
+ + +
+ <%- end -%> +
+
+<%- else -%> +

<%:Warning: This system does not have two partitions!%>

+<%- end -%> + +
+ +<%- if nixio.fs.access("/sbin/poweroff") then -%> +
+ + +
+<%- else -%> +

<%:Warning: This system does not support powering off!%>

+<%- end -%> + +<%+footer%> diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm new file mode 100644 index 00000000..63259340 --- /dev/null +++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm @@ -0,0 +1,29 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2009 Jo-Philipp Wich + Copyright 2017 Stan Grishin + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Reboot Device to an Alternative Partition%> - <%:Confirm%>

+

+ <%_ WARNING: An alternative partition might have its own settings and completely different firmware.

+ 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.

+ 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.

+ Click "Proceed" below to reboot device to an alternative partition. %> +

+ +
+
+ + + + +
+
+ +<%+footer%> diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm new file mode 100644 index 00000000..0ddea11e --- /dev/null +++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm @@ -0,0 +1,25 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2009 Jo-Philipp Wich + Copyright 2017 Stan Grishin + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Power Off Device%> - <%:Confirm%>

+

+ <%_ WARNING: Power off might result in a reboot on a device which doesn't support power off.

+ Click "Proceed" below to power off your device. %> +

+ +
+
+ + + + +
+
+ +<%+footer%> diff --git a/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po b/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po new file mode 100644 index 00000000..75d46367 --- /dev/null +++ b/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po @@ -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 \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.
DO NOT POWER OFF THE DEVICE!
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.
DO NOT POWER " +"OFF THE DEVICE!
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.
DO NOT POWER OFF THE DEVICE!
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 "Невозможно найти 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.

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.

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.

Click \"Proceed\" below " +"to reboot device to an alternative partition." +msgstr "" +"ВНИМАНИЕ: альтернативный раздел может иметь собственные настройки и " +"совершенно другую прошивку.

Поскольку ваши настройки сети и WiFi " +"SSID/пароли на альтернативных разделах могут отличаться, может потребоваться " +"изменить настройки компьютера, чтобы иметь возможность получить доступ к " +"устройству после перезагрузки .

Помните также, что " +"альтернативный раздел с прошивкой может не обеспечить простой способ " +"переключения активного раздела и загрузки обратно в текущий активный раздел." +"

Нажмите \"Продолжить\" ниже, чтобы перезагрузить устройство в " +"альтернативный раздел." + +msgid "" +"WARNING: Power off might result in a reboot on a device which doesn't " +"support power off.

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 "" diff --git a/applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po new file mode 100644 index 00000000..e0e13cfd --- /dev/null +++ b/applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po @@ -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.
DO NOT POWER OFF THE DEVICE!
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.
DO NOT POWER " +"OFF THE DEVICE!
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.
DO NOT POWER OFF THE DEVICE!
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.
STÄNG INTE AV ENHETEN!
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.

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.

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.

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.

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.

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 "" diff --git a/applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot b/applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot new file mode 100644 index 00000000..47a81e1d --- /dev/null +++ b/applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot @@ -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.
DO NOT POWER OFF THE DEVICE!
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.
DO NOT POWER " +"OFF THE DEVICE!
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.
DO NOT POWER OFF THE DEVICE!
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.

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.

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.

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.

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 "" diff --git a/applications/luci-app-ahcp/Makefile b/applications/luci-app-ahcp/Makefile new file mode 100644 index 00000000..bb4d4158 --- /dev/null +++ b/applications/luci-app-ahcp/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# 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 diff --git a/applications/luci-app-ahcp/luasrc/controller/ahcp.lua b/applications/luci-app-ahcp/luasrc/controller/ahcp.lua new file mode 100644 index 00000000..e97da558 --- /dev/null +++ b/applications/luci-app-ahcp/luasrc/controller/ahcp.lua @@ -0,0 +1,49 @@ +-- Copyright 2011 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua b/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua new file mode 100644 index 00000000..30897ebf --- /dev/null +++ b/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua @@ -0,0 +1,110 @@ +-- Copyright 2011 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm b/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm new file mode 100644 index 00000000..ef4cfca5 --- /dev/null +++ b/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm @@ -0,0 +1 @@ +<%+ahcp_status%> diff --git a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm new file mode 100644 index 00000000..94682895 --- /dev/null +++ b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm @@ -0,0 +1,53 @@ + + +
+ <%:Active AHCP Leases%> +

+ + + + + + + + +
<%:Address%><%:Age%>

<%:Collecting data...%>
+
diff --git a/applications/luci-app-ahcp/po/ca/ahcp.po b/applications/luci-app-ahcp/po/ca/ahcp.po new file mode 100644 index 00000000..89108fd7 --- /dev/null +++ b/applications/luci-app-ahcp/po/ca/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/cs/ahcp.po b/applications/luci-app-ahcp/po/cs/ahcp.po new file mode 100644 index 00000000..0a9e0afa --- /dev/null +++ b/applications/luci-app-ahcp/po/cs/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/de/ahcp.po b/applications/luci-app-ahcp/po/de/ahcp.po new file mode 100644 index 00000000..6df34d8d --- /dev/null +++ b/applications/luci-app-ahcp/po/de/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/el/ahcp.po b/applications/luci-app-ahcp/po/el/ahcp.po new file mode 100644 index 00000000..0d7d6bd7 --- /dev/null +++ b/applications/luci-app-ahcp/po/el/ahcp.po @@ -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 \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 "Αρχείο μοναδικού αναγνωριστικού" diff --git a/applications/luci-app-ahcp/po/en/ahcp.po b/applications/luci-app-ahcp/po/en/ahcp.po new file mode 100644 index 00000000..4ad2ab27 --- /dev/null +++ b/applications/luci-app-ahcp/po/en/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/es/ahcp.po b/applications/luci-app-ahcp/po/es/ahcp.po new file mode 100644 index 00000000..512606a1 --- /dev/null +++ b/applications/luci-app-ahcp/po/es/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/fr/ahcp.po b/applications/luci-app-ahcp/po/fr/ahcp.po new file mode 100644 index 00000000..11635180 --- /dev/null +++ b/applications/luci-app-ahcp/po/fr/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/he/ahcp.po b/applications/luci-app-ahcp/po/he/ahcp.po new file mode 100644 index 00000000..1c45cc85 --- /dev/null +++ b/applications/luci-app-ahcp/po/he/ahcp.po @@ -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 \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 "קובץ מזהה יחודי" diff --git a/applications/luci-app-ahcp/po/hu/ahcp.po b/applications/luci-app-ahcp/po/hu/ahcp.po new file mode 100644 index 00000000..a0a91be3 --- /dev/null +++ b/applications/luci-app-ahcp/po/hu/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/it/ahcp.po b/applications/luci-app-ahcp/po/it/ahcp.po new file mode 100644 index 00000000..56d9516b --- /dev/null +++ b/applications/luci-app-ahcp/po/it/ahcp.po @@ -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" diff --git a/applications/luci-app-ahcp/po/ja/ahcp.po b/applications/luci-app-ahcp/po/ja/ahcp.po new file mode 100644 index 00000000..dd78ccdf --- /dev/null +++ b/applications/luci-app-ahcp/po/ja/ahcp.po @@ -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 \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ファイル" diff --git a/applications/luci-app-ahcp/po/ms/ahcp.po b/applications/luci-app-ahcp/po/ms/ahcp.po new file mode 100644 index 00000000..0b6963b1 --- /dev/null +++ b/applications/luci-app-ahcp/po/ms/ahcp.po @@ -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 "" diff --git a/applications/luci-app-ahcp/po/no/ahcp.po b/applications/luci-app-ahcp/po/no/ahcp.po new file mode 100644 index 00000000..4c3bc03a --- /dev/null +++ b/applications/luci-app-ahcp/po/no/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/pl/ahcp.po b/applications/luci-app-ahcp/po/pl/ahcp.po new file mode 100644 index 00000000..50952249 --- /dev/null +++ b/applications/luci-app-ahcp/po/pl/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/pt-br/ahcp.po b/applications/luci-app-ahcp/po/pt-br/ahcp.po new file mode 100644 index 00000000..741c1457 --- /dev/null +++ b/applications/luci-app-ahcp/po/pt-br/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/pt/ahcp.po b/applications/luci-app-ahcp/po/pt/ahcp.po new file mode 100644 index 00000000..f96fc453 --- /dev/null +++ b/applications/luci-app-ahcp/po/pt/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/ro/ahcp.po b/applications/luci-app-ahcp/po/ro/ahcp.po new file mode 100644 index 00000000..2882b31f --- /dev/null +++ b/applications/luci-app-ahcp/po/ro/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/ru/ahcp.po b/applications/luci-app-ahcp/po/ru/ahcp.po new file mode 100644 index 00000000..05c17caf --- /dev/null +++ b/applications/luci-app-ahcp/po/ru/ahcp.po @@ -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 \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 "Файл арендованных
адресов" + +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 "Файл уникального идентификатора" diff --git a/applications/luci-app-ahcp/po/sk/ahcp.po b/applications/luci-app-ahcp/po/sk/ahcp.po new file mode 100644 index 00000000..b6184903 --- /dev/null +++ b/applications/luci-app-ahcp/po/sk/ahcp.po @@ -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 "" diff --git a/applications/luci-app-ahcp/po/sv/ahcp.po b/applications/luci-app-ahcp/po/sv/ahcp.po new file mode 100644 index 00000000..db1cc35e --- /dev/null +++ b/applications/luci-app-ahcp/po/sv/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/templates/ahcp.pot b/applications/luci-app-ahcp/po/templates/ahcp.pot new file mode 100644 index 00000000..ea6bb425 --- /dev/null +++ b/applications/luci-app-ahcp/po/templates/ahcp.pot @@ -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 "" diff --git a/applications/luci-app-ahcp/po/tr/ahcp.po b/applications/luci-app-ahcp/po/tr/ahcp.po new file mode 100644 index 00000000..ca330718 --- /dev/null +++ b/applications/luci-app-ahcp/po/tr/ahcp.po @@ -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 \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ı" diff --git a/applications/luci-app-ahcp/po/uk/ahcp.po b/applications/luci-app-ahcp/po/uk/ahcp.po new file mode 100644 index 00000000..76490198 --- /dev/null +++ b/applications/luci-app-ahcp/po/uk/ahcp.po @@ -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 \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 "Файл унікальних ідентифікаторів" diff --git a/applications/luci-app-ahcp/po/vi/ahcp.po b/applications/luci-app-ahcp/po/vi/ahcp.po new file mode 100644 index 00000000..1041add8 --- /dev/null +++ b/applications/luci-app-ahcp/po/vi/ahcp.po @@ -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 \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" diff --git a/applications/luci-app-ahcp/po/zh-cn/ahcp.po b/applications/luci-app-ahcp/po/zh-cn/ahcp.po new file mode 100644 index 00000000..295bbe7f --- /dev/null +++ b/applications/luci-app-ahcp/po/zh-cn/ahcp.po @@ -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 \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文件" diff --git a/applications/luci-app-ahcp/po/zh-tw/ahcp.po b/applications/luci-app-ahcp/po/zh-tw/ahcp.po new file mode 100644 index 00000000..dc7f6c5a --- /dev/null +++ b/applications/luci-app-ahcp/po/zh-tw/ahcp.po @@ -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 \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檔案" diff --git a/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp b/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp new file mode 100755 index 00000000..f2b2487c --- /dev/null +++ b/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp @@ -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 diff --git a/applications/luci-app-aria2/Makefile b/applications/luci-app-aria2/Makefile new file mode 100644 index 00000000..f5b006c3 --- /dev/null +++ b/applications/luci-app-aria2/Makefile @@ -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 + +# 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 + $(LUCI_TITLE) + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/applications/luci-app-aria2/luasrc/controller/aria2.lua b/applications/luci-app-aria2/luasrc/controller/aria2.lua new file mode 100644 index 00000000..17289305 --- /dev/null +++ b/applications/luci-app-aria2/luasrc/controller/aria2.lua @@ -0,0 +1,42 @@ +--[[ +LuCI - Lua Configuration Interface - aria2 support + +Copyright 2014-2015 nanpuyue +Modified by kuoruan + +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 diff --git a/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua b/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua new file mode 100644 index 00000000..3b61f954 --- /dev/null +++ b/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua @@ -0,0 +1,211 @@ +--[[ +LuCI - Lua Configuration Interface - Aria2 support + +Copyright 2014-2016 nanpuyue +Modified by maz-1 +Modified by kuoruan + +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 = "" +local sessionbtn = "" +local aria2rpctxt = "" +local use_websocket = "" + +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 & 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"), "
" .. 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("DHT enabled")) +o.enabled = "true" +o.disabled = "false" + +o = s:taboption("bittorrent", Flag, "bt_enable_lpd", translate("LPD 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 diff --git a/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm b/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm new file mode 100644 index 00000000..b14cca22 --- /dev/null +++ b/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm @@ -0,0 +1,77 @@ + + +
+ <%:Aria2 Status%> +

+ <%:Collecting data...%> +

+
diff --git a/applications/luci-app-aria2/po/pt-br/aria2.po b/applications/luci-app-aria2/po/pt-br/aria2.po new file mode 100644 index 00000000..1bb41374 --- /dev/null +++ b/applications/luci-app-aria2/po/pt-br/aria2.po @@ -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 \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 "DHT enabled" +msgstr "" +"DHT habilitado" + +msgid "LPD enabled" +msgstr "" +"LPD 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 & 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 RPC" + +msgid "RPC authentication method" +msgstr "" +"Método de autenticação do RPC" + +msgid "RPC password" +msgstr "" +"Senha do RPC" + +msgid "RPC port" +msgstr "" +"Porta do RPC" + +msgid "RPC username" +msgstr "" +"Nome do usuario do RPC" + +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)." diff --git a/applications/luci-app-aria2/po/ru/aria2.po b/applications/luci-app-aria2/po/ru/aria2.po new file mode 100644 index 00000000..e5e22d1e --- /dev/null +++ b/applications/luci-app-aria2/po/ru/aria2.po @@ -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 \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 "DHT enabled" +msgstr "DHT включена" + +msgid "LPD enabled" +msgstr "LPD включено" + +msgid "Additional Bt tracker enabled" +msgstr "Дополнительный
Bt tracker включен" + +msgid "Aria2" +msgstr "Aria2" + +msgid "Aria2 Settings" +msgstr "Настройка Aria2" + +msgid "Aria2 Status" +msgstr "Состояние Aria2" + +msgid "" +"Aria2 is a multi-protocol & 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 "Папка расположения
сonfig файла" + +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 "Falloc" + +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 "Файл системного журнала находится в папке с config файлом." + +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 "Префикс 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 "Использовать 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 (кило) или М (мега)." diff --git a/applications/luci-app-aria2/po/sv/aria2.po b/applications/luci-app-aria2/po/sv/aria2.po new file mode 100644 index 00000000..33613fac --- /dev/null +++ b/applications/luci-app-aria2/po/sv/aria2.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "\"Falloc\" is not available in all cases." +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "LPD 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 & 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." diff --git a/applications/luci-app-aria2/po/templates/aria2.pot b/applications/luci-app-aria2/po/templates/aria2.pot new file mode 100644 index 00000000..357c0ae7 --- /dev/null +++ b/applications/luci-app-aria2/po/templates/aria2.pot @@ -0,0 +1,208 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "\"Falloc\" is not available in all cases." +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "LPD 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 & 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 "" diff --git a/applications/luci-app-aria2/po/zh-cn/aria2.po b/applications/luci-app-aria2/po/zh-cn/aria2.po new file mode 100644 index 00000000..0b7eea21 --- /dev/null +++ b/applications/luci-app-aria2/po/zh-cn/aria2.po @@ -0,0 +1,221 @@ +# +# Yangfl , 2017. +# +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Last-Translator: Yangfl \n" +"Language-Team: \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 "DHT enabled" +msgstr "启用DHT" + +msgid "LPD enabled" +msgstr "启用LPD" + +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 & 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 "快速 alloc(Falloc)" + +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 "基本设置" diff --git a/applications/luci-app-aria2/po/zh-tw/aria2.po b/applications/luci-app-aria2/po/zh-tw/aria2.po new file mode 100644 index 00000000..d6782cf7 --- /dev/null +++ b/applications/luci-app-aria2/po/zh-tw/aria2.po @@ -0,0 +1,221 @@ +# +# Yangfl , 2017. +# +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Last-Translator: Yangfl \n" +"Language-Team: \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 "DHT enabled" +msgstr "啟用DHT" + +msgid "LPD enabled" +msgstr "啟用LPD" + +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 & 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 "快速 alloc(Falloc)" + +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 "基本設定" diff --git a/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 b/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 new file mode 100755 index 00000000..3a9ba5b2 --- /dev/null +++ b/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 @@ -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 diff --git a/applications/luci-app-asterisk/Makefile b/applications/luci-app-asterisk/Makefile new file mode 100644 index 00000000..3434e167 --- /dev/null +++ b/applications/luci-app-asterisk/Makefile @@ -0,0 +1,13 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# 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 diff --git a/applications/luci-app-asterisk/luasrc/asterisk.lua b/applications/luci-app-asterisk/luasrc/asterisk.lua new file mode 100644 index 00000000..ceb738d1 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/asterisk.lua @@ -0,0 +1,746 @@ +-- Copyright 2009 Jo-Philipp Wich +-- 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 == '' then + val = true + elseif val == 'No' or val == 'no' then + val = false + elseif val == '' 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 '' ) .. + '%s' %{ 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 diff --git a/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua b/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua new file mode 100644 index 00000000..6ed8dfd4 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua @@ -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" } +} diff --git a/applications/luci-app-asterisk/luasrc/controller/asterisk.lua b/applications/luci-app-asterisk/luasrc/controller/asterisk.lua new file mode 100644 index 00000000..4923584c --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/controller/asterisk.lua @@ -0,0 +1,194 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua new file mode 100644 index 00000000..d4daa687 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua @@ -0,0 +1,91 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua new file mode 100644 index 00000000..d0eaf34b --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua @@ -0,0 +1,49 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua new file mode 100644 index 00000000..dd79e463 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua @@ -0,0 +1,22 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua new file mode 100644 index 00000000..72685b01 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua @@ -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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua new file mode 100644 index 00000000..13dcba51 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua @@ -0,0 +1,47 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua new file mode 100644 index 00000000..425569dd --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua @@ -0,0 +1,45 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua new file mode 100644 index 00000000..0893c0e2 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua @@ -0,0 +1,53 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua new file mode 100644 index 00000000..9b59d940 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua @@ -0,0 +1,89 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua new file mode 100644 index 00000000..04eb9747 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua new file mode 100644 index 00000000..cca4f34d --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua @@ -0,0 +1,53 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua new file mode 100644 index 00000000..7c818760 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua @@ -0,0 +1,100 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua new file mode 100644 index 00000000..4bef199d --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua @@ -0,0 +1,77 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua new file mode 100644 index 00000000..a095ec3e --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua @@ -0,0 +1,98 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua new file mode 100644 index 00000000..7341dfbe --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua @@ -0,0 +1,41 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua new file mode 100644 index 00000000..026aab4c --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua @@ -0,0 +1,151 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- 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 diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua new file mode 100644 index 00000000..b4c81bb2 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua @@ -0,0 +1,125 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +local function find_outgoing_contexts(uci) + local c = { } + local h = { } + +-- uci:foreach("asterisk", "dialplan", +-- function(s) +-- if not h[s['.name']] then +-- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] } +-- h[s['.name']] = true +-- end +-- end) + + uci:foreach("asterisk", "dialzone", + function(s) + if not h[s['.name']] then + c[#c+1] = { s['.name'], "Dialzone: %s" % s['.name'] } + h[s['.name']] = true + end + end) + + return c +end + +local function find_incoming_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "sip", + function(s) + if s.context and not h[s.context] and + uci:get_bool("asterisk", s['.name'], "provider") + then + c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context } + h[s.context] = true + end + end) + + return c +end + +local function find_trunks(uci) + local t = { } + + uci:foreach("asterisk", "sip", + function(s) + if uci:get_bool("asterisk", s['.name'], "provider") then + t[#t+1] = { + "SIP/%s" % s['.name'], + "SIP: %s" % s['.name'] + } + end + end) + + uci:foreach("asterisk", "iax", + function(s) + t[#t+1] = { + "IAX/%s" % s['.name'], + "IAX: %s" % s.extension or s['.name'] + } + end) + + return t +end + +--[[ + +dialzone {name} - Outgoing zone. + uses - Outgoing line to use: TYPE/Name + match (list) - Number to match + countrycode - The effective country code of this dialzone + international (list) - International prefix to match + localzone - dialzone for local numbers + addprefix - Prexix required to dial out. + localprefix - Prefix for a local call + +]] + + +-- +-- SIP dialzone configuration +-- +if arg[1] then + cbimap = Map("asterisk", "Edit Dialplan Entry") + + entry = cbimap:section(NamedSection, arg[1]) + + back = entry:option(DummyValue, "_overview", "Back to dialplan overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans") + + desc = entry:option(Value, "description", "Description") + function desc.cfgvalue(self, s, ...) + return Value.cfgvalue(self, s, ...) or s + end + + match = entry:option(DynamicList, "match", "Number matches") + + intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)") + + trunk = entry:option(MultiValue, "uses", "Used trunk") + for _, v in ipairs(find_trunks(cbimap.uci)) do + trunk:value(unpack(v)) + end + + aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)") + --ast.idd.cbifill(aprefix) + + ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)") + ast.cc.cbifill(ccode) + + lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers") + lzone:value("", "no special treatment of local numbers") + for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do + lzone:value(unpack(v)) + end + + lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)") + + return cbimap +end diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua new file mode 100644 index 00000000..4ffeca4f --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua @@ -0,0 +1,103 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Registered Trunks") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type == "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s") +sip_table.addremove = true +sip_table.sectionhead = "Extension" + +function sip_table.filter(self, s) + return s and ( + cbimap.uci:get("asterisk", s, "type") == nil or + cbimap.uci:get_bool("asterisk", s, "provider") + ) +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:tset("asterisk", created, { + type = "friend", + qualify = "yes", + provider = "yes" + }) + + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") + +host = sip_table:option(DummyValue, "host", "Hostname") +function host.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.address then + return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port } + else + return "n/a" + end +end + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") +function context.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "(default)" +end + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" %{ + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", s, "info" + )) +end + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua new file mode 100644 index 00000000..5585c062 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua @@ -0,0 +1,123 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") +local uci = require("luci.model.uci").cursor() + +--[[ + Dialzone overview table +]] + +if not arg[1] then + zonemap = Map("asterisk", "Dial Zones", [[ + Dial zones hold patterns of dialed numbers to match. + Each zone has one or more trunks assigned. If the first trunk is + congested, Asterisk will try to use the next available connection. + If all trunks fail, then the following zones in the parent dialplan + are tried. + ]]) + + local zones, znames = ast.dialzone.zones() + + zonetbl = zonemap:section(Table, zones, "Zone Overview") + zonetbl.sectionhead = "Zone" + zonetbl.addremove = true + zonetbl.anonymous = false + zonetbl.extedit = luci.dispatcher.build_url( + "admin", "asterisk", "dialplans", "zones", "%s" + ) + + function zonetbl.cfgsections(self) + return znames + end + + function zonetbl.parse(self) + for k, v in pairs(self.map:formvaluetable( + luci.cbi.REMOVE_PREFIX .. self.config + ) or {}) do + if k:sub(-2) == ".x" then k = k:sub(1, #k - 2) end + uci:delete("asterisk", k) + uci:save("asterisk") + self.data[k] = nil + for i = 1,#znames do + if znames[i] == k then + table.remove(znames, i) + break + end + end + end + + Table.parse(self) + end + + zonetbl:option(DummyValue, "description", "Description") + zonetbl:option(DummyValue, "addprefix") + + match = zonetbl:option(DummyValue, "matches") + function match.cfgvalue(self, s) + return table.concat(zones[s].matches, ", ") + end + + trunks = zonetbl:option(DummyValue, "trunk") + trunks.template = "asterisk/cbi/cell" + function trunks.cfgvalue(self, s) + return ast.tools.hyperlinks(zones[s].trunks) + end + + return zonemap + +--[[ + Zone edit form +]] + +else + zoneedit = Map("asterisk", "Edit Dialzone") + + entry = zoneedit:section(NamedSection, arg[1]) + entry.title = "Zone %q" % arg[1]; + + back = entry:option(DummyValue, "_overview", "Back to dialzone overview") + back.value = "" + back.titleref = luci.dispatcher.build_url( + "admin", "asterisk", "dialplans", "zones" + ) + + desc = entry:option(Value, "description", "Description") + function desc.cfgvalue(self, s, ...) + return Value.cfgvalue(self, s, ...) or s + end + + trunks = entry:option(MultiValue, "uses", "Used trunks") + trunks.widget = "checkbox" + uci:foreach("asterisk", "sip", + function(s) + if s.provider == "yes" then + trunks:value( + "SIP/%s" % s['.name'], + "SIP/%s (%s)" %{ s['.name'], s.host or 'n/a' } + ) + end + end) + + + match = entry:option(DynamicList, "match", "Number matches") + + intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)") + + aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)") + ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)") + + lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers") + lzone:value("", "no special treatment of local numbers") + for _, z in ipairs(ast.dialzone.zones()) do + lzone:value(z.name, "%q (%s)" %{ z.name, z.description }) + end + --for _, v in ipairs(find_outgoing_contexts(zoneedit.uci)) do + -- lzone:value(unpack(v)) + --end + + lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)") + + return zoneedit + +end diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua new file mode 100644 index 00000000..e409d706 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua @@ -0,0 +1,38 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require "luci.asterisk" + +cbimap = Map("asterisk", "MeetMe - Rooms") + +meetme = cbimap:section(TypedSection, "meetme", "MeetMe Rooms") +meetme.addremove = true +meetme.anonymous = true +meetme.template = "cbi/tblsection" +meetme:option(Value, "_description", "Description", "Short room description") + +room = meetme:option(Value, "room", "Room Number", "Unique room identifier") + +function room.write(self, s, val) + if val and #val > 0 then + local old = self:cfgvalue(s) + self.map.uci:foreach("asterisk", "dialplanmeetme", + function(v) + if v.room == old then + self.map:set(v['.name'], "room", val) + end + end) + Value.write(self, s, val) + end +end + + +meetme:option(Value, "pin", "PIN", "PIN required to access") +meetme:option(Value, "adminpin", "Admin PIN", "PIN required for administration") + +function meetme.remove(self, s) + return ast.meetme.remove(self.map:get(s, "room"), self.map.uci) +end + + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua new file mode 100644 index 00000000..9e5aed7f --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua @@ -0,0 +1,17 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "MeetMe - Common Settings", + "Common settings for MeetMe phone conferences.") + +meetme = cbimap:section(TypedSection, "meetmegeneral", "General MeetMe Options") +meetme.addremove = false +meetme.anonymous = true + +audiobuffers = meetme:option(ListValue, "audiobuffers", + "Number of 20ms audio buffers to use for conferences") + +for i = 2, 32 do audiobuffers:value(i) end + + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua new file mode 100644 index 00000000..01dfc168 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua @@ -0,0 +1,145 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +local function find_outgoing_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "dialplan", + function(s) + if not h[s['.name']] then + c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] } + h[s['.name']] = true + end + end) + + return c +end + +local function find_incoming_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "sip", + function(s) + if s.context and not h[s.context] and + uci:get_bool("asterisk", s['.name'], "provider") + then + c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context } + h[s.context] = true + end + end) + + return c +end + + +-- +-- SIP phone info +-- +if arg[2] == "info" then + form = SimpleForm("asterisk", "SIP Phone Information") + form.reset = false + form.submit = "Back to overview" + + local info, keys = ast.sip.peer(arg[1]) + local data = { } + + for _, key in ipairs(keys) do + data[#data+1] = { + key = key, + val = type(info[key]) == "boolean" + and ( info[key] and "yes" or "no" ) + or ( info[key] == nil or #info[key] == 0 ) + and "(none)" + or tostring(info[key]) + } + end + + itbl = form:section(Table, data, "SIP Phone %q" % arg[1]) + itbl:option(DummyValue, "key", "Key") + itbl:option(DummyValue, "val", "Value") + + function itbl.parse(...) + luci.http.redirect( + luci.dispatcher.build_url("admin", "asterisk", "phones") + ) + end + + return form + +-- +-- SIP phone configuration +-- +elseif arg[1] then + cbimap = Map("asterisk", "Edit SIP Client") + + peer = cbimap:section(NamedSection, arg[1]) + peer.hidden = { + type = "friend", + qualify = "yes", + host = "dynamic", + nat = "no", + canreinvite = "no" + } + + back = peer:option(DummyValue, "_overview", "Back to phone overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "phones") + + active = peer:option(Flag, "disable", "Account enabled") + active.enabled = "yes" + active.disabled = "no" + function active.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "yes" + end + + exten = peer:option(Value, "extension", "Extension Number") + cbimap.uci:foreach("asterisk", "dialplanexten", + function(s) + exten:value( + s.extension, + "%s (via %s/%s)" %{ s.extension, s.type:upper(), s.target } + ) + end) + + display = peer:option(Value, "callerid", "Display Name") + + username = peer:option(Value, "username", "Authorization ID") + password = peer:option(Value, "secret", "Authorization Password") + password.password = true + + regtimeout = peer:option(Value, "registertimeout", "Registration Time Value") + function regtimeout.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "60" + end + + sipport = peer:option(Value, "port", "SIP Port") + function sipport.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "5060" + end + + linekey = peer:option(ListValue, "_linekey", "Linekey Mode (broken)") + linekey:value("", "Off") + linekey:value("trunk", "Trunk Appearance") + linekey:value("call", "Call Appearance") + + dialplan = peer:option(ListValue, "context", "Assign Dialplan") + dialplan.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans") + for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do + dialplan:value(unpack(v)) + end + + incoming = peer:option(StaticList, "incoming", "Receive incoming calls from") + for _, v in ipairs(find_incoming_contexts(cbimap.uci)) do + incoming:value(unpack(v)) + end + + --function incoming.cfgvalue(...) + --error(table.concat(MultiValue.cfgvalue(...),".")) + --end + + return cbimap +end diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua new file mode 100644 index 00000000..a6c44f93 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua @@ -0,0 +1,104 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Registered Phones") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type ~= "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Phones") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "phones", "sip", "%s") +sip_table.addremove = true + +function sip_table.filter(self, s) + return s and not cbimap.uci:get_bool("asterisk", s, "provider") +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + cbimap.uci:tset("asterisk", section, { + type = "friend", + qualify = "yes", + provider = "no", + host = "dynamic", + nat = "no", + canreinvite = "no", + extension = section:match("^%d+$") and section or "", + username = section:match("^%d+$") and section or "" + }) + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "phones", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") +function user.cfgvalue(self, s) + return sip_peers[s] and sip_peers[s].callerid or + AbstractValue.cfgvalue(self, s) +end + +host = sip_table:option(DummyValue, "host", "Hostname") +function host.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.address then + return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port } + else + return "n/a" + end +end + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" % { + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "phones", "sip", s, "info" + )) +end + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua new file mode 100644 index 00000000..eedc1c2c --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua @@ -0,0 +1,86 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +-- +-- SIP trunk info +-- +if arg[2] == "info" then + form = SimpleForm("asterisk", "SIP Trunk Information") + form.reset = false + form.submit = "Back to overview" + + local info, keys = ast.sip.peer(arg[1]) + local data = { } + + for _, key in ipairs(keys) do + data[#data+1] = { + key = key, + val = type(info[key]) == "boolean" + and ( info[key] and "yes" or "no" ) + or ( info[key] == nil or #info[key] == 0 ) + and "(none)" + or tostring(info[key]) + } + end + + itbl = form:section(Table, data, "SIP Trunk %q" % arg[1]) + itbl:option(DummyValue, "key", "Key") + itbl:option(DummyValue, "val", "Value") + + function itbl.parse(...) + luci.http.redirect( + luci.dispatcher.build_url("admin", "asterisk", "trunks") + ) + end + + return form + +-- +-- SIP trunk config +-- +elseif arg[1] then + cbimap = Map("asterisk", "Edit SIP Trunk") + + peer = cbimap:section(NamedSection, arg[1]) + peer.hidden = { + type = "peer", + qualify = "yes", + } + + back = peer:option(DummyValue, "_overview", "Back to trunk overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "trunks") + + sipdomain = peer:option(Value, "host", "SIP Domain") + sipport = peer:option(Value, "port", "SIP Port") + function sipport.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "5060" + end + + username = peer:option(Value, "username", "Authorization ID") + password = peer:option(Value, "secret", "Authorization Password") + password.password = true + + outboundproxy = peer:option(Value, "outboundproxy", "Outbound Proxy") + outboundport = peer:option(Value, "outboundproxyport", "Outbound Proxy Port") + + register = peer:option(Flag, "register", "Register with peer") + register.enabled = "yes" + register.disabled = "no" + + regext = peer:option(Value, "registerextension", "Extension to register (optional)") + regext:depends({register="1"}) + + didval = peer:option(ListValue, "_did", "Number of assigned DID numbers") + didval:value("", "(none)") + for i=1,24 do didval:value(i) end + + dialplan = peer:option(ListValue, "context", "Dialplan Context") + dialplan:value(arg[1] .. "_inbound", "(default)") + cbimap.uci:foreach("asterisk", "dialplan", + function(s) dialplan:value(s['.name']) end) + + return cbimap +end diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua new file mode 100644 index 00000000..44c8ca87 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua @@ -0,0 +1,94 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Trunks") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type == "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s") +sip_table.addremove = true +sip_table.sectionhead = "Extension" + +function sip_table.filter(self, s) + return s and ( + cbimap.uci:get("asterisk", s, "type") == nil or + cbimap.uci:get_bool("asterisk", s, "provider") + ) +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:tset("asterisk", created, { + type = "friend", + qualify = "yes", + provider = "yes" + }) + + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") +function context.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "(default)" +end + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" %{ + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", s, "info" + )) +end + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua new file mode 100644 index 00000000..51143e6a --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua @@ -0,0 +1,48 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require "luci.asterisk" + +cbimap = Map("asterisk", "Voicemail - Mailboxes") + +voicemail = cbimap:section(TypedSection, "voicemail", "Voicemail Boxes") +voicemail.addremove = true +voicemail.anonymous = true +voicemail.template = "cbi/tblsection" + +context = voicemail:option(ListValue, "context", "Context") +context:value("default") + +number = voicemail:option(Value, "number", + "Mailbox Number", "Unique mailbox identifier") + +function number.write(self, s, val) + if val and #val > 0 then + local old = self:cfgvalue(s) + self.map.uci:foreach("asterisk", "dialplanvoice", + function(v) + if v.voicebox == old then + self.map:set(v['.name'], "voicebox", val) + end + end) + Value.write(self, s, val) + end +end + + +voicemail:option(Value, "name", "Ownername", "Human readable display name") +voicemail:option(Value, "password", "Password", "Access protection") +voicemail:option(Value, "email", "eMail", "Where to send voice messages") +voicemail:option(Value, "page", "Pager", "Pager number") + +zone = voicemail:option(ListValue, "zone", "Timezone", "Used time format") +zone.titleref = luci.dispatcher.build_url("admin/asterisk/voicemail/settings") +cbimap.uci:foreach("asterisk", "voicezone", + function(s) zone:value(s['.name']) end) + +function voicemail.remove(self, s) + return ast.voicemail.remove(self.map:get(s, "number"), self.map.uci) +end + + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua new file mode 100644 index 00000000..ef52a32e --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua @@ -0,0 +1,51 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys.zoneinfo" + + +cbimap = Map("asterisk", "Voicemail - Common Settings") + +voicegeneral = cbimap:section(TypedSection, "voicegeneral", + "General Voicemail Options", "Common settings for all mailboxes are " .. + "defined here. Most of them are optional. The storage format should " .. + "never be changed once set.") + +voicegeneral.anonymous = true +voicegeneral.addremove = false + +format = voicegeneral:option(MultiValue, "Used storage formats") +format.widget = "checkbox" +format:value("wav49") +format:value("gsm") +format:value("wav") + +voicegeneral:option(Flag, "sendvoicemail", "Enable sending of emails") +voicegeneral:option(Flag, "attach", "Attach voice messages to emails") +voicegeneral:option(Value, "serveremail", "Used email sender address") +voicegeneral:option(Value, "emaildateformat", "Date format used in emails").optional = true +voicegeneral:option(Value, "maxlogins", "Max. failed login attempts").optional = true +voicegeneral:option(Value, "maxmsg", "Max. allowed messages per mailbox").optional = true +voicegeneral:option(Value, "minmessage", "Min. number of seconds for voicemail").optional = true +voicegeneral:option(Value, "maxmessage", "Max. number of seconds for voicemail").optional = true +voicegeneral:option(Value, "maxsilence", "Seconds of silence until stop recording").optional = true +voicegeneral:option(Value, "maxgreet", "Max. number of seconds for greetings").optional = true +voicegeneral:option(Value, "skipms", "Milliseconds to skip for rew./ff.").optional = true +voicegeneral:option(Value, "silencethreshold", "Threshold to detect silence").optional = true + + +voicezone = cbimap:section(TypedSection, "voicezone", "Time Zones", + "Time zones define how dates and times are expressen when used in " .. + "an voice mails. Refer to the asterisk manual for placeholder values.") + +voicezone.addremove = true +voicezone.sectionhead = "Name" +voicezone.template = "cbi/tblsection" + +tz = voicezone:option(ListValue, "zone", "Location") +for _, z in ipairs(luci.sys.zoneinfo.TZ) do tz:value(z[1]) end + +voicezone:option(Value, "message", "Date Format") + + +return cbimap diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm new file mode 100644 index 00000000..3afb26bd --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm @@ -0,0 +1,13 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+cbi/valueheader%> +<% if self.href then %><% end -%> + <%=self:cfgvalue(section)%> +<%- if self.href then %><%end%> +  + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm new file mode 100644 index 00000000..9f644ba0 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm @@ -0,0 +1,245 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% + local uci = luci.model.uci.cursor_state() + local ast = require "luci.asterisk" + + function digit_pattern(s,t) + return "%s" + %{ t and " title='" .. t .. "'" or "", s } + end + + function rowstyle(i) + return "cbi-rowstyle-%i" %{ + ( i % 2 ) == 0 and 2 or 1 + } + end + + function format_matches(z) + local html = { } + + if type(z) ~= "table" then + z = { matches = { z } } + end + + if z.localprefix then + for _, m in ipairs(z.matches) do + html[#html+1] = + digit_pattern(z.localprefix, "local prefix") .. " " .. + digit_pattern(m) + end + end + + if z.intlmatches and #z.intlmatches > 0 then + for _, i in ipairs(z.intlmatches) do + for _, m in ipairs(z.matches) do + html[#html+1] = "%s %s" %{ + digit_pattern("(%s)" % i, "intl. prefix"), + digit_pattern(m) + } + end + end + else + for _, m in ipairs(z.matches) do + html[#html+1] = digit_pattern(m) + end + end + + return table.concat(html, "; ") + end +%> + + +
+
+ + + +
+ +
+

Outgoing Call Routing

+
+ Here you can manage your dial plans which are used to route outgoing calls from your local extensions.

+ Related tasks:
+ Manage dialzones | + Manage voicemail boxes | + Manage meetme rooms +
+ +
+ +
+ + <% for i, plan in pairs(ast.dialplan.plans()) do %> +
+ + + + + + + + <% local zones_used = { }; local row = 0 %> + <% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %> + + + + + <% row = row + 1; end %> + + + + <% local boxes_used = { } %> + <% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %> + + + + + <% row = row + 1; end %> + + + + <% local rooms_used = { } %> + <% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %> + + + + + <% row = row + 1; end %> + + + + + + +
+ Dialplan <%=plan.name%> + + + Remove this dialplan + +
+ └ Dialzone <%=zone.name%> (<%=zone.description%>) +

+ Lines: + <%=ast.tools.hyperlinks( + zone.trunks, function(v) + return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower() + end + )%>
+ Matches: + <%=format_matches(zone)%> +

+
+ + Edit dialzone + + + Remove from this dialplan + +
+ └ Voicemailbox <%=box.id%> (<%=box.name%>) +

+ Owner: <%=box.name%> | + eMail: <%=#box.email > 0 and box.email or 'n/a'%> | + Pager: <%=#box.page > 0 and box.page or 'n/a'%>
+ Matches: <%=format_matches(ext)%> +

+
+ + Manage mailboxes ... + + + Remove from this dialplan + +
+ └ MeetMe Room <%=room.room%> + <% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %> +

+ Matches: <%=format_matches(ext)%> +

+
+ + Manage conferences ... + + + Remove from this dialplan + +
+
+ + Add Dialzone:
+ +

+ + Add Voicemailbox:
+ + as extension + +

+ + Add MeetMe Conference:
+ + as extension + +

+ + +
+ +
+
+
+ <% end %> + +
+
+

Create a new dialplan

+ The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .
+ + <%- if create_error then %> +
Invalid name given!
+ <% end -%> + +
+ + +
+
+ +
+
+
+
+<%+footer%> diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm new file mode 100644 index 00000000..ffdbbcf3 --- /dev/null +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm @@ -0,0 +1,165 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% + local uci = luci.model.uci.cursor_state() + local ast = require("luci.asterisk") + + function digit_pattern(s) + return "%s" % s + end + + function rowstyle(i) + return "cbi-rowstyle-%i" %{ + ( i % 2 ) == 0 and 2 or 1 + } + end + + local function find_trunks() + local t = { } + + uci:foreach("asterisk", "sip", + function(s) + if uci:get_bool("asterisk", s['.name'], "provider") then + t[#t+1] = { + "SIP/%s" % s['.name'], + "SIP: %s" % s['.name'] + } + end + end) + + uci:foreach("asterisk", "iax", + function(s) + t[#t+1] = { + "IAX/%s" % s['.name'], + "IAX: %s" % s.extension or s['.name'] + } + end) + + return t + end + +%> + + +
+
+ + + +
+ +
+

Dial Zone Management

+
+ " class="cbi-title-ref">Back to dialplan overview

+ Here you can manage your dial zones. The zones are used to route outgoing calls to the destination. + Each zone groups multiple trunks and number matches to represent a logical destination. Zones can + also be used to enforce certain dial restrictions on selected extensions. +
+ + +
+
+ + + + + + + + + + + + + + + <% for i, rule in pairs(ast.dialzone.zones()) do %> + + + + + + + + + <% end %> +
+

Dialzone Overview

+
NamePrepend- MatchTrunkDescription
+ <%=rule.name%> + + <% for _ in ipairs(rule.matches) do %> + <%=rule.addprefix and digit_pattern(rule.addprefix)%> 
+ <% end %> +
+ <% for _, m in ipairs(rule.matches) do %> + <%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%> + <%=digit_pattern(m)%>
+ <% end %> +
+ <%=ast.tools.hyperlinks( + rule.trunks, function(v) + return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower() + end + )%> + + <%=rule.description or rule.name%> + + + Edit entry + + + Delete entry + +
+
+
+
+ +
+
+

Create a new dialzone

+ The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .
+ You can specifiy multiple number matches by separating them with spaces.
+ + <%- if create_error then %> +
Invalid name given!
+ <% end -%> + + + + + + +
+
+ +

+ +
+ +
+
+ +
+
+ + +
+
+
+
+
+
+<%+footer%> diff --git a/applications/luci-app-asterisk/po/ca/asterisk.po b/applications/luci-app-asterisk/po/ca/asterisk.po new file mode 100644 index 00000000..aa534432 --- /dev/null +++ b/applications/luci-app-asterisk/po/ca/asterisk.po @@ -0,0 +1,680 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2009-05-31 19:18+0200\n" +"Last-Translator: Eduard Duran \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opcions Generals d'Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directori AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Desa en memòria cau els sons gravats durant la gravació" + +#~ msgid "Debug Level" +#~ msgstr "Nivell de depuració" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactiva algunes alertes" + +#~ msgid "Dump core on crash" +#~ msgstr "Bolca el nucli en cas de fallada" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioritat" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicialitza Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Utilitza l'hora interna" + +#~ msgid "Log directory" +#~ msgstr "Directori de registres" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número màxim de trucades permeses" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Càrrega màxima per deixar d'acceptar trucades noves" + +#~ msgid "Disable console colors" +#~ msgstr "Desactiva els colors de consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directori de memòria cau dels fitxers de so" + +#~ msgid "The Group to run as" +#~ msgstr "Executa amb els permisos del Grup" + +#~ msgid "The User to run as" +#~ msgstr "Executa amb els permisos de l'Usuari" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directori de bústia de correu" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixa l'UniquID amb el nom del sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Munta les rutes de transcodificació via SLINEAR, no directament" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmet silenci SLINEAR mentre s'enregistri un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivell de detall" + +#~ msgid "Section dialplan" +#~ msgstr "Secció Dialplan" + +#~ msgid "include" +#~ msgstr "inclou" + +#~ msgid "Dialplan Extension" +#~ msgstr "Connector Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opcions generals de Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permet la transferència" + +#~ msgid "Clear global vars" +#~ msgstr "Buida les variables globals" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferència Dialplan" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Bústia de correu Dialplan" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zones de marcatge per Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix per afegir als Dialplan que coincideixin" + +#~ msgid "Match International prefix" +#~ msgstr "Coincideix amb el prefix Internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefix (0) per afegir/esborrar a/des de números internacionals" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Pla coincident" + +#~ msgid "Connection to use" +#~ msgstr "Connexió a fer servir" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapa de Funcions Principals" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferència assistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferència cega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla per desconnectar trucada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla per trucada en espera" + +#~ msgid "Parking Feature" +#~ msgstr "Funció de trucada en espera" + +#~ msgid "ADSI Park" +#~ msgstr "Trucada en espera ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Temps d'espera de transferència assistida (seg)" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de registre d'un toc" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nom del context de la trucada en espera" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fitxer de so per reproduir a la trucada en espera" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Temps màxim (en ms) entre dígits per l'activació de funció" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Mètode per trobar una ranura de trucada en espera" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Reprodueix to de cortesia a" + +#~ msgid "Enable Parking" +#~ msgstr "Activa les trucades en espera" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensió per marcar per deixar en espera una trucada" + +#~ msgid "Parking time (secs)" +#~ msgstr "Temps de trucada en espera (secs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rang d'extensions per trucada en espera" + +#~ msgid "Pickup extension" +#~ msgstr "Connector de recol·lecció" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segons a esperar entre dígits quan es transfereix" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "so quan es completa la transferència assistida" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "so quan falla la transferència assitida" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recarrega la configuració de maquinari" + +#~ msgid "Reboot Method" +#~ msgstr "Mètode de Reinici" + +#~ msgid "Parameter" +#~ msgstr "Paràmetre" + +#~ msgid "Option type" +#~ msgstr "Tipus d'opció" + +#~ msgid "User name" +#~ msgstr "Nom d'usuari" + +#~ msgid "IAX General Options" +#~ msgstr "Opcions generals IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Permet Codecs" + +#~ msgid "Static" +#~ msgstr "Estàtic" + +#~ msgid "Write Protect" +#~ msgstr "Protecció d'escriptura" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferència Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN d'administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN de reunió" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opcions generals de conferència Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de memòries intermitges d'àudio de 20 ms a utilitzar" + +#~ msgid "Modules" +#~ msgstr "Mòduls" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicació de recepció d'alarma" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicació d'autenticació" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Assegura't que asterisk no desa CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Comprova que el canal estigui disponible" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escolta a qualsevol canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Aplicació de control de reproducció" + +#~ msgid "Cuts up variables" +#~ msgstr "Talla les variables" + +#~ msgid "Database access functions" +#~ msgstr "Funcions d'accés a base de dades" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicació de marcatge" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicació de màquina de dictat virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Suport de recollida de trucades adreçades" + +#~ msgid "Extension Directory" +#~ msgstr "Directori de connectors" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicació DISA (Direct Inward System Access)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Bolca les variables de canal de l'aplicació" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicació d'eco simple" + +#~ msgid "ENUM Lookup" +#~ msgstr "Consulta ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reavalua cadenes" + +#~ msgid "Executes applications" +#~ msgstr "Executa aplicacions" + +#~ msgid "External IVR application interface" +#~ msgstr "Interfície d'aplicació IVR externa" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurca el CDR en 2 entitats separades" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtingues la ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Rutines de gestió de grup" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codifica i emet via icecast i ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicació de transmissió d'imatge" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Cerca la ID/nom/número de qui truca de negre" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Cerca la ID/nom/número de qui truca de la base de dades local" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de connectors" + +#~ msgid "A simple math Application" +#~ msgstr "Una aplicació de matemàtiques simple" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicació de suma de verificació MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicació de prova de milliwat digital (mu-law)" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Registra una trucada i mescla l'àudio durant la gravació" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicació d'anunci de trucades i trucada en espera" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicació de reproducció trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requereix que s'entri un número de telèfon" + +#~ msgid "True Call Queueing" +#~ msgstr "Encuament de trucades real" + +#~ msgid "Random goto" +#~ msgstr "Goto aleatori" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicació de lectura de variables" + +#~ msgid "Read in a file" +#~ msgstr "Llegeix en un fitxer" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Cerca/reescriptura de dades en temps real" + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplicació d'enregistrament trivial" + +#~ msgid "Say time" +#~ msgstr "Digues l'hora" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Envia aplicació de dígits DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Envia aplicacions de text" + +#~ msgid "Set CallerID Application" +#~ msgstr "Estableix l'aplicació CallerID" + +#~ msgid "CDR user field apps" +#~ msgstr "Aplicacions de camp d'usuari CDR" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load => .so ; Estableix el nom CallerID" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load => .so ; Estableix el número CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Estableix el número RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Estableix la capacitat de transferència XDSI" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Gestor SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Penja el canal sol·licitat" + +#~ msgid "Stack Routines" +#~ msgstr "Rutines de pila" + +#~ msgid "Generic System() application" +#~ msgstr "Aplicació genèrica de System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback amb Detecció de Parla" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplicació de proves d'interfície" + +#~ msgid "Transfer" +#~ msgstr "Transfereix" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Envia aplicacions d'URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplicació d'esdeveniments personalitzats d'usuari" + +#~ msgid "Send verbose output" +#~ msgstr "Envia sortida detallada" + +#~ msgid "Voicemail" +#~ msgstr "Bústia de veu" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Espera fins el primer to després del temps" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Espera l'aplicació de silenci" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Execució de bucles while i condicionals" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Valors de Backend CDR separats per comes" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Valors de Backend CDR personalitzats separats per comes" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Backend CDR del gestor de trucades Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Backend CDR MySQL" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Backend CDR PostgreSQL" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Backend CDR SQLite" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Canal de l'Agent Proxy" + +#~ msgid "Option chan_iax2" +#~ msgstr "Opció chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Canal de proxy local" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Protocol d'inicialització de sessió (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codificador/Decodificador PCM adaptatiu diferencial" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador de llei A" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codificador/Decodificador directe de llei A i Mu" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodificador ITU G.726-32kbps G726" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Còdec de traducció GSM/PCM16 (lineal amb signe)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Còdec de traducció Speex/PCM16 (lineal amb signe)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador llei Mu" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Format AU de Sun Microsystems (lineal amb signe)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Format de fitxer de marca de temps simple G.723.1" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Dades Raw G.726 (16/24/32/40kbps)" + +#~ msgid "Raw G729 data" +#~ msgstr "Dades Raw G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Dades Raw GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Dades Raw h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Imatge JPEG (Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Suport d'àudio Raw llei-u 8khz (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load => .so ; suport d'àudio Raw llei-a 8khz PCM" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Suport d'àudio Raw amb signe lineal (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Format de fitxer Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Format Microsoft WAV (8000hz amb signe lineal)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Format Microsoft WAV (GSM propietari)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Functions de dialplan relacionades amb la ID de qui truca" + +#~ msgid "ENUM Functions" +#~ msgstr "Funcions ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Funcions de codificació / decodificació d'URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilador del llenguatge de connectors d'Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuració del connector de text" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load => .s ; Funcions integrades dialplan" + +#~ msgid "Loopback Switch" +#~ msgstr "Switch loopback" + +#~ msgid "Realtime Switch" +#~ msgstr "Switch en temps real" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Suport de gestió de cues sortint" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Marcatge)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Configuració del recurs MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Configuració del recurs ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Mòdul PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Signatures digitals criptogràfiques" + +#~ msgid "Call Parking Resource" +#~ msgstr "Recurs de trucada en espera" + +#~ msgid "Indications Configuration" +#~ msgstr "Configuració d'indicacions" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Recurs de monitoreig de trucades" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Recurs de música en espera" + +#~ msgid "ODBC Resource" +#~ msgstr "Recurs ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Mòdul SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Mòdul SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Música en espera" + +#~ msgid "Application" +#~ msgstr "Aplicació" + +#~ msgid "Directory of Music" +#~ msgstr "Directori de música" + +#~ msgid "Option mode" +#~ msgstr "Mode d'opció" + +#~ msgid "Random Play" +#~ msgstr "Reproducció aleatòria" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Domini d'identitat primari per les capçaleres From:" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Usuari d'inici (requerit per diversos proveïdors SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Truca en contextos d'entrades dialplan" + +#~ msgid "Allow Insecure for" +#~ msgstr "Permet insegur per" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Bústia de veu per MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre el telèfon i l'Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Comprova etiquetes a les capçaleres" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Temps d'esperi per contestar (ms) per caigudes de connexió" + +#~ msgid "Register connection" +#~ msgstr "Registra connexió" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Truca el propi connector per la bústia de veu" + +#~ msgid "Client Type" +#~ msgstr "Tipus de client" + +#~ msgid "Username" +#~ msgstr "Nom d'usuari" + +#~ msgid "Section sipgeneral" +#~ msgstr "Secció sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Permet còdecs" + +#~ msgid "SIP realm" +#~ msgstr "Reialme SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Opcions generals de bústia de veu" + +#~ msgid "From Email address of server" +#~ msgstr "Adreça de correu electrònic d'origen del servidor" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Bústies de la bústia de veu" + +#~ msgid "Email contains attachment" +#~ msgstr "El correu electrònic conté fitxers adjunts" + +#~ msgid "Email" +#~ msgstr "Correu electrònic" + +#~ msgid "Display Name" +#~ msgstr "Nom a mostrar" + +#~ msgid "Password" +#~ msgstr "Contrasenya" + +#~ msgid "zone" +#~ msgstr "zona" + +#~ msgid "Voice Zone settings" +#~ msgstr "Configuració de zona de veu" + +#~ msgid "Message Format" +#~ msgstr "Format de missatge" diff --git a/applications/luci-app-asterisk/po/cs/asterisk.po b/applications/luci-app-asterisk/po/cs/asterisk.po new file mode 100644 index 00000000..7341d57c --- /dev/null +++ b/applications/luci-app-asterisk/po/cs/asterisk.po @@ -0,0 +1,11 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" diff --git a/applications/luci-app-asterisk/po/de/asterisk.po b/applications/luci-app-asterisk/po/de/asterisk.po new file mode 100644 index 00000000..f289849b --- /dev/null +++ b/applications/luci-app-asterisk/po/de/asterisk.po @@ -0,0 +1,131 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-02-23 16:29+0200\n" +"Last-Translator: Martin \n" +"Language-Team: LANGUAGE \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk Grundeinstellungen" + +#~ msgid "AGI directory" +#~ msgstr "AGI - Verzeichnis" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Audiodateien während der Aufnahme zwischenspeichern" + +#~ msgid "Debug Level" +#~ msgstr "Debug Stufe" + +#~ msgid "Disable some warnings" +#~ msgstr "Schalte einige Warnungen aus" + +#~ msgid "Dump core on crash" +#~ msgstr "Speicherabbild bei Absturz erstellen" + +#~ msgid "High Priority" +#~ msgstr "Hohe Priorität" + +#~ msgid "Initialise Crypto" +#~ msgstr "Verschlüsselung initialisieren" + +#~ msgid "Use Internal Timing" +#~ msgstr "Interne Zeitreferenz benutzen" + +#~ msgid "Log directory" +#~ msgstr "Log - Verzeichnis" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximale Anruferanzahl" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximale CPU Auslastung um eingehende Anrufe anzunehmen" + +#~ msgid "Disable console colors" +#~ msgstr "Farbige Ausgabe auf der Konsole deaktivieren" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Verzeichnis zum Zwischenspeichern von Audiodateien" + +#~ msgid "The Group to run as" +#~ msgstr "zu benutzende Gruppenkennung" + +#~ msgid "The User to run as" +#~ msgstr "zu benutzende Benutzerkennung" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Sprachnachrichten Puffer" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Systemnamen als Präfix von UniquID benutzen" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Transcode Pfade durch SLINEAR bauen, indirekt" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Übertrage Stille (SLINEAR) während der Aufnahme eines Kanals" + +#~ msgid "Verbose Level" +#~ msgstr "Detailgrad" + +#~ msgid "Allow transfer" +#~ msgstr "Übertragung erlauben" + +#~ msgid "Clear global vars" +#~ msgstr "globale Variablen Zurücksetzen" + +#~ msgid "localzone" +#~ msgstr "Zeitzone" + +#~ msgid "Connection to use" +#~ msgstr "zu verwendende Verbindung" + +#~ msgid "One touch record key" +#~ msgstr "Sofortaufnahmetaste" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Hardwarekonfiguration neuladen" + +#~ msgid "Reboot Method" +#~ msgstr "Neustartmethode" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "User name" +#~ msgstr "Benutzername" + +#~ msgid "IAX General Options" +#~ msgstr "IAX Allgemeine Einstellungen" + +#~ msgid "Allow Codecs" +#~ msgstr "Codecs erlauben" + +#~ msgid "Admin PIN" +#~ msgstr "Admin PIN" + +#~ msgid "Modules" +#~ msgstr "Module" + +#~ msgid "Check if channel is available" +#~ msgstr "Prüfen, ob der Kanal verfügbar ist" + +#~ msgid "Control Playback Application" +#~ msgstr "Anwendung zur Wiedergabesteuerung" + +#~ msgid "Executes applications" +#~ msgstr "startet Anwendungen" + +#~ msgid "A simple math Application" +#~ msgstr "Einfache Mathe-Anwendung" + +#~ msgid "MD5 checksum Application" +#~ msgstr "MD5-Prüfsummen Anwendung" diff --git a/applications/luci-app-asterisk/po/el/asterisk.po b/applications/luci-app-asterisk/po/el/asterisk.po new file mode 100644 index 00000000..7a0fee77 --- /dev/null +++ b/applications/luci-app-asterisk/po/el/asterisk.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-03-19 14:55+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \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 "Asterisk General Options" +#~ msgstr "Γενικές επιλογές του Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Φάκελος AGI" + +#~ msgid "Debug Level" +#~ msgstr "Επίπεδο αποσφαλμάτωσης" + +#~ msgid "Disable some warnings" +#~ msgstr "Απενεργοποίηση ορισμένων μηνυμάτων" + +#~ msgid "High Priority" +#~ msgstr "Υψηλή Προτεραιότητα" + +#~ msgid "Initialise Crypto" +#~ msgstr "Αρχικοποίηση Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Χρήση εσωτερικού χρονόμετρου" + +#~ msgid "Log directory" +#~ msgstr "Φάκελος καταγραφής" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Μέγιστος επιτρεπόμενος αριθμός κλήσεων" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Μέγιστος φόρτος για παύση εισερχόμενων κλήσεων" + +#~ msgid "Disable console colors" +#~ msgstr "Απενεργοποίηση χρωμάτων κονσόλας" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Κρυφός φάκελος αρχείων ήχου" + +#~ msgid "include" +#~ msgstr "περιλαμβάνω" + +#~ msgid "Clear global vars" +#~ msgstr "Καθαρισμός γενικών μεταβλητών" + +#~ msgid "Connection to use" +#~ msgstr "Χρήση σύνδεσης" + +#~ msgid "Reboot Method" +#~ msgstr "Μέθοδος Επανεκκίνησης" + +#~ msgid "Parameter" +#~ msgstr "Παράμετρος" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Εικόνα JPEG (Joint Picture Experts Group)" + +#~ msgid "Application" +#~ msgstr "Εφαρμογή" diff --git a/applications/luci-app-asterisk/po/en/asterisk.po b/applications/luci-app-asterisk/po/en/asterisk.po new file mode 100644 index 00000000..fc095087 --- /dev/null +++ b/applications/luci-app-asterisk/po/en/asterisk.po @@ -0,0 +1,680 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: 2011-06-03 10:45+0200\n" +"Last-Translator: Ladislav \n" +"Language-Team: LANGUAGE \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 "Asterisk General Options" +#~ msgstr "Asterisk General Options" + +#~ msgid "AGI directory" +#~ msgstr "AGI directory" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache recorded sound files during recording" + +#~ msgid "Debug Level" +#~ msgstr "Debug Level" + +#~ msgid "Disable some warnings" +#~ msgstr "Disable some warnings" + +#~ msgid "Dump core on crash" +#~ msgstr "Dump core on crash" + +#~ msgid "High Priority" +#~ msgstr "High Priority" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Use Internal Timing" + +#~ msgid "Log directory" +#~ msgstr "Log directory" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximum number of calls allowed" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximum load to stop accepting new calls" + +#~ msgid "Disable console colors" +#~ msgstr "Disable console colors" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Sound files Cache directory" + +#~ msgid "The Group to run as" +#~ msgstr "The Group to run as" + +#~ msgid "The User to run as" +#~ msgstr "The User to run as" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Voicemail Spool directory" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefix UniquID with system name" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Build transcode paths via SLINEAR, not directly" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmit SLINEAR silence while recording a channel" + +#~ msgid "Verbose Level" +#~ msgstr "Verbose Level" + +#~ msgid "Section dialplan" +#~ msgstr "Section dialplan" + +#~ msgid "include" +#~ msgstr "include" + +#~ msgid "Dialplan Extension" +#~ msgstr "Dialplan Extension" + +#~ msgid "Dialplan General Options" +#~ msgstr "Dialplan General Options" + +#~ msgid "Allow transfer" +#~ msgstr "Allow transfer" + +#~ msgid "Clear global vars" +#~ msgstr "Clear global vars" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Dialplan Conference" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Dialplan Voicemail" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zones for Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix to add matching dialplans" + +#~ msgid "Match International prefix" +#~ msgstr "Match International prefix" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefix (0) to add/remove to/from international numbers" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "Match plan" +#~ msgstr "Match plan" + +#~ msgid "Connection to use" +#~ msgstr "Connection to use" + +#~ msgid "Feature Key maps" +#~ msgstr "Feature Key maps" + +#~ msgid "Attended transfer key" +#~ msgstr "Attended transfer key" + +#~ msgid "Blind transfer key" +#~ msgstr "Blind transfer key" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Key to Disconnect call" + +#~ msgid "Key to Park call" +#~ msgstr "Key to Park call" + +#~ msgid "Parking Feature" +#~ msgstr "Parking Feature" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI Park" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Attended transfer timeout (sec)" + +#~ msgid "One touch record key" +#~ msgstr "One touch record key" + +#~ msgid "Name of call context for parking" +#~ msgstr "Name of call context for parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Sound file to play to parked caller" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Max time (ms) between digits for feature activation" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Method to Find Parking slot" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Play courtesy tone to" + +#~ msgid "Enable Parking" +#~ msgstr "Enable Parking" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extension to dial to park" + +#~ msgid "Parking time (secs)" +#~ msgstr "Parking time (secs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Range of extensions for call parking" + +#~ msgid "Pickup extension" +#~ msgstr "Pickup extension" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Seconds to wait between digits when transferring" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "sound when attended transfer is complete" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Sound when attended transfer fails" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Reload Hardware Config" + +#~ msgid "Reboot Method" +#~ msgstr "Reboot Method" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "Option type" +#~ msgstr "Option type" + +#~ msgid "User name" +#~ msgstr "User name" + +#~ msgid "IAX General Options" +#~ msgstr "IAX General Options" + +#~ msgid "Allow Codecs" +#~ msgstr "Allow Codecs" + +#~ msgid "Static" +#~ msgstr "Static" + +#~ msgid "Write Protect" +#~ msgstr "Write Protect" + +#~ msgid "Meetme Conference" +#~ msgstr "Meetme Conference" + +#~ msgid "Admin PIN" +#~ msgstr "Admin PIN" + +#~ msgid "Meeting PIN" +#~ msgstr "Meeting PIN" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Meetme Conference General Options" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Number of 20ms audio buffers to be used" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Alarm Receiver Application" + +#~ msgid "Authentication Application" +#~ msgstr "Authentication Application" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Make sure asterisk doesn't save CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Check if channel is available" + +#~ msgid "Listen in on any channel" +#~ msgstr "Listen in on any channel" + +#~ msgid "Control Playback Application" +#~ msgstr "Control Playback Application" + +#~ msgid "Cuts up variables" +#~ msgstr "Cuts up variables" + +#~ msgid "Database access functions" +#~ msgstr "Database access functions" + +#~ msgid "Dialing Application" +#~ msgstr "Dialing Application" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Virtual Dictation Machine Application" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Directed Call Pickup Support" + +#~ msgid "Extension Directory" +#~ msgstr "Extension Directory" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "DISA (Direct Inward System Access) Application" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Dump channel variables Application" + +#~ msgid "Simple Echo Application" +#~ msgstr "Simple Echo Application" + +#~ msgid "ENUM Lookup" +#~ msgstr "ENUM Lookup" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reevaluates strings" + +#~ msgid "Executes applications" +#~ msgstr "Executes applications" + +#~ msgid "External IVR application interface" +#~ msgstr "External IVR application interface" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Fork The CDR into 2 separate entities" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Get ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Group Management Routines" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Encode and Stream via icecast and ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Image Transmission Application" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Look up Caller*ID name/number from black" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Look up CallerID Name from local databas" + +#~ msgid "Extension Macros" +#~ msgstr "Extension Macros" + +#~ msgid "A simple math Application" +#~ msgstr "A simple math Application" + +#~ msgid "MD5 checksum Application" +#~ msgstr "MD5 checksum Application" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Digital Milliwatt (mu-law) Test Application" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Record a call and mix the audio during the recording" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Call Parking and Announce Application" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Trivial Playback Application" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Require phone number to be entered" + +#~ msgid "True Call Queueing" +#~ msgstr "True Call Queueing" + +#~ msgid "Random goto" +#~ msgstr "Random goto" + +#~ msgid "Read Variable Application" +#~ msgstr "Read Variable Application" + +#~ msgid "Read in a file" +#~ msgstr "Read in a file" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Realtime Data Lookup/Rewrite" + +#~ msgid "Trivial Record Application" +#~ msgstr "Trivial Record Application" + +#~ msgid "Say time" +#~ msgstr "Say time" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Send DTMF digits Application" + +#~ msgid "Send Text Applications" +#~ msgstr "Send Text Applications" + +#~ msgid "Set CallerID Application" +#~ msgstr "Set CallerID Application" + +#~ msgid "CDR user field apps" +#~ msgstr "CDR user field apps" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load => .so ; Set CallerID Name" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load => .so ; Set CallerID Number" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Set RDNIS Number" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Set ISDN Transfer Capability" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "SMS/PSTN handler" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Hangs up the requested channel" + +#~ msgid "Stack Routines" +#~ msgstr "Stack Routines" + +#~ msgid "Generic System() application" +#~ msgstr "Generic System() application" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback with Talk Detection" + +#~ msgid "Interface Test Application" +#~ msgstr "Interface Test Application" + +#~ msgid "Transfer" +#~ msgstr "Transfer" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Send URL Applications" + +#~ msgid "Custom User Event Application" +#~ msgstr "Custom User Event Application" + +#~ msgid "Send verbose output" +#~ msgstr "Send verbose output" + +#~ msgid "Voicemail" +#~ msgstr "Voicemail" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Waits until first ring after time" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Wait For Silence Application" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "While Loops and Conditional Execution" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Comma Separated Values CDR Backend" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Customizable Comma Separated Values CDR Backend" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Asterisk Call Manager CDR Backend" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "MySQL CDR Backend" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "PostgreSQL CDR Backend" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "SQLite CDR Backend" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agent Proxy Channel" + +#~ msgid "Option chan_iax2" +#~ msgstr "Option chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Local Proxy Channel" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptive Differential PCM Coder/Decoder" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law Coder/Decoder" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law and Mulaw direct Coder/Decoder" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32kbps G726 Transcoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (signed linear) Codec Translation" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (signed linear) Codec Translator" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law Coder/Decoder" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (signed linear)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "G.723.1 Simple Timestamp File Format" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Raw G.726 (16/24/32/40kbps) data" + +#~ msgid "Raw G729 data" +#~ msgstr "Raw G729 data" + +#~ msgid "Raw GSM data" +#~ msgstr "Raw GSM data" + +#~ msgid "Raw h263 data" +#~ msgstr "Raw h263 data" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "JPEG (Joint Picture Experts Group) Image" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Raw uLaw 8khz Audio support (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load => .so ; Raw aLaw 8khz PCM Audio support" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Raw Signed Linear Audio support (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Dialogic VOX (ADPCM) File Format" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Microsoft WAV format (8000hz Signed Line" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Microsoft WAV format (Proprietary GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Caller ID related dialplan functions" + +#~ msgid "ENUM Functions" +#~ msgstr "ENUM Functions" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "URI encoding / decoding functions" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Extension Language Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Text Extension Configuration" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load => .so ; Builtin dialplan functions" + +#~ msgid "Loopback Switch" +#~ msgstr "Loopback Switch" + +#~ msgid "Realtime Switch" +#~ msgstr "Realtime Switch" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Outgoing Spool Support" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Dialer)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL Config Resource" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC Config Resource" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL Module" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Cryptographic Digital Signatures" + +#~ msgid "Call Parking Resource" +#~ msgstr "Call Parking Resource" + +#~ msgid "Indications Configuration" +#~ msgstr "Indications Configuration" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Call Monitoring Resource" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Music On Hold Resource" + +#~ msgid "ODBC Resource" +#~ msgstr "ODBC Resource" + +#~ msgid "SMDI Module" +#~ msgstr "SMDI Module" + +#~ msgid "SNMP Module" +#~ msgstr "SNMP Module" + +#~ msgid "Music On Hold" +#~ msgstr "Music On Hold" + +#~ msgid "Application" +#~ msgstr "Application" + +#~ msgid "Directory of Music" +#~ msgstr "Directory of Music" + +#~ msgid "Option mode" +#~ msgstr "Option mode" + +#~ msgid "Random Play" +#~ msgstr "Random Play" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF mode" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Primary domain identity for From: headers" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "From user (required by many SIP providers)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Ring on incoming dialplan contexts" + +#~ msgid "Allow Insecure for" +#~ msgstr "Allow Insecure for" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Mailbox for MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT between phone and Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Check tags in headers" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Reply Timeout (ms) for down connection" + +#~ msgid "Register connection" +#~ msgstr "Register connection" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Dial own extension for mailbox" + +#~ msgid "Client Type" +#~ msgstr "Client Type" + +#~ msgid "Username" +#~ msgstr "Username" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Allow codecs" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Voicemail general options" + +#~ msgid "From Email address of server" +#~ msgstr "From Email address of server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Voice Mail boxes" + +#~ msgid "Email contains attachment" +#~ msgstr "Email contains attachment" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Display Name" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Voice Zone settings" + +#~ msgid "Message Format" +#~ msgstr "Message Format" diff --git a/applications/luci-app-asterisk/po/es/asterisk.po b/applications/luci-app-asterisk/po/es/asterisk.po new file mode 100644 index 00000000..f42ddb4f --- /dev/null +++ b/applications/luci-app-asterisk/po/es/asterisk.po @@ -0,0 +1,355 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-04-16 00:52+0200\n" +"Last-Translator: Jose \n" +"Language-Team: LANGUAGE \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opciones Generales de Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directorio AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Almacena los ficheros de sonido mientras se graba" + +#~ msgid "Debug Level" +#~ msgstr "Nivel de Depuración" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactivar algunos avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Volcar núcleo en caso de fallo" + +#~ msgid "High Priority" +#~ msgstr "Prioridad Alta" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar temporización interna" + +#~ msgid "Log directory" +#~ msgstr "Directorio de registro" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número máximo de llamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Carga máxima para dejar de admitir nuevas llamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desactivar colores en la consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directorio de caché de archivos de sonido" + +#~ msgid "The Group to run as" +#~ msgstr "Grupo en el que ejecutarse" + +#~ msgid "The User to run as" +#~ msgstr "Usuario como el que se ejecutará" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio de la cola de mensajes de voz" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefijo UniquID con el nombre del sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir las rutas de transcodificación usando SLINEAR, no directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR mientras graba un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivel de detalle" + +#~ msgid "Section dialplan" +#~ msgstr "Sección Dialplan" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensión Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opciones generales de Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferencia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpiar las variables globales" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferencia Dialplan" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Buzón de voz de Dialplan" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zonas de marcado para Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefijo para añadir coincidencias de plan de marcado" + +#~ msgid "Match International prefix" +#~ msgstr "Coincidir con el prefijo internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefijo (0) para añadir/eliminar a/de números internacionales" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Coincidir con el plan" + +#~ msgid "Connection to use" +#~ msgstr "Conexión que se utilizará" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapa de Funciones Clave" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferencia asistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferencia ciega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla para desconectar la llamada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla para retener la llamada" + +#~ msgid "Parking Feature" +#~ msgstr "Función de llamada en espera" + +#~ msgid "ADSI Park" +#~ msgstr "Llamada en espera ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Tiempo de espera de transferencia asistida (seg)" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de grabacion con una sola tecla" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nombre del contexto de la llamada en espera" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Archivo de sonido para reproducir en la llamada en espera" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Tiempo máximo (en ms) entre digitos para la activación de funciones" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Método para encontrar una ranura de llamada en espera" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Reproducir tono de cortesía en" + +#~ msgid "Enable Parking" +#~ msgstr "Activar llamadas en espera" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensión a marcar para dejar en espera una llamada" + +#~ msgid "Parking time (secs)" +#~ msgstr "Tiempo de llamada en espera (segs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rango de extensiones para llamadas en espera" + +#~ msgid "Pickup extension" +#~ msgstr "Extensión de Pickup" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segundos de espera entre digitos mientras se transfiere" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "sonido cuando se completa la transferencia asistida" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "sonido para cuando falla la transferencia asistida" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recargar la configuración del Hardware" + +#~ msgid "Reboot Method" +#~ msgstr "Método de reinicio" + +#~ msgid "Parameter" +#~ msgstr "Parámetro" + +#~ msgid "Option type" +#~ msgstr "Tipo de opción" + +#~ msgid "User name" +#~ msgstr "Nombre de Usuario" + +#~ msgid "IAX General Options" +#~ msgstr "Opciones Generales de IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Permitir Codecs" + +#~ msgid "Static" +#~ msgstr "Estático" + +#~ msgid "Write Protect" +#~ msgstr "Protección contra escritura" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferencia Meetme (entre dos)" + +#~ msgid "Admin PIN" +#~ msgstr "PIN de Administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN de Reunión (Meeting)" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opciones generales de conferencia Meetme (entre dos)" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de memorias intermedias de audio de 20 ms a utilizar" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicación de Recepción de Alarma" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicación de autenticación" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Asegúrate que asterisk no graba CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Comprueba que el canal esté disponible" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escuchar en cualquier canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Aplicación para el control de reproducción" + +#~ msgid "Cuts up variables" +#~ msgstr "Variables de corte" + +#~ msgid "Database access functions" +#~ msgstr "Funciones de acceso a la Base de Datos" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicación de marcado telefónico" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicación de máquina de Dictado Virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Apoyo a la captura de llamadas dirigidas" + +#~ msgid "Extension Directory" +#~ msgstr "Directorio de Extensiones" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicación DISA (Acceso directo entrante al sistema)" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicación de Eco Simple" + +#~ msgid "ENUM Lookup" +#~ msgstr "Consulta ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reevaluar secuencia de caracteres" + +#~ msgid "Executes applications" +#~ msgstr "Ejecuta aplicaciones" + +#~ msgid "External IVR application interface" +#~ msgstr "Interfaz de aplicación IVR externa" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurcar el CDR en 2 entidades separadas" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtener el ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Rutinas de Administración de grupo" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codifica y emite a través de icecast e ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicación de transmisión de imagen" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Buscar la identidad del llamante nombre/número en la lista negra" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "" +#~ "Buscar el nombre de identidad del llamante en las bases de datos locales" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de Extensión" + +#~ msgid "A simple math Application" +#~ msgstr "Una simple aplicación matemática" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicación de suma de verificación MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicación de testeo de Milivatios Digitales (mu-law)" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Grabar una llamada y mezclar el sonido durante la grabación" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicación de Anuncio y Llamada en Espera" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicación de reproducción trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requiere que se introduzca un número de teléfono" + +#~ msgid "True Call Queueing" +#~ msgstr "Lista de espera real de llamadas" + +#~ msgid "Random goto" +#~ msgstr "Goto (ir a) Aleatorio" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicación de lectura de variables" + +#~ msgid "Read in a file" +#~ msgstr "Leer en un archivo" diff --git a/applications/luci-app-asterisk/po/fr/asterisk.po b/applications/luci-app-asterisk/po/fr/asterisk.po new file mode 100644 index 00000000..63d085a1 --- /dev/null +++ b/applications/luci-app-asterisk/po/fr/asterisk.po @@ -0,0 +1,569 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-11-23 22:34+0200\n" +"Last-Translator: fredb \n" +"Language-Team: LANGUAGE \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Paramètres généraux d'Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Répertoire AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Mes les sons enregistrés en cache pendant l'enregistrement" + +#~ msgid "Debug Level" +#~ msgstr "Niveau de déboguage" + +#~ msgid "Disable some warnings" +#~ msgstr "Désactiver certaines alertes" + +#~ msgid "Dump core on crash" +#~ msgstr "Créer une image-core en cas de crash" + +#~ msgid "High Priority" +#~ msgstr "Priorité haute" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise le chiffrage" + +#~ msgid "Use Internal Timing" +#~ msgstr "Utiliser un délai interne" + +#~ msgid "Log directory" +#~ msgstr "Répertoire des journaux" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Nombre maximum d'appels autorisés" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Charge maximum jusqu'à laquelle on accepte de nouveaux appels" + +#~ msgid "Disable console colors" +#~ msgstr "Désactiver les couleurs de la console" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Répertoire de cache des ficihers-sons" + +#~ msgid "The Group to run as" +#~ msgstr "Exécuté avec ce groupe" + +#~ msgid "The User to run as" +#~ msgstr "Exécuté avec cet utilisateur" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Répertoire de stockage du répondeur" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Préfixer le « UniquID » avec le nom du système" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Construire des chemins de traduction via SLINEAR, pas directement" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmettre le silence SLINEAR lors de l'enregistrement d'un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Niveau de verbosité" + +#~ msgid "Section dialplan" +#~ msgstr "Section du plan de numérotation" + +#~ msgid "include" +#~ msgstr "Inclure" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extension du plan de numérotation" + +#~ msgid "Dialplan General Options" +#~ msgstr "Paramètres généraux du plan de numérotation" + +#~ msgid "Allow transfer" +#~ msgstr "Permettre le transfert" + +#~ msgid "Clear global vars" +#~ msgstr "Effacer les variables globales" + +#~ msgid "Dialplan Conference" +#~ msgstr "Règles d'aiguillage pour la conférence" + +#~ msgid "Dialplan Time" +#~ msgstr "Règles d'aiguillage liées au temps" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Règles d'aiguillage de la messagerie vocale" + +#~ msgid "Match International prefix" +#~ msgstr "Préfixe correspondant à l'international" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Préfixe (0) à ajouter à/retirer d'un numéro international" + +#~ msgid "localzone" +#~ msgstr "zone locale" + +#~ msgid "Match plan" +#~ msgstr "Règle de correspondance" + +#~ msgid "Connection to use" +#~ msgstr "Connexion à utiliser" + +#~ msgid "Blind transfer key" +#~ msgstr "Touche de transfert en aveugle" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Touche pour déconnecter un appel" + +#~ msgid "Key to Park call" +#~ msgstr "Touche pour parquer un appel" + +#~ msgid "Parking Feature" +#~ msgstr "Capacité de mise en parking" + +#~ msgid "ADSI Park" +#~ msgstr "Parking ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Délai max d'un transfert programmé (secondes)" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nom du contexte d'appel pour une mise en parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fichier-son à jouer aux appelants mis en parking" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "" +#~ "Durée max (en ms) entre les chiffres pour l'activation d'une commande" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Méthode pour trouver une place de parking" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Jouer une tonalité de courtoisie à" + +#~ msgid "Enable Parking" +#~ msgstr "Activer la mise en parking" + +#~ msgid "Parking time (secs)" +#~ msgstr "Durée de mise en parking (secondes)" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Attente en secondes entre les chiffres Lors d'un transfert" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "Son joué quand un transfert programmé est effectué" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Son joué quand nu transfert programmé rate" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Relit la configuration matérielle" + +#~ msgid "Reboot Method" +#~ msgstr "Méthode de redémarrage" + +#~ msgid "Parameter" +#~ msgstr "Paramètre" + +#~ msgid "Option type" +#~ msgstr "Type d'option" + +#~ msgid "User name" +#~ msgstr "Nom d'utilisateur" + +#~ msgid "IAX General Options" +#~ msgstr "Paramètres généraux du protocole IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Codecs autorisés" + +#~ msgid "Static" +#~ msgstr "Statique" + +#~ msgid "Write Protect" +#~ msgstr "Protection contre l'écriture" + +#~ msgid "Meetme Conference" +#~ msgstr "Conférence « Meetme »" + +#~ msgid "Admin PIN" +#~ msgstr "ID d'administrateur" + +#~ msgid "Meeting PIN" +#~ msgstr "Code de conférence" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Options générales de conférence « Meetme »" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Nombre de buffers audio de 20 ms à utiliser" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Application de réception d'alarme" + +#~ msgid "Authentication Application" +#~ msgstr "Application d'authentification" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "S'assure qu'Asterisk ne sauve pas le CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Vérifie que le canal est libre" + +#~ msgid "Listen in on any channel" +#~ msgstr "Écoute sur n'importe quel canal" + +#~ msgid "Database access functions" +#~ msgstr "Fonctions d'accès aux bases de données" + +#~ msgid "Dialing Application" +#~ msgstr "Application de numérotation" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Application de dictaphone virtuel" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Application de copie des variables d'un canal" + +#~ msgid "Simple Echo Application" +#~ msgstr "Application de simple écho" + +#~ msgid "ENUM Lookup" +#~ msgstr "Résolution d'un ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Ré-évaluer les chaînes" + +#~ msgid "Executes applications" +#~ msgstr "Lance les applications" + +#~ msgid "External IVR application interface" +#~ msgstr "Interface d'application SVI externe" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Dupliquer le CDR en deux entités séparées" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtenir le « ADSI CPE ID »" + +#~ msgid "Group Management Routines" +#~ msgstr "Fonctions de gestion des groupes" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Coder et diffuser via icecast et ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Application d'envoi d'image" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Rechercher le nom de l'appelant dans la base locale" + +#~ msgid "Extension Macros" +#~ msgstr "Macros d'extension" + +#~ msgid "A simple math Application" +#~ msgstr "Une simple application mathématique" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Application de signature MD5" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Enregistre un appelle et mixe le son pendant l'enregistrement" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Application de mise en parking d'appel et annonce" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Application de simple écoute" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Nécessite d'entrer un numéro de téléphone" + +#~ msgid "True Call Queueing" +#~ msgstr "Véritable sérialisation des appels" + +#~ msgid "Read Variable Application" +#~ msgstr "Application de lecture d'une variable" + +#~ msgid "Read in a file" +#~ msgstr "Lire dans un fichier" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Recherche/ré-écriture de données en temps-réel" + +#~ msgid "Trivial Record Application" +#~ msgstr "Application de simple enregistrement" + +#~ msgid "Say time" +#~ msgstr "Dis l'heure" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Application d'envoi de chiffres en DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Applications d'envoi de texte" + +#~ msgid "Set CallerID Application" +#~ msgstr "Application de positionnement de l'identifiant de l'appelant" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "" +#~ "charger => .so ; Positionner le nom dans l'identifiant de l'appelant" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "" +#~ "charger => .so ; Positionner le numéro dans l'identifiant de l'appelant" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Positionner le numéro RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Activer la possibilité de transfert RNIS" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Gestionnaire SMS/RTC" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Raccroche le canal demandé" + +#~ msgid "Stack Routines" +#~ msgstr "Empile les routines" + +#~ msgid "Generic System() application" +#~ msgstr "Application générique System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Jouer un son avec la détection de parole" + +#~ msgid "Interface Test Application" +#~ msgstr "Application de test d'interface" + +#~ msgid "Transfer" +#~ msgstr "Transfert" + +#~ msgid "Send URL Applications" +#~ msgstr "Applications d'envois d'URL" + +#~ msgid "Send verbose output" +#~ msgstr "Envoyer une sortie détaillée" + +#~ msgid "Voicemail" +#~ msgstr "Répondeur" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Application d'attente de silence" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codec PCM différentiel adaptatif (ADPCM)" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codec loi-A" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codec loi-A et loi-Mu directs" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodeur G726 (ITU G.726 32 kbit/s)" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Codec de traduction GSM/PCM16 (linéaire signé)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Codec de traduction Speex/PCM16 (linéaire signé)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codec loi-Mu" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Format Sun Microsystems AU (linéaire signé)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Format de fichier G.723.1 à horodatage simple" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Données brutes G.726 (16/24/32/40 kbit/s)" + +#~ msgid "Raw G729 data" +#~ msgstr "Données brutes G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Données brutes GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Données brutes h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Image JPEG (Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Gestion de l'audio en loi-µ 8 kHz brute (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "Charger => .so ; Gestion de l'audio en loi-A brute PCM 8 kHz" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Gestion de l'audio en linéaire signé brut (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Format de fichier Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Format Microsoft WAV (8 kHz linéaire signé)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Format Microsoft WAV (GSM propriétaire)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Fonctions d'aiguillage des appels liées à l'identifiant d'appel" + +#~ msgid "ENUM Functions" +#~ msgstr "Fonctions ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Fonctions de codage/décodage des URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilateur du langage d'extension d'Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuration de l'extension Texte" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "charger => .so ; fonctions natives d'aiguillages des appels" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Gestion d'un spool sortant" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (composeur automatique)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Ressource de configuration de MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Ressource de configuration d'ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Module PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Signatures de chiffrage numérique" + +#~ msgid "Call Parking Resource" +#~ msgstr "Ressource de mise en parking des appels" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Ressource de supervision des appels" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Ressource de mise en attente musicale" + +#~ msgid "ODBC Resource" +#~ msgstr "Ressource ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Module SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Module SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Mise en attente musicale" + +#~ msgid "Application" +#~ msgstr "Application" + +#~ msgid "Directory of Music" +#~ msgstr "Répertoire sonore" + +#~ msgid "Random Play" +#~ msgstr "morceau choisi aléatoirement" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Identité du domaine primaire pour les entêtes « From: »" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Utilisateur « From » (requis par de nombreux fournisseurs SIP)" + +#~ msgid "Allow Insecure for" +#~ msgstr "Autoriser le mode non sécurisé pour" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Boîte aux lettres pour MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre le téléphone et Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Vérifier les « tags » dans les entêtes" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Délai de réponse (en ms) indiquant une connexion tombée" + +#~ msgid "Register connection" +#~ msgstr "Connexion au registre" + +#~ msgid "Client Type" +#~ msgstr "Type de client" + +#~ msgid "Username" +#~ msgstr "Nom d'utilisateur" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section générale SIP" + +#~ msgid "Allow codecs" +#~ msgstr "Codecs autorisés" + +#~ msgid "SIP realm" +#~ msgstr "Domaine SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Options générales de la messagerie vocale" + +#~ msgid "From Email address of server" +#~ msgstr "Adresse de courrier électronique source du serveur" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Boîtes de messagerie vocale" + +#~ msgid "Email contains attachment" +#~ msgstr "Courriel contenant une pièce-jointe" + +#~ msgid "Email" +#~ msgstr "Courriel" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Password" +#~ msgstr "Mot de passe" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Paramètres de la zone Voix" + +#~ msgid "Message Format" +#~ msgstr "Format de message" diff --git a/applications/luci-app-asterisk/po/he/asterisk.po b/applications/luci-app-asterisk/po/he/asterisk.po new file mode 100644 index 00000000..25ed5bb1 --- /dev/null +++ b/applications/luci-app-asterisk/po/he/asterisk.po @@ -0,0 +1,194 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-07-14 12:48+0200\n" +"Last-Translator: zstorch \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "הגדרות כלליות של Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "תיקית AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "שמור את קבצי הקול במהלך ההקלטה" + +#~ msgid "Debug Level" +#~ msgstr "רמת מצב ניפוי שגיאות" + +#~ msgid "Disable some warnings" +#~ msgstr "בטל חלק מהאזהרות" + +#~ msgid "Dump core on crash" +#~ msgstr "תעד את מצב הליבה בעת נפילת המערכת" + +#~ msgid "High Priority" +#~ msgstr "עדיפות גבוהה" + +#~ msgid "Initialise Crypto" +#~ msgstr "מפעיל את Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "השתמש בשעון הפנימי" + +#~ msgid "Log directory" +#~ msgstr "תיקית התיעוד" + +# צריך לבדוק אם מדובר על שיחות "בו זמנית" אם כן חשוב לציין אם לא הנל טעות חמורה +#, fuzzy +#~ msgid "Maximum number of calls allowed" +#~ msgstr "מקסימום שיחות בו זמנית" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "מקסימות שיחות שבו המערכת תדחה שיחות נוספות" + +#~ msgid "Disable console colors" +#~ msgstr "בטל צבעים במסוף" + +#~ msgid "Sound files Cache directory" +#~ msgstr "תיקית קבצי הקול" + +#~ msgid "The Group to run as" +#~ msgstr "הפעל עם הרשאות קבוצת" + +#~ msgid "The User to run as" +#~ msgstr "הפעל עם הרשאות משתמש" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "תיקית התא קולי" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "הוסף לUniquID את שם המערכת" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "המר תבניות קול ישירות עם SLINEAR" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "שדר שקט של SLINEAR במהלך הקלטה" + +#~ msgid "Verbose Level" +#~ msgstr "רמת דו\"ח המערכת" + +#~ msgid "Time Zone" +#~ msgstr "אזור זמן" + +#~ msgid "Section dialplan" +#~ msgstr "מחלקה בתוכנית השיחות" + +#~ msgid "include" +#~ msgstr "כולל" + +#~ msgid "Dialplan Extension" +#~ msgstr "שלוחה בתוכנית השיחות" + +#~ msgid "Dialplan General Options" +#~ msgstr "הגדרות כללית של תוכנית השיחות" + +#~ msgid "Allow transfer" +#~ msgstr "אפשר העברה" + +#~ msgid "Clear global vars" +#~ msgstr "נקה משתנים כללים" + +#~ msgid "Dialplan Goto" +#~ msgstr "\"לך אל\" בתוכנית השיחות" + +#~ msgid "Dialplan Conference" +#~ msgstr "שיחת ועידה בתוכנית השיחות" + +#~ msgid "Dialplan Time" +#~ msgstr "זמן בתוכנית השיחות" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "תא קולי בתוכנית השיחות" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "אזורי חיוג עבור תוכנית השיחות" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "קידומת להוספה עבור תוכניות שיחה דומות" + +#~ msgid "Match International prefix" +#~ msgstr "השווה קידומת בין לאומית" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "קידומת (0) להוספה או הסרה במספר בין לאומי" + +#~ msgid "localzone" +#~ msgstr "מיקום" + +#~ msgid "Match plan" +#~ msgstr "תוכנית מתאימה" + +#~ msgid "Connection to use" +#~ msgstr "השתמש בחיבור מסוג" + +#~ msgid "Feature Key maps" +#~ msgstr "מיפוי מקשים יעודיים" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "נתב (NAT) בין מכשיר הטלפון לAsterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "בדוק את התגיות בהקדמה" + +#, fuzzy +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "החזר את פרק זמן (timeout) במילישניות עבור חבורים סגורים" + +#~ msgid "Register connection" +#~ msgstr "חיבור רשום (מנוי)" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "חיוג סיפרה בודדת עבור תא דואר" + +#~ msgid "Client Type" +#~ msgstr "סוג הלקוח" + +#~ msgid "Username" +#~ msgstr "שם משתמש" + +#~ msgid "Allow codecs" +#~ msgstr "מקודדים מאושרים" + +#~ msgid "SIP realm" +#~ msgstr "מתחם SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "הגדרות כלליות עבור התא קולי" + +#~ msgid "From Email address of server" +#~ msgstr "שדה דואר אלקטרוני מאת (של השרת)" + +#~ msgid "Voice Mail boxes" +#~ msgstr "תאים קוליים" + +#~ msgid "Email contains attachment" +#~ msgstr "מצורף תוכן ההודעה" + +#~ msgid "Email" +#~ msgstr "דואר אלקטרוני" + +#~ msgid "Display Name" +#~ msgstr "שם תצוגה" + +#~ msgid "Password" +#~ msgstr "סיסמה" + +#~ msgid "zone" +#~ msgstr "אזור" + +#~ msgid "Voice Zone settings" +#~ msgstr "הגדרות אזוריות עבור הקול" + +#~ msgid "Message Format" +#~ msgstr "תבנית ההודעה" diff --git a/applications/luci-app-asterisk/po/hu/asterisk.po b/applications/luci-app-asterisk/po/hu/asterisk.po new file mode 100644 index 00000000..c6a5d81b --- /dev/null +++ b/applications/luci-app-asterisk/po/hu/asterisk.po @@ -0,0 +1,134 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-18 23:18+0200\n" +"Last-Translator: Anonymous Pootle User\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 "Asterisk General Options" +#~ msgstr "Általános Asterisk beállítások" + +#~ msgid "AGI directory" +#~ msgstr "AGI könyvtár" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "A felvett hang fájlok gyorsítótárazása a felvétel alatt" + +#~ msgid "Debug Level" +#~ msgstr "Nyomkövetési szint" + +#~ msgid "Disable some warnings" +#~ msgstr "Néhány figyelmeztetés letilása" + +#~ msgid "Dump core on crash" +#~ msgstr "Memóriatartalom kiírása összeomláskor" + +#~ msgid "High Priority" +#~ msgstr "Magas prioritás" + +#~ msgid "Initialise Crypto" +#~ msgstr "Titkosítás inicializálása" + +#~ msgid "Use Internal Timing" +#~ msgstr "Belső időzítés használata" + +#~ msgid "Log directory" +#~ msgstr "Napló könyvtár" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "A hivások megengedett maximális száma" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "A CPU maximális terhelése új hívások fogadásához" + +#~ msgid "Disable console colors" +#~ msgstr "Konzol színek letiltása" + +#~ msgid "Sound files Cache directory" +#~ msgstr "A gyorsítótárazott hang fájlok könyvtára" + +#~ msgid "The Group to run as" +#~ msgstr "Csoport futtatása mint" + +#~ msgid "The User to run as" +#~ msgstr "Felhasználó futtatása mint" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Hangposta puffer könyvtár" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Rendszer név használata UniquID előtagként" + +#~ msgid "Verbose Level" +#~ msgstr "Részletes szint" + +#~ msgid "Time Zone" +#~ msgstr "Időzóna" + +#~ msgid "include" +#~ msgstr "tartalmaz" + +#~ msgid "Allow transfer" +#~ msgstr "Átvitel engedélyezése" + +#~ msgid "Clear global vars" +#~ msgstr "Globális változók törlése" + +#~ msgid "Enable Parking" +#~ msgstr "Várakoztatás engedélyezése" + +#~ msgid "Parking time (secs)" +#~ msgstr "Várakoztatási idő (másodperc)" + +#~ msgid "Reboot Method" +#~ msgstr "Újraindítás módja" + +#~ msgid "Parameter" +#~ msgstr "Paraméter" + +#~ msgid "IAX General Options" +#~ msgstr "Általános IAX beállítások" + +#~ msgid "Static" +#~ msgstr "Statikus" + +#~ msgid "Write Protect" +#~ msgstr "Írásvédelem" + +#~ msgid "Modules" +#~ msgstr "Modulok" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF mód" + +#~ msgid "Client Type" +#~ msgstr "Ügyfél típusa" + +#~ msgid "Username" +#~ msgstr "Felhasználónév" + +#~ msgid "Email" +#~ msgstr "E-mail" + +#~ msgid "Display Name" +#~ msgstr "Megjelenítendő név" + +#~ msgid "Password" +#~ msgstr "Jelszó" + +#~ msgid "zone" +#~ msgstr "zóna" + +#~ msgid "Voice Zone settings" +#~ msgstr "Hang zóna beállítások" + +#~ msgid "Message Format" +#~ msgstr "Üzenet formátuma" diff --git a/applications/luci-app-asterisk/po/it/asterisk.po b/applications/luci-app-asterisk/po/it/asterisk.po new file mode 100644 index 00000000..f2aa51e9 --- /dev/null +++ b/applications/luci-app-asterisk/po/it/asterisk.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-19 23:40+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk Opzioni Generali" + +#~ msgid "AGI directory" +#~ msgstr "AGI directory" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache dei file audio registrati durante la registrazione" + +#~ msgid "Debug Level" +#~ msgstr "Livello di debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Disattivare alcuni avvis" + +#~ msgid "Dump core on crash" +#~ msgstr "Effettua il core dump al crash" + +#~ msgid "High Priority" +#~ msgstr "Alta Priorità" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usa temporizzazione interna" + +#~ msgid "Log directory" +#~ msgstr "Accedi alla directory" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Numero massimo di chiamate consentite" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Smettere di accettare carico massimo di nuove chiamate" + +#~ msgid "Disable console colors" +#~ msgstr "Disabilitare la console dei colori" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Cache directori files suoni" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefisso UniquID con il nome di sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Costruire percorsi di transcodifica via SLINEAR, non direttamente" + +#~ msgid "Verbose Level" +#~ msgstr "Livello verbose" + +#~ msgid "Section dialplan" +#~ msgstr "Sezione dialplan" + +#~ msgid "include" +#~ msgstr "include" + +#~ msgid "Dialplan Extension" +#~ msgstr "Estensione Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opzioni generali Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permettere il trasferimento" + +#~ msgid "Clear global vars" +#~ msgstr "Cancella le variabili globali" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferenza Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Aggiungere il prefisso corrispondente per Dialplans" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "" +#~ "Prefisso (0) per aggiungere / rimuovere a / da numeri internazionali" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "Connection to use" +#~ msgstr "Connessione da utilizzare" + +#~ msgid "Feature Key maps" +#~ msgstr "Caratteristica chiave delle mappe" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Chiave per disconnettere una chiamata" + +#~ msgid "Key to Park call" +#~ msgstr "Chiave di riserva per chiamata" + +#~ msgid "Parking Feature" +#~ msgstr "Riserva futura" + +#~ msgid "ADSI Park" +#~ msgstr "Riserva ADSI" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Ascolta il tono di cortesia per" + +#~ msgid "Enable Parking" +#~ msgstr "Abilita la sosta" + +#~ msgid "Parking time (secs)" +#~ msgstr "Ora di sosta (in secondi)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Gamma di estensioni per la sosta di chiamata" + +#~ msgid "Pickup extension" +#~ msgstr "Estensione Pickup" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Secondi di attesa tra le cifre per il trasferimento" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Suono quando il trasferimento non ha partecipato" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Ricarica Hardware Config" + +#~ msgid "Reboot Method" +#~ msgstr "Metodo per riavviare" + +#~ msgid "Parameter" +#~ msgstr "Parametro" + +#~ msgid "Option type" +#~ msgstr "Tipo di opzione" + +#~ msgid "User name" +#~ msgstr "Usare il nome" + +#~ msgid "IAX General Options" +#~ msgstr "Opzione generale per IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Lasciare il codec" + +#~ msgid "Static" +#~ msgstr "Statico" + +#~ msgid "Write Protect" +#~ msgstr "Protezione da scrittura" + +#~ msgid "Message Format" +#~ msgstr "Formato messaggio" diff --git a/applications/luci-app-asterisk/po/ja/asterisk.po b/applications/luci-app-asterisk/po/ja/asterisk.po new file mode 100644 index 00000000..98bd10b4 --- /dev/null +++ b/applications/luci-app-asterisk/po/ja/asterisk.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-01-08 13:20+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \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 "Asterisk General Options" +#~ msgstr "Asterisk の全般オプション" + +#~ msgid "AGI directory" +#~ msgstr "AGI ディレクトリ" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "録音されたサウンドを録音中にキャッシュ" + +#~ msgid "Debug Level" +#~ msgstr "デバッグレベル" + +#~ msgid "Disable some warnings" +#~ msgstr "いくつかの警告を無効にする" + +#~ msgid "Dump core on crash" +#~ msgstr "クラッシュ時にコアダンプを出力する" + +#~ msgid "High Priority" +#~ msgstr "高優先度" + +#~ msgid "Log directory" +#~ msgstr "ログ ディレクトリ" + +#~ msgid "Allow transfer" +#~ msgstr "転送を許可" + +#~ msgid "Clear global vars" +#~ msgstr "グローバル変数を消去" diff --git a/applications/luci-app-asterisk/po/ms/asterisk.po b/applications/luci-app-asterisk/po/ms/asterisk.po new file mode 100644 index 00000000..d4b6baac --- /dev/null +++ b/applications/luci-app-asterisk/po/ms/asterisk.po @@ -0,0 +1,611 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-05-03 12:40+1000\n" +"PO-Revision-Date: 2010-05-05 23:32+1000\n" +"Last-Translator: Wai Chet Teow \n" +"Language-Team: LANGUAGE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Pilihan Umum Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "AGI Direktori" + +#, fuzzy +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache dicatat semasa rakaman fail bunyi" + +#, fuzzy +#~ msgid "Debug Level" +#~ msgstr "Tingkatan debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Mematikan beberapa amaran" + +#, fuzzy +#~ msgid "Dump core on crash" +#~ msgstr "Dump teras dalam kemalangan" + +#~ msgid "High Priority" +#~ msgstr "Keutamaan Tinggi" + +#~ msgid "Initialise Crypto" +#~ msgstr "Menginisialisasinya Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Gunakan Intern pemilihan waktu" + +#, fuzzy +#~ msgid "Log directory" +#~ msgstr "Direktori log" + +#, fuzzy +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Jumlah maksimum panggilan dibenarkan" + +#, fuzzy +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "beban maksimum untuk berhenti menerima panggilan baru" + +#, fuzzy +#~ msgid "Disable console colors" +#~ msgstr "Matikan warna konsol" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Sound fail Direktori Cache" + +#, fuzzy +#~ msgid "The Group to run as" +#~ msgstr "Kumpulan untuk menjalankan sebagai" + +#, fuzzy +#~ msgid "The User to run as" +#~ msgstr "Pengguna untuk menjalankan sebagai" + +#, fuzzy +#~ msgid "Voicemail Spool directory" +#~ msgstr "Surat suara spool Direktori" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Awalan UniquID dengan nama sistem" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Membangun transcode jalan melalui SLINEAR, tidak secara langsung" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmit SLINEAR keheningan ketika sedang merakam saluran" + +#, fuzzy +#~ msgid "Verbose Level" +#~ msgstr "Tingkat verbose" + +#~ msgid "Section dialplan" +#~ msgstr "Bahagian dial rencana" + +#~ msgid "include" +#~ msgstr "memasukkan" + +#~ msgid "Dialplan Extension" +#~ msgstr "Ekstensi dial rencana" + +#~ msgid "Dialplan General Options" +#~ msgstr "Pilihan Umum Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Membolehkan pemindahan" + +#~ msgid "Clear global vars" +#~ msgstr "Hapus variable global" + +#~ msgid "Dialplan Goto" +#~ msgstr "Buka dial rencana" + +#~ msgid "Dialplan Conference" +#~ msgstr "Persidangan dial rencana" + +#~ msgid "Dialplan Time" +#~ msgstr "Masa dial rencana" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Surat suara dial rencana" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zon untuk dial rencana" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix untuk menambah pencocokan dial rencana" + +#~ msgid "Match International prefix" +#~ msgstr "Awalan Antarabangsa Match" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Awalan (0) untuk menambah / memadam ke / dari nombor antarabangsa" + +#~ msgid "localzone" +#~ msgstr "zon tempatan" + +#~ msgid "Match plan" +#~ msgstr "Rencana sesuai" + +#~ msgid "Connection to use" +#~ msgstr "Sambungan yang digunakan" + +#~ msgid "Feature Key maps" +#~ msgstr "Ciri-ciri kunci peta" + +#~ msgid "Attended transfer key" +#~ msgstr "Mengikuti memindahkan kunci" + +#~ msgid "Blind transfer key" +#~ msgstr "kunci pemindahkan buta" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Kunci untuk Putus panggilan" + +#~ msgid "Key to Park call" +#~ msgstr "Kunci untuk Park panggilan" + +#~ msgid "Parking Feature" +#~ msgstr "Parkir Ciri-ciri" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI Park" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Mengikuti pemindahan timeout (saat)" + +#~ msgid "One touch record key" +#~ msgstr "Satu nota sentuh butang" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nama konteks panggilan untuk parkir" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fail bunyi untuk memainkan ke pemanggil parkir" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Maksimum masa (milidetik) antara nombor untuk pengaktifan ciri" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Kaedah untuk Menemukan slot Parkir" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkir muzik kelas" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Nada kebaikan yang dimainkan untuk" + +#~ msgid "Enable Parking" +#~ msgstr "Aktifkan Parkir" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extension untuk dial ke taman" + +#~ msgid "Parking time (secs)" +#~ msgstr "Parkir waktu (saat)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rentang sambungan untuk parkir panggilan" + +#~ msgid "Pickup extension" +#~ msgstr "Angkat sambungan" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Detik untuk menunggu antara nombor ketika memindahkan" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "suara saat menghadiri pemindahan selesai" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Suara saat menghadiri gagal transfer" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Beban kembali menatarajah peranti keras" + +#~ msgid "Reboot Method" +#~ msgstr "Kaedah Reboot" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "Option type" +#~ msgstr "Pilihan jenis" + +#~ msgid "User name" +#~ msgstr "Nama pemakai" + +#~ msgid "IAX General Options" +#~ msgstr "Pilihan Umum IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Izinkan Codec" + +#~ msgid "Static" +#~ msgstr "Statik" + +#~ msgid "Write Protect" +#~ msgstr "Dilindungi Menulis" + +#~ msgid "Meetme Conference" +#~ msgstr "Persidangan Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN Admin" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN Pertemuan" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Pilihan Umum Persidangan Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Jumlah buffer audio yang akan digunakan dalam 20 mili detik" + +#~ msgid "Modules" +#~ msgstr "Modul" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Penggera Aplikasi Penerima" + +#~ msgid "Authentication Application" +#~ msgstr "Pengesahan Aplikasi" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Membuat asterisk yakin tidak menyimpan CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Periksa sama ada saluran sedia" + +#~ msgid "Listen in on any channel" +#~ msgstr "Mendengar pada setiap saluran" + +#~ msgid "Control Playback Application" +#~ msgstr "Kawalan Main Aplikasi" + +#~ msgid "Cuts up variables" +#~ msgstr "Memotong pembolehubah" + +#~ msgid "Database access functions" +#~ msgstr "fungsi untuk mengakses dasar data" + +#~ msgid "Dialing Application" +#~ msgstr "Aplikasi Panggilan" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplikasi Dikte Virtual Machine" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Sokongan Pengarah Angkatan Pangillan" + +#~ msgid "Extension Directory" +#~ msgstr "Extension Direktori" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplikasi DISA (Direct Inward System Access)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Aplikasi membuang variable saluran" + +#~ msgid "Simple Echo Application" +#~ msgstr "Echo Aplikasi Mudah" + +#~ msgid "ENUM Lookup" +#~ msgstr "Pencarian ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Menilai semula string" + +#~ msgid "Executes applications" +#~ msgstr "Menjalankan aplikasi" + +#~ msgid "External IVR application interface" +#~ msgstr "IVR aplikasi antara muka luaran" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "CDR garpu menjadi 2 entiti yang berasingan" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Dapatkan ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Pengurusan Kumpulan Rutinitas" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Menyandi dan Stream melalui icecast dan es" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplikasi Transmisi Gambar" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Mencari nama / nombor Pemangil dari hitam" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Mencari Nama Pemangil dari database tempatan" + +#~ msgid "Extension Macros" +#~ msgstr "Makro Extension" + +#~ msgid "A simple math Application" +#~ msgstr "Sebuah Aplikasi matematik senang" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplikasi MD5 checksum" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Milliwatt digital (mu-law) Aplikasi Uji" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Merakam panggilan dan campuran audio semasa rakaman" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Panggilan Parkir dan Aplikasi Pengumuman" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplikasi Pemain Trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Nombor telefon diperlukan untuk dimasuk" + +#~ msgid "True Call Queueing" +#~ msgstr "Panggilan antrian benar" + +#~ msgid "Random goto" +#~ msgstr "Pergi ke random" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplikasi Baca Variabel" + +#~ msgid "Read in a file" +#~ msgstr "Baca dalam fail" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Masa benar mencari / menulis kembali data " + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplikasi Trivial Rakam" + +#~ msgid "Say time" +#~ msgstr "Katakan masa" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Aplikasi Hantar DTMF angka" + +#~ msgid "Send Text Applications" +#~ msgstr "Aplikasi Kirim Mesej" + +#~ msgid "Set CallerID Application" +#~ msgstr "Aplikasi menetapkan CallerID" + +#~ msgid "CDR user field apps" +#~ msgstr "Aplikasi CDR bidang pengguna" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "beban => .so ; Menetapkan Nama CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Menetapkan Nombor RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Menetapkan Kemampuan Transfer ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Penangan SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Menutup saluran yang diminta" + +#~ msgid "Stack Routines" +#~ msgstr "Rutinitas Stack" + +#~ msgid "Generic System() application" +#~ msgstr "Aplikasi Generic Sistem()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Putar dengan Pengesanan Bicara" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplikasi Antarmuka Test" + +#~ msgid "Transfer" +#~ msgstr "Transfer" + +#~ msgid "TXTCIDName" +#~ msgstr "Nama TXTCID" + +#~ msgid "Send URL Applications" +#~ msgstr "Aplikasi Kirim URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplikasi Acara Pengguna Tersuai" + +#~ msgid "Send verbose output" +#~ msgstr "Kirim keluaran verbose" + +#~ msgid "Voicemail" +#~ msgstr "Voicemail" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Menunggu waktu sampai setelah deringan pertama" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Aplikasi Tunggu Untuk Tenang" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Sementara Loops dan Pelaksanaan bersyarat" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Hujung belakang nilai-nilai dipisahkan koma CDR" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Nilai-nilai dipisahkan koma CDR hujung belakang yang disesuaikan" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Hujung belakang asterisk panggilan pengurus CDR " + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Hujung belakang MySQL CDR" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Hujung belakang PostgreSQL CDR" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Hujung belakang SQLite CDR" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agen Proksi Saluran" + +#~ msgid "Option chan_iax2" +#~ msgstr "Pilihan chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Saluran Proksi Tempatan" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptif Pengkamiran PCM Coder/Decoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (ditandatangani linier) Codec Terjemahan" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (ditandatangani linier) Codec Terjemahan" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (ditandatangani linier)" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Sambungan Bahasa Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Teks Sambungan Tatarajah" + +#~ msgid "Loopback Switch" +#~ msgstr "Loop Beralih Kembali" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL menatarajah sumber daya" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC tatarajah sumber daya" + +#~ msgid "PGSQL Module" +#~ msgstr "Modul PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "tanda tangan digital kriptografi" + +#~ msgid "Call Parking Resource" +#~ msgstr "Panggilan Parkir Sumber Daya" + +#~ msgid "Indications Configuration" +#~ msgstr "Penunjuk Konfigurasi" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "panggilan pemantauan sumber daya" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Muzik Pada Sumber Daya Tahan" + +#~ msgid "ODBC Resource" +#~ msgstr "Sumber ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Modul SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Modul SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Muzik Di Tahan" + +#~ msgid "Application" +#~ msgstr "Aplikasi" + +#~ msgid "Directory of Music" +#~ msgstr "Direktori Muzik" + +#~ msgid "Option mode" +#~ msgstr "Pilihan mod" + +#~ msgid "Random Play" +#~ msgstr "Bermain Rawak" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Domain utama identiti untuk Dari: header" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Dari pengguna (diperlukan oleh banyak pembekal SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Dering pada konteks rancangan panggilan masuk" + +#~ msgid "Allow Insecure for" +#~ msgstr "Biarkan tidak selamat untuk" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Peti mel untuk MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT antara telefon dan asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Menyemak tag di header" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Balas Masa tamat (ms) untuk sambungan ke bawah" + +#~ msgid "Register connection" +#~ msgstr "Register sambungan" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Dial perpanjangan sendiri untuk peti mel" + +#~ msgid "Client Type" +#~ msgstr "Pelanggan Jenis" + +#~ msgid "Section sipgeneral" +#~ msgstr "Bahagian sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Membenarkan codec" + +#~ msgid "SIP realm" +#~ msgstr "Dunia SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Pilihan umum Voicemail" + +#~ msgid "From Email address of server" +#~ msgstr "Dari alamat email server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Kotak mail suara" + +#~ msgid "Email contains attachment" +#~ msgstr "Email mengandungi lampiran" + +#~ msgid "Display Name" +#~ msgstr "Nama Paparan" + +#~ msgid "Password" +#~ msgstr "Kata laluan" + +#~ msgid "zone" +#~ msgstr "daerah" + +#~ msgid "Voice Zone settings" +#~ msgstr "Tetapan Zon Suara" + +#~ msgid "Message Format" +#~ msgstr "Format Mesej" diff --git a/applications/luci-app-asterisk/po/no/asterisk.po b/applications/luci-app-asterisk/po/no/asterisk.po new file mode 100644 index 00000000..70c448d9 --- /dev/null +++ b/applications/luci-app-asterisk/po/no/asterisk.po @@ -0,0 +1,12 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \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" diff --git a/applications/luci-app-asterisk/po/pl/asterisk.po b/applications/luci-app-asterisk/po/pl/asterisk.po new file mode 100644 index 00000000..f0928532 --- /dev/null +++ b/applications/luci-app-asterisk/po/pl/asterisk.po @@ -0,0 +1,75 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-18 01:39+0200\n" +"Last-Translator: Michał \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 "Asterisk General Options" +#~ msgstr "Ustawienia Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Katalog AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Buforuj nagrane pliki podczas nagrywania" + +#~ msgid "Debug Level" +#~ msgstr "Poziom debugowania" + +#~ msgid "Disable some warnings" +#~ msgstr "Wyłącz niektóre ostrzeżenia" + +#~ msgid "Dump core on crash" +#~ msgstr "Wykonaj zrzut pamięci podczas awarii" + +#~ msgid "High Priority" +#~ msgstr "Wysoki Priorytet" + +#~ msgid "Initialise Crypto" +#~ msgstr "Uruchom Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Użyj wbudowanego próbkowania" + +#~ msgid "Log directory" +#~ msgstr "Katalog logów" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Max. dozwolona ilość połączeń" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Max. obciążenie powodujące odrzucanie nowych połączeń" + +#~ msgid "Disable console colors" +#~ msgstr "Wyłącz kolory konsoli" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Katalog tymczasowy dla plików dźwiękowych" + +#~ msgid "The Group to run as" +#~ msgstr "Grupa dla uruchamiania" + +#~ msgid "The User to run as" +#~ msgstr "Użytkownik dla uruchamiania" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Katalog bufora poczty głosowej" + +#~ msgid "Time Zone" +#~ msgstr "Strefa Czasowa" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" diff --git a/applications/luci-app-asterisk/po/pt-br/asterisk.po b/applications/luci-app-asterisk/po/pt-br/asterisk.po new file mode 100644 index 00000000..00a0bb64 --- /dev/null +++ b/applications/luci-app-asterisk/po/pt-br/asterisk.po @@ -0,0 +1,691 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2011-10-18 22:20+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \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: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opções Gerais do Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Diretório do AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Guardar em cache os arquivos de som durante a gravação" + +#~ msgid "Debug Level" +#~ msgstr "Nível de detalhamento" + +#~ msgid "Disable some warnings" +#~ msgstr "Desativar alguns avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Guardar o core quando o programa estourar" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioridade" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar Temporização Interna" + +#~ msgid "Log directory" +#~ msgstr "Diretório de registos" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número máximo de chamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Carga máxima para deixar de aceitar novas chamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desativar cores no console" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Diretório de cache para arquivos de som" + +#~ msgid "The Group to run as" +#~ msgstr "O grupo sob o qual o asterisk será executado" + +#~ msgid "The User to run as" +#~ msgstr "O usuário sob o qual o asterisk será executado" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio da spool de voicemail" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixar o nome de sistema à UniquID" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nível de Detalhamento" + +#~ msgid "Time Zone" +#~ msgstr "Fuso Horário" + +#~ msgid "Section dialplan" +#~ msgstr "Seção do Plano de Marcação" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensão do Plano de Discagem" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opções Gerais do Plano de Discagem" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferência" + +#~ msgid "Reinvite/redirect media connections" +#~ msgstr "Reconvidar/redirecionar conexões multimídia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpar variáveis globais" + +#~ msgid "Dialplan Goto" +#~ msgstr "Encaminhamento do Plano de Discagem" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferência do Plano de Discagem" + +#~ msgid "Dialplan Time" +#~ msgstr "Tempo do Plano de Discagem" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Correio de voz do Plano de Discagem" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zonas do Plano de Discagem" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefixo para adicionar aos planos de discagem correspondentes" + +#~ msgid "Match International prefix" +#~ msgstr "Coincidir com o prefixo internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefixo (0) para adicionar/remover para/de números internacionais" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Plano de combinação" + +#~ msgid "Connection to use" +#~ msgstr "Conexão usada" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapeamentos de Tecla de Função" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferência assistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferência cega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla para Desligar a chamada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla para Estacionar a chamada" + +#~ msgid "Parking Feature" +#~ msgstr "Recurso de Estacionamento" + +#~ msgid "ADSI Park" +#~ msgstr "Estacionamento ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Tempo limite (seg) da transferência assistida" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de gravação em um toque" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nome do contexto de chamada para o estacionamento" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Arquivo de som para tocar para o chamador estacionado" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Tempo máximo (ms) entre os dígitos para ativação de recursos" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Método para Encontrar uma Vaga de Estacionamento" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Toque o tom de cortesia para" + +#~ msgid "Enable Parking" +#~ msgstr "Habilitar Estacionamento" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensão para discar para estacionar" + +#~ msgid "Parking time (secs)" +#~ msgstr "Tempo de estacionamento (seg)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "faixa de extensões para o estacionamento de chamada" + +#~ msgid "Pickup extension" +#~ msgstr "Extensão de captura" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segundos para esperar entre os dígitos quando transferindo" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "emitir som quando a transferência assistida estiver completa" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Emitir som quando a transferência assistida falhar" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recarregar a Configuração de Hardware" + +#~ msgid "Reboot Method" +#~ msgstr "Método de Reinicialização" + +#~ msgid "Parameter" +#~ msgstr "Parâmetro" + +#~ msgid "Option type" +#~ msgstr "Tipo de Opção" + +#~ msgid "User name" +#~ msgstr "Nome do usuário" + +#~ msgid "IAX General Options" +#~ msgstr "Opções Gerais do Plano de Discagem" + +#~ msgid "Allow Codecs" +#~ msgstr "Permitir Codificadores (codecs)" + +#~ msgid "Static" +#~ msgstr "Estático" + +#~ msgid "Write Protect" +#~ msgstr "Proteção à Escrita" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferência Encontre-me" + +#~ msgid "Admin PIN" +#~ msgstr "PIN do Administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN da Conferência" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opções Gerais da Conferência Encontre-me" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de buffers de 20ms que serão usados" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicativo de Recepção de Alarmes" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicativo de Autenticação" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Garanta que o asterisk não salva o CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Verifique se o canal está disponível" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escute em qualquer canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Controlar o Aplicativo de Reprodução" + +#~ msgid "Cuts up variables" +#~ msgstr "Variáveis de Cortes" + +#~ msgid "Database access functions" +#~ msgstr "Funções de acesso ao banco de dados" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicativo de Discagem" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicativo de Máquina de Ditado Virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Suporte a Captura de Chamadas Direcionadas" + +#~ msgid "Extension Directory" +#~ msgstr "Diretório de Extensão" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicativo DISA (Acesso Direto ao Sistema Interior)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Descarregar Aplicativo de variáveis do canal" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicativo de Eco Simples" + +#~ msgid "ENUM Lookup" +#~ msgstr "Pesquisa ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reavaliar sequências de caracteres" + +#~ msgid "Executes applications" +#~ msgstr "Executa aplicativos" + +#~ msgid "External IVR application interface" +#~ msgstr "Interface de aplicativo IVR externo" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurcar o CDR em duas entidades separadas" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Pegar o ID do CPE ADSI" + +#~ msgid "Group Management Routines" +#~ msgstr "Rotinas de Gerenciamento e Grupo" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codificar e Transmitir através do icecast e ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicativo de Transmissão de Imagem" + +# what is this black? Seems to be truncated! +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Buscar o Identificador de chamadas/nome/número do preto" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Buscar o Identificador de chamadas/nome/número do banco de dados" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de extensão" + +#~ msgid "A simple math Application" +#~ msgstr "Um Aplicativo simples de matemática" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicativo de soma de verificação MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicativo de Teste de Miliwatt (mu-law) Digital" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Gravar uma ligação e mixar o áudio durante a gravação" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicativo de Anúncio e Estacionamento de Chamada" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicativo de Reprodução Trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requer que seja informado um número de telefone" + +#~ msgid "True Call Queueing" +#~ msgstr "Enfileiramento Real da Chamada" + +#~ msgid "Random goto" +#~ msgstr "Vá para aleatório" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicativo de Leitura de Variável" + +#~ msgid "Read in a file" +#~ msgstr "Ler em um arquivo" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Escrita/Consulta de Dados em Tempo Real" + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplicativo de Gravação Trivial" + +#~ msgid "Say time" +#~ msgstr "Dizer a hora" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Aplicativo para Enviar dígitos DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Aplicativos para Enviar Texto" + +#~ msgid "Set CallerID Application" +#~ msgstr "Aplicativo de Definir a Identificação da Chamada" + +# I guess there is something wrong with English here +#~ msgid "CDR user field apps" +#~ msgstr "Aplicativos do campo do usuário no CDR" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "Carregar => .so ; Definir o Nome na Identificação da Chamada" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "Carregar => .so ; Definir o Número na Identificação da Chamada" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Definir o Número do RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Definir Capacidade de Transferência ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Tratador do SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Termina a ligação no canal requisitado" + +#~ msgid "Stack Routines" +#~ msgstr "Rotinas de Empilhamento" + +#~ msgid "Generic System() application" +#~ msgstr "Aplicativo de Sistema Genérico" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Reprodução com Detecção de Conversa" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplicativo de Teste de Interface" + +#~ msgid "Transfer" +#~ msgstr "Transferir" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Aplicativo para Enviar URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplicativo para Eventos do Usuário Personalizados" + +#~ msgid "Send verbose output" +#~ msgstr "Enviar saída detalhada" + +#~ msgid "Voicemail" +#~ msgstr "Correio de Voz" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Espere até o primeiro toque após tempo" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Aplicativo para Esperar Por Silêncio" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Laços de Repetição e Execução Condicional" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Serviço de CDR em Valores Separados por Vírgula" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Serviço de CDR em Valores Separados por Vírgula Personalizável" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Serviço de CDR de Gerenciamento de Chamadas Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Serviço de CDR em MySQL" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Serviço de CDR em PostgreSQL" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Serviço de CDR em SQLite" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Canal de Proxy do Agente" + +#~ msgid "Option chan_iax2" +#~ msgstr "Opção chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Canal de Proxy Local" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Protocolo de Iniciação de Sessão (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codificador/Decodificador PCM Diferencial Adaptativo" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador A-law" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codificador/Decodificador direto A-law e Mulaw" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodificador G726 ITU G.726-32kbps" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Tradutor de codificação GSM/PCM16 (linear com sinal)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Tradutor de codificação Speex/PCM16 (linear com sinal)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador Mu-law" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Formato AU Sun Microsystems (linear com sinal)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Formato de Arquivo de Selo Temporal Simples G.723.1" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Dado G.726 bruto (16/24/32/40kbps)" + +#~ msgid "Raw G729 data" +#~ msgstr "Dado G729 bruto" + +#~ msgid "Raw GSM data" +#~ msgstr "Dado GSM bruto" + +#~ msgid "Raw h263 data" +#~ msgstr "Dado h263 bruto" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Imagem JPEG ((Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Suporte a uLaw 8khz Áudio bruto (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "carregar => .so ; Suporte a uLaw 8khz Áudio PCM bruto" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Suporte a Áudio Linear com Sinal (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Formato de Arquivo Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Formato WAV da Microsoft (8000hz Linear com Sinal)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Formato WAV da Microsoft (GSM Proprietário) " + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "" +#~ "Funções do plano de discagem relacionadas ao identificador da chamada" + +#~ msgid "ENUM Functions" +#~ msgstr "Funções ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Funções de codificação / decodificação de URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilador da Linguagem de Extensão do Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuração da Extensão de Texto" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "carregar => .so ; Funções de plano de discagem embutidas" + +#~ msgid "Loopback Switch" +#~ msgstr "Interruptor loopback" + +#~ msgid "Realtime Switch" +#~ msgstr "Interruptor de Tempo Real" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Suporte a bufferização da Saída" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Discador Automático)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Recurso de Configuração do Mysql" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Recurso de Configuração do ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Módulo do PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Assinaturas Digitais Criptográficas" + +#~ msgid "Call Parking Resource" +#~ msgstr "Recurso de Estacionamento de Chamadas" + +#~ msgid "Indications Configuration" +#~ msgstr "Configuração dos Indicadores" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Recurso de Monitoramento de Chamada" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Recurso da Música de Espera" + +#~ msgid "ODBC Resource" +#~ msgstr "Recurso do ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Módulo SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Módulo SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Música de Espera" + +#~ msgid "Application" +#~ msgstr "Aplicativo" + +#~ msgid "Directory of Music" +#~ msgstr "Diretório de Música" + +#~ msgid "Option mode" +#~ msgstr "Modo da opção" + +#~ msgid "Random Play" +#~ msgstr "Toque Aleatoriamente" + +#~ msgid "DTMF mode" +#~ msgstr "Modo DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Identidade do primeiro domínio para cabeçalhos De:" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Do usuário (necessário para muitos provedores de SIP)" + +# I didn't undestand this one +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Tocar no contextos de plano de discagem recebidas" + +#~ msgid "Allow Insecure for" +#~ msgstr "Permitir Inseguro para" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Caixa de Correio para MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre o telefone e o Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Verifique as etiquetas nos cabeçalhos" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Tempo Limite da Resposta (ms) para conexões desconectadas" + +#~ msgid "Register connection" +#~ msgstr "Registro da conexão" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Discar extensão própria para a caixa de correio" + +#~ msgid "Client Type" +#~ msgstr "Tipo de Cliente" + +#~ msgid "Username" +#~ msgstr "Usuário" + +#~ msgid "Section sipgeneral" +#~ msgstr "Opções Gerais do SIP" + +#~ msgid "Allow codecs" +#~ msgstr "Permitir codificações" + +#~ msgid "SIP realm" +#~ msgstr "Domínio do SIP (realm)" + +#~ msgid "Voicemail general options" +#~ msgstr "Opções gerais do correio de voz" + +#~ msgid "From Email address of server" +#~ msgstr "Endereço do email de origem do servidor" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Caixas de Correio de Voz" + +#~ msgid "Email contains attachment" +#~ msgstr "O email contém anexos" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Nome para exibição" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "zone" +#~ msgstr "zona" + +#~ msgid "Voice Zone settings" +#~ msgstr "Configuração de Zona da Voz" + +#~ msgid "Message Format" +#~ msgstr "Formato da Mensagem" diff --git a/applications/luci-app-asterisk/po/pt/asterisk.po b/applications/luci-app-asterisk/po/pt/asterisk.po new file mode 100644 index 00000000..d1b98363 --- /dev/null +++ b/applications/luci-app-asterisk/po/pt/asterisk.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2009-05-20 11:54+0200\n" +"Last-Translator: Jose Monteiro \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opções Gerais do Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directorio AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Guardar em cache os ficheiros de som durante a gravação" + +#~ msgid "Debug Level" +#~ msgstr "Nível de debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactivar alguns avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Guardar o core quando houver crash" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioridade" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar temporizações internas" + +#~ msgid "Log directory" +#~ msgstr "Directorio de registos" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximo de chamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximo de carga para deixar de aceitar novas chamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desactivar cores na consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directorio de cache para ficheiros de som" + +#~ msgid "The Group to run as" +#~ msgstr "O grupo sob o qual o asterisk será executado" + +#~ msgid "The User to run as" +#~ msgstr "O utilizador sob o qual o asterisk será executado" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio da spool de voicemail" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixar o nome de sistema à UniquID" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivel de verbosidade" + +#~ msgid "Time Zone" +#~ msgstr "Fuso Horário" + +#~ msgid "Section dialplan" +#~ msgstr "Secção do Plano de Marcação" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensão do Plano de Marcação" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferência" + +#~ msgid "Reinvite/redirect media connections" +#~ msgstr "Redirigir/Repetir ligações multimedia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpar variaveis globais" + +#~ msgid "Dialplan Goto" +#~ msgstr "Encaminhamento do Plano de Marcação" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferencia do Plano de Marcação" + +#, fuzzy +#~ msgid "Dialplan Time" +#~ msgstr "Conferencia do Plano de Marcação" + +#, fuzzy +#~ msgid "Dialplan Voicemail" +#~ msgstr "Encaminhamento do Plano de Marcação" + +#, fuzzy +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Secção do Plano de Marcação" + +#, fuzzy +#~ msgid "Connection to use" +#~ msgstr "Secção do Plano de Marcação" + +#, fuzzy +#~ msgid "IAX General Options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Allow Codecs" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Section sipgeneral" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Allow codecs" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "SIP realm" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Voicemail general options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Voice Zone settings" +#~ msgstr "Secção do Plano de Marcação" diff --git a/applications/luci-app-asterisk/po/ro/asterisk.po b/applications/luci-app-asterisk/po/ro/asterisk.po new file mode 100644 index 00000000..e2713700 --- /dev/null +++ b/applications/luci-app-asterisk/po/ro/asterisk.po @@ -0,0 +1,54 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 00:35+0200\n" +"Last-Translator: Daniel \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Optiunile generale Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Director AGI" + +#~ msgid "Disable some warnings" +#~ msgstr "Dezactiveaza cateva avertizari" + +#~ msgid "High Priority" +#~ msgstr "Prioritate inalta" + +#~ msgid "Log directory" +#~ msgstr "Director de loguri" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Incarcarea maxima de cand se refuza apeluri noi" + +#~ msgid "Disable console colors" +#~ msgstr "Dezactiveaza culorile in consola" + +#~ msgid "The Group to run as" +#~ msgstr "Ruleaza sub grupul" + +#~ msgid "The User to run as" +#~ msgstr "Ruleaza sub utilizatorul" + +#~ msgid "Time Zone" +#~ msgstr "Fusul orar" + +#~ msgid "Allow transfer" +#~ msgstr "Permite transferul" + +#~ msgid "Clear global vars" +#~ msgstr "Goleste variabilele globale" + +#~ msgid "Connection to use" +#~ msgstr "Conexiunea pentru folosire" diff --git a/applications/luci-app-asterisk/po/ru/asterisk.po b/applications/luci-app-asterisk/po/ru/asterisk.po new file mode 100644 index 00000000..d27ba33d --- /dev/null +++ b/applications/luci-app-asterisk/po/ru/asterisk.po @@ -0,0 +1,515 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-04-02 15:02+0200\n" +"Last-Translator: Kamal \n" +"Language-Team: LANGUAGE \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Общие настройки Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Каталог AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Кэшировать звуковые файлы во время записи" + +#~ msgid "Debug Level" +#~ msgstr "Уровень отладки" + +#~ msgid "Disable some warnings" +#~ msgstr "Отключить некоторые предупреждения" + +#~ msgid "Dump core on crash" +#~ msgstr "Сохранять дамп ядра при фатальной ошибке" + +#~ msgid "High Priority" +#~ msgstr "Высокий приоритет" + +#~ msgid "Initialise Crypto" +#~ msgstr "Включить шифрование" + +#~ msgid "Use Internal Timing" +#~ msgstr "Использовать внутренние тайминги" + +#~ msgid "Log directory" +#~ msgstr "Каталог файлов журнала" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Максимальное разрешённое количество вызовов" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Максимальная нагрузка для запрета приёма новых вызовов" + +#~ msgid "Disable console colors" +#~ msgstr "Выключить цвета консоли" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Каталог кэша звуковых файлов" + +#~ msgid "The Group to run as" +#~ msgstr "Группа, от имени которой запускать" + +#~ msgid "The User to run as" +#~ msgstr "Пользователь, от имени которого запускать" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Добавлять имя системы к уникальному идентификатору (UID)" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Передавать тишину в формате SLINEAR при записи канала" + +#~ msgid "Section dialplan" +#~ msgstr "Раздел правил набора" + +#~ msgid "include" +#~ msgstr "включить" + +#~ msgid "Dialplan Extension" +#~ msgstr "Раcширение правила набора" + +#~ msgid "Dialplan General Options" +#~ msgstr "Общие настройки правил набора" + +#~ msgid "Allow transfer" +#~ msgstr "Разрешить перевод" + +#~ msgid "Clear global vars" +#~ msgstr "Очистить глобальные переменные" + +#~ msgid "Dialplan Conference" +#~ msgstr "Правила набора для конференции" + +#~ msgid "Dialplan Time" +#~ msgstr "Время правил набора" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Правила набора для голосовой почты" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Зоны для правил набора" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Префикс (0) для добавления/удаления к/из международных номеров" + +#~ msgid "localzone" +#~ msgstr "местная зона" + +#~ msgid "Connection to use" +#~ msgstr "Использовать соединение" + +#~ msgid "Feature Key maps" +#~ msgstr "Назначения функцилнальных клавиш" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Клавиша для разрыва соединения" + +#~ msgid "Key to Park call" +#~ msgstr "Клавиша для \"парковки\" вызова " + +#~ msgid "Parking Feature" +#~ msgstr "Функция \"Парковка\"" + +#~ msgid "One touch record key" +#~ msgstr "Клавиша записи в одно касание" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Аудио файл, проигрываемый \"припаркованному\"" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Максимальное время (мс) между нажатиями для активации функции" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Метод поиска слота для парковки" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Играть тон вежливости для" + +#~ msgid "Enable Parking" +#~ msgstr "Разрешить \"Парковку\"" + +#~ msgid "Extension to dial to park" +#~ msgstr "Расширение набора для \"парковки\"" + +#~ msgid "Parking time (secs)" +#~ msgstr "Время \"Парковки\" (секунды)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Диапазон расширений для \"парковки\" вызова" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Перезагрузить конфигурацию оборудования" + +#~ msgid "Reboot Method" +#~ msgstr "Метод перезагрузки" + +#~ msgid "Parameter" +#~ msgstr "Параметр" + +#~ msgid "Option type" +#~ msgstr "Тип параметра" + +#~ msgid "User name" +#~ msgstr "Имя пользователя" + +#~ msgid "IAX General Options" +#~ msgstr "Общие параметры IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Разрешить кодеки" + +#~ msgid "Static" +#~ msgstr "Статический" + +#~ msgid "Write Protect" +#~ msgstr "Защита от записи" + +#~ msgid "Meetme Conference" +#~ msgstr "Конференция Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN администратора" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN совещания" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Общие параметры конференции Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Количество используемых 20 мс буферов" + +#~ msgid "Modules" +#~ msgstr "Модули" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Приложение сбора сигналов тревоги" + +#~ msgid "Authentication Application" +#~ msgstr "Приложение аутентификации" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Убедитесь что Asterisk не сохраняет CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Проверить канал на доступность" + +#~ msgid "Listen in on any channel" +#~ msgstr "Слашать на любом канале" + +#~ msgid "Database access functions" +#~ msgstr "Функции доступа базы данных" + +#~ msgid "Dialing Application" +#~ msgstr "Приложение набора" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "" +#~ "Приложение доступа к добавочной линии путем прямого установления " +#~ "входящего соединения (DISA)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Приложение сбора переменных канала" + +#~ msgid "Simple Echo Application" +#~ msgstr "Приложение эха" + +#~ msgid "Executes applications" +#~ msgstr "Выполняет приложение" + +#~ msgid "External IVR application interface" +#~ msgstr "Интерфейс внешнего IVR приложения" + +#~ msgid "Group Management Routines" +#~ msgstr "Операции управления группой" + +#~ msgid "Image Transmission Application" +#~ msgstr "Приложение передачи изображений" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Искать имя CallerID в \"черном\" списке" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Искать имя CallerID в локальной базе" + +#~ msgid "Extension Macros" +#~ msgstr "Макрос расширения" + +#~ msgid "A simple math Application" +#~ msgstr "Простое математическое приложение" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Приложение MD5" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Записать вызов и микшировать аудио во время записи" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Приложение для воспроизведения" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Требовать номер телефона, который необходимо ввести" + +#~ msgid "True Call Queueing" +#~ msgstr "Постановка вызовов на ожидание" + +#~ msgid "Read Variable Application" +#~ msgstr "Приложение чтения переменных" + +#~ msgid "Read in a file" +#~ msgstr "Читать в файл" + +#~ msgid "Trivial Record Application" +#~ msgstr "Приложения для записи" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Приложение отправки DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Приложения отправки текста" + +#~ msgid "Set CallerID Application" +#~ msgstr "Приложение установки CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Установить номер RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Установить возможности передачи ISDN " + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Обработчик SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Отсоединяет запрошенный канал" + +#~ msgid "Stack Routines" +#~ msgstr "Функции стека" + +#~ msgid "Generic System() application" +#~ msgstr "Приложение System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Воспроизведение с обнаружением разговора" + +#~ msgid "Interface Test Application" +#~ msgstr "Приложение для тестирования интерфейса" + +#~ msgid "Transfer" +#~ msgstr "Пересылка" + +#~ msgid "TXTCIDName" +#~ msgstr "Имя TXTCID" + +#~ msgid "Send URL Applications" +#~ msgstr "Приложения отсылки URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Приложение пользовательских событий" + +#~ msgid "Send verbose output" +#~ msgstr "Отправлять подробный вывод" + +#~ msgid "Voicemail" +#~ msgstr "Голосовая почта" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Циклы while и условное выполнение" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Бэкенд CDR менеджера вызовов Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Бэкенд MySQL CDR" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Бэкенд PostgreSQL CDR" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Бэкенд SQLite CDR" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Локальный прокси-канал" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol - протокол установления сеанса (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Адаптивный дифференциальный PCM кодер/декодер" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law кодер/декодер" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law и Mu-law прямой кодер/декодер" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32кбит/с G726 транскодер" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Транслятор кодека GSM/PCM16 (знаковый линейный)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Транслятор кодека Speex/PCM16 (знаковый линейный)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law кодер/декодер" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Формат Sun Microsystems AU (знаковый линейный)" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Необработанные данные G.726 (16/24/32/40кбит/с)" + +#~ msgid "Raw G729 data" +#~ msgstr "Необработанные данные G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Необработанные данные GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Необработанные данные h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Изображение JPEG (Joint Picture Experts Group) " + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Формат Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Формат Microsoft WAV (800Гц, линейный знаковый)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Формат Microsoft WAV (проприетарный GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Функции правил набора Caller ID" + +#~ msgid "ENUM Functions" +#~ msgstr "Функции ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Функции кодирования/декодирования URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Компилятор языка расширений Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Настройка текстового расширения" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Позвоню тебе (Wil Cal U, автодозвонщик)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Ресурс конфигурации MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Ресурс конфигурации ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL модуль" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Цифровые подписи" + +#~ msgid "Call Parking Resource" +#~ msgstr "Ресурс \"парковки\"" + +#~ msgid "Indications Configuration" +#~ msgstr "Конфигурация индикаций" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Ресурс мониторинга вызова" + +#~ msgid "ODBC Resource" +#~ msgstr "Ресурс ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Модуль SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Модуль SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Музыка при ожидании" + +#~ msgid "Application" +#~ msgstr "Приложение" + +#~ msgid "Directory of Music" +#~ msgstr "Директория музыки" + +#~ msgid "Random Play" +#~ msgstr "Воспроизведение в случайном порядке" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF режим" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "From user (от пользователя, требуется многими SIP-провайдерами)" + +#~ msgid "Allow Insecure for" +#~ msgstr "Разрешить небезопасные для" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Почтовый ящик для MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT между телефоном и Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Проверять метки в заголовках" + +#~ msgid "Register connection" +#~ msgstr "Зарегистрировать соединение" + +#~ msgid "Client Type" +#~ msgstr "Тип клиента" + +#~ msgid "Username" +#~ msgstr "Имя пользователя" + +#~ msgid "Section sipgeneral" +#~ msgstr "Общие SIP" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Общие настройки голосовой почты" + +#~ msgid "From Email address of server" +#~ msgstr "От адреса эл. почты сервера" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Ящики голосовой почты" + +#~ msgid "Email contains attachment" +#~ msgstr "Письмо содержит вложение" + +#~ msgid "Email" +#~ msgstr "Эл. почта" + +#~ msgid "Display Name" +#~ msgstr "Отображаемое имя" + +#~ msgid "Password" +#~ msgstr "Пароль" + +#~ msgid "zone" +#~ msgstr "зона" + +#~ msgid "Voice Zone settings" +#~ msgstr "Настройки голосовой зоны" + +#~ msgid "Message Format" +#~ msgstr "Формат сообщения" diff --git a/applications/luci-app-asterisk/po/sk/asterisk.po b/applications/luci-app-asterisk/po/sk/asterisk.po new file mode 100644 index 00000000..e69de29b diff --git a/applications/luci-app-asterisk/po/sv/asterisk.po b/applications/luci-app-asterisk/po/sv/asterisk.po new file mode 100644 index 00000000..e69de29b diff --git a/applications/luci-app-asterisk/po/templates/asterisk.pot b/applications/luci-app-asterisk/po/templates/asterisk.pot new file mode 100644 index 00000000..e69de29b diff --git a/applications/luci-app-asterisk/po/tr/asterisk.po b/applications/luci-app-asterisk/po/tr/asterisk.po new file mode 100644 index 00000000..c8b4e58c --- /dev/null +++ b/applications/luci-app-asterisk/po/tr/asterisk.po @@ -0,0 +1,12 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \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" diff --git a/applications/luci-app-asterisk/po/uk/asterisk.po b/applications/luci-app-asterisk/po/uk/asterisk.po new file mode 100644 index 00000000..d6dd63e9 --- /dev/null +++ b/applications/luci-app-asterisk/po/uk/asterisk.po @@ -0,0 +1,79 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-21 14:22+0200\n" +"Last-Translator: Anonymous Pootle User\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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Головні налаштування Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "AGI тека " + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Кешувати файли записів поки йде запис" + +#~ msgid "Debug Level" +#~ msgstr "Рівень налагоджування" + +#~ msgid "Disable some warnings" +#~ msgstr "Вимкнути деякі попередження" + +#~ msgid "Dump core on crash" +#~ msgstr "Зберегти дамп ядра в разі фатальної помилки" + +#~ msgid "High Priority" +#~ msgstr "Високий пріоритет" + +#~ msgid "Initialise Crypto" +#~ msgstr "Ініціалізувати шифрування" + +#~ msgid "Use Internal Timing" +#~ msgstr "Використовувати внутрішні таймінги" + +#~ msgid "Log directory" +#~ msgstr "Тека з журналом" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Максимальна кількість дозволених дзвінків" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Максимальне навантаження, при якому зупиняти прийом дзвінків" + +#~ msgid "Disable console colors" +#~ msgstr "Вимкнути кольори в консолі" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Тека з кешованими звуковими файлами" + +#~ msgid "The Group to run as" +#~ msgstr "Запустити з правами Групи" + +#~ msgid "The User to run as" +#~ msgstr "Запустити з правами Користувача" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Тека з голосовою поштою" + +#, fuzzy +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Префікс Uniquid з назвою системи " + +#~ msgid "Time Zone" +#~ msgstr "Часовий пояс" + +#~ msgid "Allow transfer" +#~ msgstr "Дозволити переадресацію" + +#~ msgid "Clear global vars" +#~ msgstr "Видалити глобальні змінні" diff --git a/applications/luci-app-asterisk/po/vi/asterisk.po b/applications/luci-app-asterisk/po/vi/asterisk.po new file mode 100644 index 00000000..133f864a --- /dev/null +++ b/applications/luci-app-asterisk/po/vi/asterisk.po @@ -0,0 +1,680 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-16 08:36+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk những tùy chọn căn bản" + +#~ msgid "AGI directory" +#~ msgstr "Thư mục AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache ghi lại tập tin âm thanh trong suốt qua trình recording" + +#~ msgid "Debug Level" +#~ msgstr "Debug Level" + +#~ msgid "Disable some warnings" +#~ msgstr "Vô hiệu hóa một số cảnh báo" + +#~ msgid "Dump core on crash" +#~ msgstr "Dump core on crash" + +#~ msgid "High Priority" +#~ msgstr "High Priority" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Sử dụng thời gian nội bộ" + +#~ msgid "Log directory" +#~ msgstr "Thư mục log" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Số lượng cuộc gọi tối đa cho phép" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Mức độ tải tối đa để ngừng thu nhận cuộc gọi mới" + +#~ msgid "Disable console colors" +#~ msgstr "Vô hiệu hóa bản điều khiển màu sắc" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Thư mục sound files cache" + +#~ msgid "The Group to run as" +#~ msgstr "Nhóm vận hành như" + +#~ msgid "The User to run as" +#~ msgstr "Người sử dụng vận hành như" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Thư mục Voicemail Spool " + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Tiền tố UniquID với tên hệ thống" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Xây dựng đừng dẫn transcode via SLINEAR, không trực tiếp" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Truyền SLINEAR silence trong khi recording một channel" + +#~ msgid "Verbose Level" +#~ msgstr "Verbose Level" + +#~ msgid "Section dialplan" +#~ msgstr "Section dialplan" + +#~ msgid "include" +#~ msgstr "bao gồm" + +#~ msgid "Dialplan Extension" +#~ msgstr "Dialplan Extension" + +#~ msgid "Dialplan General Options" +#~ msgstr "Dialplan tùy chọn tổng quát" + +#~ msgid "Allow transfer" +#~ msgstr "Cho phép chuyển đổi" + +#~ msgid "Clear global vars" +#~ msgstr "Xóa global vars" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Dialplan Conference" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Dialplan Voicemail" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zones cho Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Tiền tố để thêm vào matching dialplans" + +#~ msgid "Match International prefix" +#~ msgstr "Match tiền tố quốc tê" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Tiền tố để thêm vào/ bỏ ra/ từ số gọi quốc tế" + +#~ msgid "localzone" +#~ msgstr "vùng địa phương" + +#~ msgid "Match plan" +#~ msgstr "Match plan" + +#~ msgid "Connection to use" +#~ msgstr "Kết nối sử dụng" + +#~ msgid "Feature Key maps" +#~ msgstr "Bản đồ phím tính năng" + +#~ msgid "Attended transfer key" +#~ msgstr "Attended transfer key" + +#~ msgid "Blind transfer key" +#~ msgstr "phím chuyển đổi ẩn" + +#~ msgid "Key to Disconnect call" +#~ msgstr "phím để vô hiệu hóa cuộc gọi" + +#~ msgid "Key to Park call" +#~ msgstr "phím để định vị cuộc gọi" + +#~ msgid "Parking Feature" +#~ msgstr "Tính năng định vị" + +#~ msgid "ADSI Park" +#~ msgstr "định vị ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Attended transfer timeout (sec)" + +#~ msgid "One touch record key" +#~ msgstr "Phím thu chạm một lần" + +#~ msgid "Name of call context for parking" +#~ msgstr "Tên của call context cho parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Tập tin âm thanh để play to parked caller" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Thời gian tối đa (ms) giữa các digits cho feature activation" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Phương pháp tìm điểm định vị" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Play courtesy tone để" + +#~ msgid "Enable Parking" +#~ msgstr "cho phép định vị" + +#~ msgid "Extension to dial to park" +#~ msgstr "nhanh số để gọi để định vị" + +#~ msgid "Parking time (secs)" +#~ msgstr "Thời gian định vị" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Vùng của đuôi mở rộng cho call parking" + +#~ msgid "Pickup extension" +#~ msgstr "Pickup extension" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Thời gian chờ giữa những chữ số khi chuyển đổi" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "âm thanh khi chuyển đổi hoàn tất" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "âm thanh khi chuyển đổi không thành công" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Tải lại cấu hình phần cứng" + +#~ msgid "Reboot Method" +#~ msgstr "phương pháp khởi động lại" + +#~ msgid "Parameter" +#~ msgstr "Tham số" + +#~ msgid "Option type" +#~ msgstr "Lựa chọn" + +#~ msgid "User name" +#~ msgstr "Tên người dùng" + +#~ msgid "IAX General Options" +#~ msgstr "Những lựa chọn tổng quát IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Cho phép Codecs" + +#~ msgid "Static" +#~ msgstr "Tĩnh" + +#~ msgid "Write Protect" +#~ msgstr "Viết bảo vệ" + +#~ msgid "Meetme Conference" +#~ msgstr "Gặp mặt thảo luận" + +#~ msgid "Admin PIN" +#~ msgstr "PIN quản trị" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN cuộc gặp" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Lựu chọn chung về thảo luận trực tiếp" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Số của 20ms audio buffers để được dùng" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Ứng dụng nhận báo thức" + +#~ msgid "Authentication Application" +#~ msgstr "Ứng dụng xác thực" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Bảo đảm asterisk không lưu CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Kiểm tra xem nếu kênh đã có sẵn" + +#~ msgid "Listen in on any channel" +#~ msgstr "Nghe trên bất kỳ kênh nào" + +#~ msgid "Control Playback Application" +#~ msgstr "Điều khiển ứng dụng phát lại" + +#~ msgid "Cuts up variables" +#~ msgstr "Cuts up variables" + +#~ msgid "Database access functions" +#~ msgstr "Chức năng truy cập cơ sở dữ liệu" + +#~ msgid "Dialing Application" +#~ msgstr "Ứng dụng quay số" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Ứng dụng virtual Dictation Machine " + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Directed hỗ trợ call pickup" + +#~ msgid "Extension Directory" +#~ msgstr "Danh bạ nhánh số" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Ứng dụng DISA (Direct Inward System Access) " + +#~ msgid "Dump channel variables Application" +#~ msgstr "Dump channel variables Application" + +#~ msgid "Simple Echo Application" +#~ msgstr "Ứng dụng Echo đơn giản" + +#~ msgid "ENUM Lookup" +#~ msgstr "ENUM tra cứu" + +#~ msgid "Reevaluates strings" +#~ msgstr "Đánh giá lại strings" + +#~ msgid "Executes applications" +#~ msgstr "thực thi ứng dụng" + +#~ msgid "External IVR application interface" +#~ msgstr "Ứng dụng giao diện bên ngoài IVR" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Fork The CDR into 2 nhân riêng biệt" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Lấy ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Group Management Routines" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Encode và Stream via icecast và ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Ứng dụng truyền hình ảnh" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Tra cứu tên/số của người gọi" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Tra cứu tên người gọi từ cơ sở dữ liệu địa phương" + +#~ msgid "Extension Macros" +#~ msgstr "Nhánh số Macro" + +#~ msgid "A simple math Application" +#~ msgstr "Ứng dụng tính toán đơn giản" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Ứng dụng MD5 checksum " + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Ứng dụng kiểm tra Digital Milliwatt (mu-law) " + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Thu âm cuộc gọi và phối âm trong khi thu" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Định vị cuộc gọi và ứng dụng thông báo" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Ứng dụng trivial Playback " + +#~ msgid "Require phone number to be entered" +#~ msgstr "Yêu cầu nhập số điện thoại" + +#~ msgid "True Call Queueing" +#~ msgstr "True Call Queueing" + +#~ msgid "Random goto" +#~ msgstr "Random goto" + +#~ msgid "Read Variable Application" +#~ msgstr "Ứng dụng đọc variable " + +#~ msgid "Read in a file" +#~ msgstr "Đọc trong một tập tin" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Tra cứu dữ liệu đúng lúc/ Viết lại" + +#~ msgid "Trivial Record Application" +#~ msgstr "Ứng dụng trivial record" + +#~ msgid "Say time" +#~ msgstr "Nói thời gian" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Ứng dụng gửi những chữ số DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Gửi ứng dụng tin nhắn" + +#~ msgid "Set CallerID Application" +#~ msgstr "Ứng dụng cài đặt định dạng cuộc gọi" + +#~ msgid "CDR user field apps" +#~ msgstr "CDR user field apps" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load =&gt; .so ; Đặt tên CallerID " + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load =&gt; .so ; Đặt số CallerID " + +#~ msgid "Set RDNIS Number" +#~ msgstr "Cài đặt số RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Cài đặt công suất truyền tải ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "SMS/PSTN handler" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Bãi bỏ kênh yêu cầu" + +#~ msgid "Stack Routines" +#~ msgstr "Ngăn xếp Routines" + +#~ msgid "Generic System() application" +#~ msgstr "Ứng dụng Genetic System" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback với bộ phát hiện tiếng nói" + +#~ msgid "Interface Test Application" +#~ msgstr "Ứng dụng kiểm tra giao diện" + +#~ msgid "Transfer" +#~ msgstr "truyền tải" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Gửi những ứng dụng URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Ứng dụng Custom User Event " + +#~ msgid "Send verbose output" +#~ msgstr "Gửi verbose output" + +#~ msgid "Voicemail" +#~ msgstr "Thư thoại" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Đợi tới tiếng ring đầu tiên sau khi" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Đợi ứng dụng im lặng" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Trong khi Loops và Conditional Execution" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Comma Separated Values CDR Backend" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Tùy chỉnh Comma Separated Values CDR Backend" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Asterisk Call Manager CDR Backend" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "MySQL CDR Backend" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "PostgreSQL CDR Backend" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "SQLite CDR Backend" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agent Proxy Channel" + +#~ msgid "Option chan_iax2" +#~ msgstr "Tùy chọn chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Local Proxy Channel" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptive Differential PCM Coder/Decoder" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law Coder/Decoder" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law and Mulaw direct Coder/Decoder" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32kbps G726 Transcoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (signed linear) Codec Translation" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (signed linear) Codec Translator" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law Coder/Decoder" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (signed linear)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "G.723.1 Simple Timestamp File Format" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Raw G.726 (16/24/32/40kbps) data" + +#~ msgid "Raw G729 data" +#~ msgstr "Raw G729 data" + +#~ msgid "Raw GSM data" +#~ msgstr "Raw GSM data" + +#~ msgid "Raw h263 data" +#~ msgstr "Raw h263 data" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "JPEG (Joint Picture Experts Group) Image" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Raw uLaw 8khz Audio support (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load =&gt; .so ; Raw aLaw 8khz PCM Audio support" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Raw Signed Linear Audio support (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Dialogic VOX (ADPCM) File Format" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Microsoft WAV format (8000hz Signed Line" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Microsoft WAV format (Proprietary GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Caller ID liên quan đến chức năng dialplan " + +#~ msgid "ENUM Functions" +#~ msgstr "chức năng ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Chức năng URI encoding / decoding " + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Extension Language Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Cấu hình Text Extension " + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load =&gt; .so ; chức năng Builtin dialplan " + +#~ msgid "Loopback Switch" +#~ msgstr "Loopback Switch" + +#~ msgid "Realtime Switch" +#~ msgstr "Realtime Switch" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Hỗ trợ outgoing spool" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Dialer)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL Config Resource" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC Config Resource" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL Module" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Cryptographic Digital Signatures" + +#~ msgid "Call Parking Resource" +#~ msgstr "Call Parking Resource" + +#~ msgid "Indications Configuration" +#~ msgstr "Cấu hình indications" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Call Monitoring Resource" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Music On Hold Resource" + +#~ msgid "ODBC Resource" +#~ msgstr "ODBC Resource" + +#~ msgid "SMDI Module" +#~ msgstr "SMDI Module" + +#~ msgid "SNMP Module" +#~ msgstr "SNMP Module" + +#~ msgid "Music On Hold" +#~ msgstr "Music On Hold" + +#~ msgid "Application" +#~ msgstr "Ứng dụng" + +#~ msgid "Directory of Music" +#~ msgstr "Thư mục music" + +#~ msgid "Option mode" +#~ msgstr "Chế độ tùy chọn" + +#~ msgid "Random Play" +#~ msgstr "Random Play" + +#~ msgid "DTMF mode" +#~ msgstr "chế độ DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Nhận dạng primary domain cho From: headers" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Từ user (yêu cầu bởi nhiều nhà cung cấp SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Ring on incoming dialplan contexts" + +#~ msgid "Allow Insecure for" +#~ msgstr "Cho phép không an toàn cho" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Hộp thư cho MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT giữa điện thoại và Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Kiểm tra tags trong headers" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Trả lời Timeout (ms) cho down kết nối" + +#~ msgid "Register connection" +#~ msgstr "Đăng ký kết nối" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Gọi nhánh số cho hộp thư" + +#~ msgid "Client Type" +#~ msgstr "Loại Client" + +#~ msgid "Username" +#~ msgstr "Username" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Cho phép Codecs" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Thư thoại tùy chọn tổng quát" + +#~ msgid "From Email address of server" +#~ msgstr "Từ địa chỉ email của server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Hộp thư thoại" + +#~ msgid "Email contains attachment" +#~ msgstr "Email bao gồm attachment" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Tên display" + +#~ msgid "Password" +#~ msgstr "Mật khẩu" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Cài đặt voice zone" + +#~ msgid "Message Format" +#~ msgstr "Message Format" diff --git a/applications/luci-app-asterisk/po/zh-cn/asterisk.po b/applications/luci-app-asterisk/po/zh-cn/asterisk.po new file mode 100644 index 00000000..9ef2f1f5 --- /dev/null +++ b/applications/luci-app-asterisk/po/zh-cn/asterisk.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-02 19:34+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \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.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk 基本选项" + +# test +#~ msgid "AGI directory" +#~ msgstr "AGI 目录" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "录音时缓存录音文件" + +#~ msgid "Debug Level" +#~ msgstr "调试级别" + +#~ msgid "Disable some warnings" +#~ msgstr "屏蔽部分警告" + +#~ msgid "Dump core on crash" +#~ msgstr "系统崩溃时记录错误信息" + +#~ msgid "High Priority" +#~ msgstr "高优先级" + +#~ msgid "Initialise Crypto" +#~ msgstr "初始化加密" + +#~ msgid "Use Internal Timing" +#~ msgstr "使用内部计时器" + +#~ msgid "Log directory" +#~ msgstr "日志目录" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "最大允许呼叫数" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "允许接受新呼叫的最大负载" + +#~ msgid "Disable console colors" +#~ msgstr "禁用控制台色彩" + +#~ msgid "Sound files Cache directory" +#~ msgstr "音效文件缓存目录" + +#~ msgid "The Group to run as" +#~ msgstr "以此“组”权限运行" + +#~ msgid "The User to run as" +#~ msgstr "以此“用户”身份运行" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "语音邮件缓存目录" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "UniquID前加系统名做前缀" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "由SLINEAR间接建立转码路径" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "对频道录音时传送SLINEAR静默" + +#~ msgid "Verbose Level" +#~ msgstr "详细级别" + +#~ msgid "Time Zone" +#~ msgstr "时区" + +#~ msgid "Section dialplan" +#~ msgstr "段内拨号计划" + +#~ msgid "include" +#~ msgstr "包含" + +#~ msgid "Dialplan Extension" +#~ msgstr "拨号计划 扩展" + +#~ msgid "Dialplan General Options" +#~ msgstr "拨号计划 基本参数" + +#~ msgid "Allow transfer" +#~ msgstr "允许 呼叫转移" + +#~ msgid "Clear global vars" +#~ msgstr "清除全局变量" + +#~ msgid "Dialplan Goto" +#~ msgstr "拨号计划至" + +#~ msgid "Dialplan Conference" +#~ msgstr "会议拨号计划" + +#~ msgid "Dialplan Time" +#~ msgstr "时间拨号计划" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "语音信箱拨号计划" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "适用拨号计划的拨号区域" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "用于匹配拨号计划的前缀" + +#~ msgid "Match International prefix" +#~ msgstr "匹配的国际前缀" + +#~ msgid "localzone" +#~ msgstr "本地区域" + +#~ msgid "Match plan" +#~ msgstr "匹配计划" + +#~ msgid "Connection to use" +#~ msgstr "使用连接" + +#~ msgid "Feature Key maps" +#~ msgstr "特殊键映射" + +#~ msgid "Attended transfer key" +#~ msgstr "加入传输键" + +#~ msgid "Blind transfer key" +#~ msgstr "屏蔽传输键" + +#~ msgid "Key to Disconnect call" +#~ msgstr "结束呼叫键" + +#~ msgid "Key to Park call" +#~ msgstr "呼叫驻留键" + +#~ msgid "Parking Feature" +#~ msgstr "驻留特性" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI驻留" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "加入传输超时(秒)" + +#~ msgid "One touch record key" +#~ msgstr "一键录制" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "显示名字" + +#~ msgid "Password" +#~ msgstr "密码" + +#~ msgid "zone" +#~ msgstr "区" + +#~ msgid "Message Format" +#~ msgstr "消息格式" diff --git a/applications/luci-app-asterisk/po/zh-tw/asterisk.po b/applications/luci-app-asterisk/po/zh-tw/asterisk.po new file mode 100644 index 00000000..c7eef9d1 --- /dev/null +++ b/applications/luci-app-asterisk/po/zh-tw/asterisk.po @@ -0,0 +1,13 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-08-06 23:52+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.9.0\n" diff --git a/applications/luci-app-asterisk/root/etc/config/asterisk b/applications/luci-app-asterisk/root/etc/config/asterisk new file mode 100644 index 00000000..24840979 --- /dev/null +++ b/applications/luci-app-asterisk/root/etc/config/asterisk @@ -0,0 +1,231 @@ +config 'asterisk' + option 'verbose' 3 + option 'debug' 3 + option 'zone' 'Australia/Perth' + +config 'hardware' 'reboot' + option 'method' 'web' + option 'param' 'http://ata.lan/admin/reboot' + +config 'feature' 'park' + option 'parkenabled' 'yes' + option 'parkext' '700' + option 'parkpos' '701-720' + option 'context' 'parkedcalls' + option 'parkingtime' '45' + option 'courtesytone' 'beep' + option 'parkedplay' 'caller' + option 'adsipark' 'yes' + option 'findslot' 'first' + option 'parkedmusicclass' 'default' + option 'transferdigittimeout' '3' + option 'xfersound' 'beep' + option 'xferfailsound' 'beeperr' + option 'pickupexten' '"*8"' + option 'featuredigittimeout' '500' + option 'atxfernoanswertimeout' '15' + +config 'feature' 'map' + option 'blindxfer' '#1' + option 'disconnect' '*0' + option 'automon' '*1' + option 'atxfer' '#2' + option 'parkcall' '#30' + +config 'sipgeneral' + option 'realm' 'sip.mydomain.net' + option 'allow' 'alaw' + option 'extension' '102' + +config 'module' + option 'res_config_mysql' 'no' + option 'res_crypto' 'auto' + option 'chan_iax2' 'yes' + +config 'sip' 'PAP2T' + option 'type' 'friend' + option 'extension' '101' + option 'username' 'PAP2T' + option 'secret' 'mypass' + option 'port' '5061' + option 'host' '' + option 'dtmfmode' 'rfc2833' + option 'insecure' 'very' + option 'context' 'internal' + option 'mailbox' '1001@default' + option 'nat' 'no' + option 'canreinvite' 'nonat' + option 'selfmailbox' 'yes' + option 'incoming' 'provider_inbound' + +config 'sip' 'PAP2T2' + option 'type' 'friend' + option 'extension' '101' + option 'username' 'PAP2T2' + option 'secret' 'mysecret' + option 'port' '5060' + option 'host' '' + option 'dtmfmode' 'rfc2833' + option 'insecure' 'very' + option 'context' 'internal' + option 'mailbox' '1001@default' + option 'nat' 'no' + option 'canreinvite' 'nonat' + option 'selfmailbox' 'yes' + option 'incoming' 'provider_inbound' + +config 'sip' 'providerphone' + option 'provider' 'yes' + option 'type' 'friend' + option 'timeout' '55' + option 'internationalprefix' '0011' + option 'alwaysinternational' 'no' + option 'countrycode' '63' + option 'register' 'yes' + option 'host' '200.200.200.200' + option 'username' '0899999999' + option 'fromuser' '0899999999' + option 'secret' 'mysecret' + option 'fromdomain' 'providerphone.provider.net.au' + option 'context' 'provider_inbound' + option 'canreinvite' 'no' + option 'nat' 'yes' + option 'qualify' 'yes' + option 'insecure' 'very' + option 'pedantic' 'no' + option 'qualify' '1000' + +config 'iaxgeneral' + option 'static' 'yes' + option 'writeprotect' 'no' + option 'canreinvite' 'no' + option 'allow' 'ulaw,gsm' + +config 'iax' 'nell' + option 'type' 'friend' + option 'extension' '108' + option 'host' '' + option 'username' 'nell' + option 'secret' 'mypass' + option 'context' 'internal' + +config 'iax' 'iax_vista' + option 'extension' '106' + option 'type' 'friend' + option 'host' '' + option 'username' 'vista' + option 'secret' 'mysecret' + option 'context' 'internal' + +config 'iax' 'sam' + option 'type' 'friend' + option 'extension' '103' + option 'host' '' + option 'username' 'sam' + option 'secret' 'mysecret' + option 'context' 'internal' + +config 'voicegeneral' + option 'serveremail' 'voice@sip.mydomain.net' + +config 'voicemail' + option 'number' '1001' + option 'context' 'default' + option 'password' '0000' + option 'name' 'Family' + option 'email' 'us@mydomain.net' + option 'zone' 'wa' + option 'attach' 'no' + +config 'voicezone' 'wa' + option 'zone' 'Australia/Perth' + option 'message' 'Q IMp' + +config 'voicezone' 'military' + option 'zone' 'Zulu' + option 'message' '"vm-received" q "digits/at" H N "hours" "phonetic/z_p"' + +config 'incominggeneral' + option 'allowtransfer' 'no' + option 'timeout' '20' + option 'answerfirst' 'no' + option 'mailbox' '1001@default' + +config 'dialplangeneral' + option 'static' 'yes' + option 'writeprotect' 'no' + option 'canreinvite' 'no' + option 'clearglobalvars' 'no' + option 'allowtransfer' 'no' + +config 'dialplan' 'internal' + option 'include' 'localcall interstate smartnumber emergency extensions' + +config 'dialplanvoice' + option 'dialplan' 'internal' + option 'extension' '1001' + option 'voicecontext' 'default' + option 'voicebox' '1001' + +config 'dialplansaytime' + option 'dialplan' 'internal' + option 'extension' '108' + +config 'dialplanmeetme' + option 'dialplan' 'internal' + option 'extension' '109' + option 'room' '101' + +config 'dialplanmeetme' + option 'dialplan' 'internal' + option 'extension' '1009' + option 'room' '' + +config 'dialplan' 'localinternational' + option 'include' 'mobile interstate' + +config 'dialzone' 'interstate' + option 'uses' 'SIP/providerphone' + option 'match' '0[235-8]NXXXXXXX' + option 'localprefix' '0' + +config 'dialzone' 'mobile' + option 'uses' 'SIP/providerphone' + option 'match' '04XXXXXXXX' + option 'localprefix' '0' + +config 'dialzone' 'smartnumber' + option 'uses' 'SIP/providerphone' + option 'match' '1[835]00.' + option 'match' '13ZXXX' + +config 'dialzone' 'emergency' + option 'uses' 'SIP/providerphone' + option 'match' '000' + option 'match' '112' + +config 'dialzone' 'localcall' + option 'uses' 'SIP/providerphone' + option 'match' 'NXXXXXXX' + option 'addprefix' '08' + option 'localprefix' '0' + +config 'dialzone' 'international' + option 'uses' 'SIP/providerphone' + option 'international' '0011,+' + option 'localzone' 'localinternational' + option 'localprefix' '0' + option 'addprefix' '' + +config 'meetmegeneral' + option 'audiobuffers' '32' + +config 'meetme' + option 'room' '101' + option 'pin' '' + option 'adminpin' '' + +config 'moh' 'default' + option 'mode' 'files' + option 'directory' '/opt/moh' + option 'random' 'no' diff --git a/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk b/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk new file mode 100755 index 00000000..e45819f6 --- /dev/null +++ b/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@asterisk[-1] + add ucitrack asterisk + set ucitrack.@asterisk[-1].init=asterisk + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-attendedsysupgrade/Makefile b/applications/luci-app-attendedsysupgrade/Makefile new file mode 100644 index 00000000..dbb572bd --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/Makefile @@ -0,0 +1,11 @@ +# See /LICENSE for more information. +# This is free software, licensed under the GNU General Public License v2. + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for attended sysupgrades +LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +attendedsysupgrade-common +cgi-io + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua b/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua new file mode 100644 index 00000000..1bd050af --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua @@ -0,0 +1,5 @@ +module("luci.controller.attendedsysupgrade", package.seeall) + +function index() + entry({"admin", "system", "attended_sysupgrade"}, template("attendedsysupgrade"), _("Attended Sysupgrade"), 1) +end diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm new file mode 100644 index 00000000..0a8c65eb --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm @@ -0,0 +1,124 @@ +<% +-- all lua code provided by https://github.com/jow-/ +-- thank you very much! + + function apply_acls(filename, session) + local json = require "luci.jsonc" + local util = require "luci.util" + local fs = require "nixio.fs" + + local grants = { } + + local acl = json.parse(fs.readfile(filename)) + if type(acl) ~= "table" then + return + end + + local group, perms + for group, perms in pairs(acl) do + local perm, scopes + for perm, scopes in pairs(perms) do + if type(scopes) == "table" then + local scope, objects + for scope, objects in pairs(scopes) do + if type(objects) == "table" then + if not grants[scope] then + grants[scope] = { } + end + + if next(objects) == 1 then + local _, object + for _, object in ipairs(objects) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], perm) + end + else + local object, funcs + for object, funcs in pairs(objects) do + if type(funcs) == "table" then + local _, func + for _, func in ipairs(funcs) do + if not grants[scope][object] then + grants[scope][object] = { } + end + table.insert(grants[scope][object], func) + end + end + end + end + end + end + end + end + end + + local _, scope, object, func + for scope, _ in pairs(grants) do + local objects = { } + for object, _ in pairs(_) do + for _, func in ipairs(_) do + table.insert(objects, { object, func }) + end + end + + util.ubus("session", "grant", { + ubus_rpc_session = session, + scope = scope, objects = objects + }) + end + end + + apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession) +%> +<%+header%> +

<%:Attended Sysupgrade%>

+
+ Easily search and install new releases and package upgrades. Sysupgrade firmware are created on demand based on locally installed packages. +
+ + + +

+ +

+
+
+
+ + + +
+
+ +
+
+
+
+
+ + +<%+footer%> diff --git a/applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade b/applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade new file mode 100755 index 00000000..1b890c0c --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade @@ -0,0 +1,7 @@ +#!/bin/sh + +rm -rf /tmp/luci-indexcache /tmp/luci-modulecache/ +/etc/init.d/uhttpd restart +/etc/init.d/rpcd reload + +return 0 diff --git a/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json b/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json new file mode 100644 index 00000000..75493192 --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json @@ -0,0 +1,31 @@ +{ + "attendedsysupgrade": { + "description": "attended sysupgrade via rpcd and luci", + "read": { + "ubus": { + "rpc-sys": [ + "upgrade_start", + "packagelist" + ], + "system": [ + "board", + "info" + ], + "uci": [ + "get", "set", "commit" + ] + }, + "uci": [ + "attendedsysupgrade" + ] + }, + "write": { + "cgi-io": [ + "upload" + ], + "uci": [ + "attendedsysupgrade" + ] + } + } +} diff --git a/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js new file mode 100644 index 00000000..60f586de --- /dev/null +++ b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js @@ -0,0 +1,402 @@ +function $(s) { + return document.getElementById(s.substring(1)); +} + +function show(s) { + $(s).style.display = 'block'; +} + +function hide(s) { + $(s).style.display = 'none'; +} + +function set_server() { + hide("#error_box"); + data.url = $("#server").value; + ubus_call("uci", "set", { "config": "attendedsysupgrade", "section": "server", values: { "url": data.url } }) + ubus_call("uci", "commit", { "config": "attendedsysupgrade" }) + var server_button = $("#server") + server_button.type = 'button'; + server_button.className = 'cbi-button cbi-button-edit'; + server_button.parentElement.removeChild($("#button_set")); + server_button.onclick = edit_server; +} + +function edit_server() { + $("#server").type = 'text'; + $("#server").onkeydown = function(event) { + if(event.key === 'Enter') { + set_server(); + return false; + } + } + $("#server").className = ''; + $("#server").onclick = null; + + button_set = document.createElement("input"); + button_set.type = "button"; + button_set.value = "Save"; + button_set.name = "button_set"; + button_set.id = "button_set"; + button_set.className = 'cbi-button cbi-button-edit'; + button_set.style = 'background-image: url("/luci-static/resources/cbi/save.gif");' + button_set.onclick = set_server + $("#server").parentElement.appendChild(button_set); +} + +function edit_packages() { + data.edit_packages = true + hide("#edit_button"); + $("#edit_packages").value = data.packages.join("\n"); + show("#edit_packages"); +} + +// requests to the upgrade server +function server_request(request_dict, path, callback) { + request_dict.distro = data.release.distribution; + request_dict.target = data.release.target.split("\/")[0]; + request_dict.subtarget = data.release.target.split("\/")[1]; + var request = new XMLHttpRequest(); + request.open("POST", data.url + "/" + path, true); + request.setRequestHeader("Content-type", "application/json"); + request.send(JSON.stringify(request_dict)); + request.onerror = function(e) { + error_box("upgrade server down") + show("#server_div"); + } + request.addEventListener('load', function(event) { + callback(request) + }); +} + +// initial setup, get system information +function setup() { + ubus_call("rpc-sys", "packagelist", {}, "packages"); + ubus_call("system", "board", {}, "release"); + ubus_call("system", "board", {}, "board_name"); + ubus_call("system", "board", {}, "model"); + ubus_call("system", "info", {}, "memory"); + uci_get({ "config": "attendedsysupgrade", "section": "server", "option": "url" }) + uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "upgrade_packages" }) + uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "advanced_mode" }) + uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "auto_search" }) + setup_ready(); +} + +function setup_ready() { + // checks if a async ubus calls have finished + if(ubus_counter != ubus_closed) { + setTimeout(setup_ready, 300) + } else { + if(data.auto_search == 1) { + upgrade_check(); + } else { + show("#upgrade_button"); + show("#server_div"); + $("#server").value = data.url; + } + } +} + +function uci_get(option) { + // simple wrapper to get a uci value store in data.