1
0
Pārlūkot izejas kodu

Add luci to packages/ instead of using a feed

RISCi_ATOM 8 gadi atpakaļ
vecāks
revīzija
d552ef895a
100 mainītis faili ar 13358 papildinājumiem un 0 dzēšanām
  1. 62 0
      package/luci/CONTRIBUTING.md
  2. 201 0
      package/luci/LICENSE
  3. 9 0
      package/luci/NOTICE
  4. 26 0
      package/luci/THANKYOU
  5. 14 0
      package/luci/applications/luci-app-adblock/Makefile
  6. 12 0
      package/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua
  7. 103 0
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
  8. 131 0
      package/luci/applications/luci-app-adblock/po/ja/adblock.po
  9. 114 0
      package/luci/applications/luci-app-adblock/po/sv/adblock.po
  10. 112 0
      package/luci/applications/luci-app-adblock/po/templates/adblock.pot
  11. 125 0
      package/luci/applications/luci-app-adblock/po/zh-cn/adblock.po
  12. 11 0
      package/luci/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock
  13. 14 0
      package/luci/applications/luci-app-ahcp/Makefile
  14. 49 0
      package/luci/applications/luci-app-ahcp/luasrc/controller/ahcp.lua
  15. 110 0
      package/luci/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua
  16. 1 0
      package/luci/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm
  17. 53 0
      package/luci/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm
  18. 117 0
      package/luci/applications/luci-app-ahcp/po/ca/ahcp.po
  19. 114 0
      package/luci/applications/luci-app-ahcp/po/cs/ahcp.po
  20. 115 0
      package/luci/applications/luci-app-ahcp/po/de/ahcp.po
  21. 114 0
      package/luci/applications/luci-app-ahcp/po/el/ahcp.po
  22. 115 0
      package/luci/applications/luci-app-ahcp/po/en/ahcp.po
  23. 115 0
      package/luci/applications/luci-app-ahcp/po/es/ahcp.po
  24. 115 0
      package/luci/applications/luci-app-ahcp/po/fr/ahcp.po
  25. 118 0
      package/luci/applications/luci-app-ahcp/po/he/ahcp.po
  26. 116 0
      package/luci/applications/luci-app-ahcp/po/hu/ahcp.po
  27. 114 0
      package/luci/applications/luci-app-ahcp/po/it/ahcp.po
  28. 117 0
      package/luci/applications/luci-app-ahcp/po/ja/ahcp.po
  29. 105 0
      package/luci/applications/luci-app-ahcp/po/ms/ahcp.po
  30. 117 0
      package/luci/applications/luci-app-ahcp/po/no/ahcp.po
  31. 115 0
      package/luci/applications/luci-app-ahcp/po/pl/ahcp.po
  32. 115 0
      package/luci/applications/luci-app-ahcp/po/pt-br/ahcp.po
  33. 116 0
      package/luci/applications/luci-app-ahcp/po/pt/ahcp.po
  34. 115 0
      package/luci/applications/luci-app-ahcp/po/ro/ahcp.po
  35. 120 0
      package/luci/applications/luci-app-ahcp/po/ru/ahcp.po
  36. 106 0
      package/luci/applications/luci-app-ahcp/po/sk/ahcp.po
  37. 109 0
      package/luci/applications/luci-app-ahcp/po/sv/ahcp.po
  38. 99 0
      package/luci/applications/luci-app-ahcp/po/templates/ahcp.pot
  39. 113 0
      package/luci/applications/luci-app-ahcp/po/tr/ahcp.po
  40. 115 0
      package/luci/applications/luci-app-ahcp/po/uk/ahcp.po
  41. 114 0
      package/luci/applications/luci-app-ahcp/po/vi/ahcp.po
  42. 113 0
      package/luci/applications/luci-app-ahcp/po/zh-cn/ahcp.po
  43. 109 0
      package/luci/applications/luci-app-ahcp/po/zh-tw/ahcp.po
  44. 11 0
      package/luci/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp
  45. 39 0
      package/luci/applications/luci-app-aria2/Makefile
  46. 42 0
      package/luci/applications/luci-app-aria2/luasrc/controller/aria2.lua
  47. 211 0
      package/luci/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua
  48. 77 0
      package/luci/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm
  49. 208 0
      package/luci/applications/luci-app-aria2/po/templates/aria2.pot
  50. 200 0
      package/luci/applications/luci-app-aria2/po/zh-cn/aria2.po
  51. 11 0
      package/luci/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2
  52. 13 0
      package/luci/applications/luci-app-asterisk/Makefile
  53. 746 0
      package/luci/applications/luci-app-asterisk/luasrc/asterisk.lua
  54. 245 0
      package/luci/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua
  55. 194 0
      package/luci/applications/luci-app-asterisk/luasrc/controller/asterisk.lua
  56. 91 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua
  57. 49 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua
  58. 22 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua
  59. 391 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua
  60. 47 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua
  61. 45 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua
  62. 53 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua
  63. 89 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua
  64. 29 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua
  65. 53 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua
  66. 100 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua
  67. 77 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua
  68. 98 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua
  69. 41 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua
  70. 151 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua
  71. 125 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua
  72. 103 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua
  73. 123 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua
  74. 38 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua
  75. 17 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua
  76. 145 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua
  77. 104 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua
  78. 86 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua
  79. 94 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua
  80. 48 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua
  81. 51 0
      package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua
  82. 13 0
      package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm
  83. 245 0
      package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm
  84. 165 0
      package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm
  85. 680 0
      package/luci/applications/luci-app-asterisk/po/ca/asterisk.po
  86. 11 0
      package/luci/applications/luci-app-asterisk/po/cs/asterisk.po
  87. 131 0
      package/luci/applications/luci-app-asterisk/po/de/asterisk.po
  88. 71 0
      package/luci/applications/luci-app-asterisk/po/el/asterisk.po
  89. 680 0
      package/luci/applications/luci-app-asterisk/po/en/asterisk.po
  90. 355 0
      package/luci/applications/luci-app-asterisk/po/es/asterisk.po
  91. 569 0
      package/luci/applications/luci-app-asterisk/po/fr/asterisk.po
  92. 194 0
      package/luci/applications/luci-app-asterisk/po/he/asterisk.po
  93. 134 0
      package/luci/applications/luci-app-asterisk/po/hu/asterisk.po
  94. 162 0
      package/luci/applications/luci-app-asterisk/po/it/asterisk.po
  95. 44 0
      package/luci/applications/luci-app-asterisk/po/ja/asterisk.po
  96. 611 0
      package/luci/applications/luci-app-asterisk/po/ms/asterisk.po
  97. 12 0
      package/luci/applications/luci-app-asterisk/po/no/asterisk.po
  98. 75 0
      package/luci/applications/luci-app-asterisk/po/pl/asterisk.po
  99. 691 0
      package/luci/applications/luci-app-asterisk/po/pt-br/asterisk.po
  100. 150 0
      package/luci/applications/luci-app-asterisk/po/pt/asterisk.po

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

+ 201 - 0
package/luci/LICENSE

@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

+ 9 - 0
package/luci/NOTICE

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

+ 26 - 0
package/luci/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
+	

+ 14 - 0
package/luci/applications/luci-app-adblock/Makefile

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

+ 12 - 0
package/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua

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

+ 103 - 0
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua

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

+ 131 - 0
package/luci/applications/luci-app-adblock/po/ja/adblock.po

@@ -0,0 +1,131 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: musashino205 <musashino.open@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.7\n"
+
+msgid ""
+"). Note that list URLs and Shallalist category selections are not "
+"configurable via Luci."
+msgstr ""
+")。これらのリストのURLおよびshallaリストのカテゴリー選択は、Luciによって設定"
+"できないことに注意します。"
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Available blocklist sources ("
+msgstr "利用可能なブロックリスト提供元です("
+
+msgid "Backup directory"
+msgstr "バックアップ ディレクトリ"
+
+msgid "Backup options"
+msgstr "バックアップ オプション"
+
+msgid "Blocklist sources"
+msgstr "ブロックリスト提供元"
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"広告/不正ドメインをDNSを利用してブロックする、adblock パッケージの設定です。"
+
+msgid "Count"
+msgstr "カウント"
+
+msgid "Description"
+msgstr "説明"
+
+msgid "Do not write status info to flash"
+msgstr "ステータス情報をフラッシュに書き込まない"
+
+msgid "Enable adblock"
+msgstr "adblockの有効化"
+
+msgid "Enable blocklist backup"
+msgstr "ブロックリスト バックアップの有効化"
+
+msgid "Enabled"
+msgstr "有効"
+
+msgid "Extra options"
+msgstr "拡張設定"
+
+msgid ""
+"File with whitelisted hosts/domains that are allowed despite being on a "
+"blocklist."
+msgstr ""
+"ファイルのホワイトリスト ホスト/ドメインは、ブロックリストに登録されていても"
+"許可されます。"
+
+msgid "Global options"
+msgstr "一般設定"
+
+msgid "IPv4 blackhole ip address"
+msgstr ""
+
+msgid "IPv6 blackhole ip address"
+msgstr ""
+
+msgid "Last update of the blocklists"
+msgstr "ブロックリストの最終更新日時"
+
+msgid "List date/state"
+msgstr "リスト日時/状態"
+
+msgid "Name of the logical lan interface"
+msgstr "論理LANインターフェース名"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
+
+msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
+msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)"
+
+msgid "Port of the adblock uhttpd instance"
+msgstr "adblock uhttpdインスタンスのポート"
+
+msgid "Port of the adblock uhttpd instance for https links"
+msgstr "httpsリンク用adblock uhttpdインスタンスのポート"
+
+msgid "Redirect all DNS queries to the local resolver"
+msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト"
+
+msgid ""
+"Skip writing update status information to the config file. Status fields on "
+"this page will not be updated."
+msgstr ""
+"更新ステータス情報をコンフィグファイルに書き込まず、スキップします。このペー"
+"ジのステータス画面は更新されなくなります。"
+
+msgid "Statistics"
+msgstr "ステータス"
+
+msgid "Timeout for blocklist fetch (seconds)"
+msgstr "ブロックリスト取得の制限時間(秒)"
+
+msgid "Total count of blocked domains"
+msgstr "ブロック済みドメインの合計"
+
+msgid ""
+"When adblock is active, all DNS queries are redirected to the local resolver "
+"in this server by default. You can disable that to allow queries to external "
+"DNS servers."
+msgstr ""
+"adblockがアクティブである時、全てのDNSクエリは既定でこのサーバー上のリゾルバ"
+"にリダイレクトされます。外部DNSサーバーへのクエリを許可する場合、この設定を無"
+"効にすることもできます。"
+
+msgid "Whitelist file"
+msgstr "ホワイトリスト ファイル"
+
+msgid "see list details"
+msgstr "リストの詳細を見る"

+ 114 - 0
package/luci/applications/luci-app-adblock/po/sv/adblock.po

@@ -0,0 +1,114 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid ""
+"). Note that list URLs and Shallalist category selections are not "
+"configurable via Luci."
+msgstr ""
+
+msgid "Adblock"
+msgstr "Blockering av annonser"
+
+msgid "Available blocklist sources ("
+msgstr "Tillgängliga källor för blockeringslistor ("
+
+msgid "Backup directory"
+msgstr "Säkerhetskopiera mapp"
+
+msgid "Backup options"
+msgstr "Alternativ för säkerhetskopiering"
+
+msgid "Blocklist sources"
+msgstr "Källor för blockeringslistor"
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Konfiguration av paket adblock för att blockera annons/otillåtna domäner "
+"genom att användning DNS."
+
+msgid "Count"
+msgstr "Räkna"
+
+msgid "Description"
+msgstr "Beskrivning"
+
+msgid "Do not write status info to flash"
+msgstr "Skriv inte status info till flash"
+
+msgid "Enable adblock"
+msgstr "Aktivera abblock"
+
+msgid "Enable blocklist backup"
+msgstr "Aktivera säkerhetskopiering av blockeringslistan"
+
+msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid "Extra options"
+msgstr "Extra alternativ"
+
+msgid ""
+"File with whitelisted hosts/domains that are allowed despite being on a "
+"blocklist."
+msgstr ""
+
+msgid "Global options"
+msgstr "Globala alternativ"
+
+msgid "IPv4 blackhole ip address"
+msgstr ""
+
+msgid "IPv6 blackhole ip address"
+msgstr ""
+
+msgid "Last update of the blocklists"
+msgstr ""
+
+msgid "List date/state"
+msgstr ""
+
+msgid "Name of the logical lan interface"
+msgstr ""
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+
+msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
+msgstr ""
+
+msgid "Port of the adblock uhttpd instance"
+msgstr ""
+
+msgid "Port of the adblock uhttpd instance for https links"
+msgstr ""
+
+msgid "Redirect all DNS queries to the local resolver"
+msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern"
+
+msgid ""
+"Skip writing update status information to the config file. Status fields on "
+"this page will not be updated."
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Timeout for blocklist fetch (seconds)"
+msgstr ""
+
+msgid "Total count of blocked domains"
+msgstr ""
+
+msgid ""
+"When adblock is active, all DNS queries are redirected to the local resolver "
+"in this server by default. You can disable that to allow queries to external "
+"DNS servers."
+msgstr ""
+
+msgid "Whitelist file"
+msgstr "Vitlista fil"
+
+msgid "see list details"
+msgstr "se listans detaljer"

+ 112 - 0
package/luci/applications/luci-app-adblock/po/templates/adblock.pot

@@ -0,0 +1,112 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid ""
+"). Note that list URLs and Shallalist category selections are not "
+"configurable via Luci."
+msgstr ""
+
+msgid "Adblock"
+msgstr ""
+
+msgid "Available blocklist sources ("
+msgstr ""
+
+msgid "Backup directory"
+msgstr ""
+
+msgid "Backup options"
+msgstr ""
+
+msgid "Blocklist sources"
+msgstr ""
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+
+msgid "Count"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Do not write status info to flash"
+msgstr ""
+
+msgid "Enable adblock"
+msgstr ""
+
+msgid "Enable blocklist backup"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "Extra options"
+msgstr ""
+
+msgid ""
+"File with whitelisted hosts/domains that are allowed despite being on a "
+"blocklist."
+msgstr ""
+
+msgid "Global options"
+msgstr ""
+
+msgid "IPv4 blackhole ip address"
+msgstr ""
+
+msgid "IPv6 blackhole ip address"
+msgstr ""
+
+msgid "Last update of the blocklists"
+msgstr ""
+
+msgid "List date/state"
+msgstr ""
+
+msgid "Name of the logical lan interface"
+msgstr ""
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+
+msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
+msgstr ""
+
+msgid "Port of the adblock uhttpd instance"
+msgstr ""
+
+msgid "Port of the adblock uhttpd instance for https links"
+msgstr ""
+
+msgid "Redirect all DNS queries to the local resolver"
+msgstr ""
+
+msgid ""
+"Skip writing update status information to the config file. Status fields on "
+"this page will not be updated."
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Timeout for blocklist fetch (seconds)"
+msgstr ""
+
+msgid "Total count of blocked domains"
+msgstr ""
+
+msgid ""
+"When adblock is active, all DNS queries are redirected to the local resolver "
+"in this server by default. You can disable that to allow queries to external "
+"DNS servers."
+msgstr ""
+
+msgid "Whitelist file"
+msgstr ""
+
+msgid "see list details"
+msgstr ""

+ 125 - 0
package/luci/applications/luci-app-adblock/po/zh-cn/adblock.po

@@ -0,0 +1,125 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: kuoruan@gmail.com\n"
+"Language-Team: none\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.5\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid ""
+"). Note that list URLs and Shallalist category selections are not "
+"configurable via Luci."
+msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。"
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Available blocklist sources ("
+msgstr "可用拦截列表来源("
+
+msgid "Backup directory"
+msgstr "备份目录"
+
+msgid "Backup options"
+msgstr "备份选项"
+
+msgid "Blocklist sources"
+msgstr "拦截列表来源"
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
+
+msgid "Count"
+msgstr "数量"
+
+msgid "Description"
+msgstr "描述"
+
+msgid "Do not write status info to flash"
+msgstr ""
+
+msgid "Enable adblock"
+msgstr "启用Adblock"
+
+msgid "Enable blocklist backup"
+msgstr "启用拦截规则备份"
+
+msgid "Enabled"
+msgstr "启用"
+
+msgid "Extra options"
+msgstr "额外选项"
+
+msgid ""
+"File with whitelisted hosts/domains that are allowed despite being on a "
+"blocklist."
+msgstr "允许的主机/域名列表"
+
+msgid "Global options"
+msgstr "全局选项"
+
+msgid "IPv4 blackhole ip address"
+msgstr "IPv4禁止列表"
+
+msgid "IPv6 blackhole ip address"
+msgstr "IPv6禁止列表"
+
+msgid "Last update of the blocklists"
+msgstr ""
+
+msgid "List date/state"
+msgstr "列表日期/状态"
+
+msgid "Name of the logical lan interface"
+msgstr "LAN接口名称"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "在默认设置并不适合你时的额外选项。"
+
+msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
+msgstr ""
+
+msgid "Port of the adblock uhttpd instance"
+msgstr "Adblock uhttpd端口"
+
+msgid "Port of the adblock uhttpd instance for https links"
+msgstr ""
+
+msgid "Redirect all DNS queries to the local resolver"
+msgstr "将所有DNS查询都重定向到本地解析器"
+
+msgid ""
+"Skip writing update status information to the config file. Status fields on "
+"this page will not be updated."
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Timeout for blocklist fetch (seconds)"
+msgstr "列表查询超时时间(秒)"
+
+msgid "Total count of blocked domains"
+msgstr "阻止域名总数"
+
+msgid ""
+"When adblock is active, all DNS queries are redirected to the local resolver "
+"in this server by default. You can disable that to allow queries to external "
+"DNS servers."
+msgstr ""
+"当Adblock处于活动状态时,默认情况下会将所有的DNS查询重定向到此服务器的本地解"
+"析器。您可以禁用以允许查询外部DNS服务器。"
+
+msgid "Whitelist file"
+msgstr "白名单文件"
+
+msgid "see list details"
+msgstr "查看列表详情"

+ 11 - 0
package/luci/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

+ 14 - 0
package/luci/applications/luci-app-ahcp/Makefile

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

+ 49 - 0
package/luci/applications/luci-app-ahcp/luasrc/controller/ahcp.lua

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

+ 110 - 0
package/luci/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua

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

+ 1 - 0
package/luci/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm

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

+ 53 - 0
package/luci/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm

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

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

+ 114 - 0
package/luci/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 <lukas.koluch@gmail.com>\n"
+"Language-Team: none\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "AHCP Server"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP je autokonfigurační protokol pro IPv6 a dual-stack IPv6/IPv4 sítě, "
+"vytvořený pro použití vedle funkcí router discovery (Vyhledávání směrovačů "
+"pomocí ICMP zpráv) a DHCP na sítích kde je obtížné či nemožné nakonfigurovat "
+"server v každé vrstvě broadcast domény, například mobilní ad-hoc sítě."
+
+msgid "Active AHCP Leases"
+msgstr "Aktivní AHCP zapůjčení"
+
+msgid "Address"
+msgstr "Adresa"
+
+msgid "Advanced Settings"
+msgstr "Pokročilé nastavení"
+
+msgid "Age"
+msgstr "Stáří"
+
+msgid "Announced DNS servers"
+msgstr "Oznámené DNS servery"
+
+msgid "Announced NTP servers"
+msgstr "Oznámené NTP servery"
+
+msgid "Announced prefixes"
+msgstr "Oznámené předčíslí"
+
+msgid "Collecting data..."
+msgstr "Probíhá shromažďování dat..."
+
+msgid "Forwarder"
+msgstr "Přesměrování"
+
+msgid "General Setup"
+msgstr "Obecné nastavení"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 a IPv6"
+
+msgid "IPv4 only"
+msgstr "pouze IPv4"
+
+msgid "IPv6 only"
+msgstr "Pouze IPv6"
+
+msgid "Lease directory"
+msgstr "Zapůjčené adresáře"
+
+msgid "Lease validity time"
+msgstr "Doba platnosti zapujčení"
+
+msgid "Log file"
+msgstr "Soubor protokolu"
+
+msgid "Multicast address"
+msgstr "Vícesměrové adresy"
+
+msgid "Operation mode"
+msgstr "Pracovní režim"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Rodina protokolů"
+
+msgid "Served interfaces"
+msgstr "Obsluhované rozhraní"
+
+msgid "Server"
+msgstr "Servr"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Specifikuje ohlášené IPv4 a IPv6 NTP servery"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Specifikuje ohlášené IPv4 a IPv6 názvové servery"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr "Specifikuje ohlášené IPv4 a IPv6 sítě předpony v CIDR notaci"
+
+msgid "The AHCP Service is not running."
+msgstr "Služba AHCP neběží"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "Služba AHCP je spuštěna s ID %s."
+
+msgid "There are no active leases."
+msgstr "Neexistují žádná aktivní pronajmutí."
+
+msgid "Unique ID file"
+msgstr "Jedinečný ID soubor"

+ 115 - 0
package/luci/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 <gerd_roethig@web.de>\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "AHCP Server"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP ist ein Autokonfigurationsprotokoll für IPv6- und IPv4/IPv6 Dualstack-"
+"Netzwerke. Es ist darauf ausgelegt anstelle von Router Advertisements und "
+"DHCP-Servern in Ad-Hoc Netzwerken eingesetzt zu werden."
+
+msgid "Active AHCP Leases"
+msgstr "Aktive AHCP-Leases"
+
+msgid "Address"
+msgstr "Adresse"
+
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
+
+msgid "Age"
+msgstr "Alter"
+
+msgid "Announced DNS servers"
+msgstr "Angekündigte DNS-Server"
+
+msgid "Announced NTP servers"
+msgstr "Angekündigte NTP-Server"
+
+msgid "Announced prefixes"
+msgstr "Angekündigte Prefixe"
+
+msgid "Collecting data..."
+msgstr "Sammle Daten..."
+
+msgid "Forwarder"
+msgstr "Forwarder"
+
+msgid "General Setup"
+msgstr "Allgemeine Einstellungen"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 und IPv6"
+
+msgid "IPv4 only"
+msgstr "nur IPv4"
+
+msgid "IPv6 only"
+msgstr "nur IPv6"
+
+msgid "Lease directory"
+msgstr "Lease-Verzeichnis"
+
+msgid "Lease validity time"
+msgstr "Lease-Gültigkeitsdauer"
+
+msgid "Log file"
+msgstr "Protokolldatei"
+
+msgid "Multicast address"
+msgstr "Mutlicast-Adresse"
+
+msgid "Operation mode"
+msgstr "Betriebsmodus"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Protokollfamilie"
+
+msgid "Served interfaces"
+msgstr "Verwendete Schnittstellen"
+
+msgid "Server"
+msgstr "Server"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-NTP-Server"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-DNS-Server"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+"Konfiguriert die bekannt gegebenen IPv4- und IPv6-Netzwerkprefixe. Angabe in "
+"CIDR-Notation."
+
+msgid "The AHCP Service is not running."
+msgstr "Der AHCP-Dienst läuft nicht."
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "Der AHCP-Dienst läuft mit ID %s."
+
+msgid "There are no active leases."
+msgstr "Es gibt keine aktiven Leases."
+
+msgid "Unique ID file"
+msgstr "UID-Datei"

+ 114 - 0
package/luci/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 <acinonyx@openwrt.gr>\n"
+"Language-Team: none\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+msgid "AHCP Server"
+msgstr "Εξυπηρετητής AHCP"
+
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+
+msgid "Active AHCP Leases"
+msgstr "Ενεργά AHCP Leases"
+
+msgid "Address"
+msgstr "Διεύθυνση"
+
+msgid "Advanced Settings"
+msgstr ""
+
+msgid "Age"
+msgstr ""
+
+msgid "Announced DNS servers"
+msgstr ""
+
+msgid "Announced NTP servers"
+msgstr ""
+
+msgid "Announced prefixes"
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "Συλλέγονται δεδομένα..."
+
+msgid "Forwarder"
+msgstr "Προωθητής"
+
+msgid "General Setup"
+msgstr "Γενικές ρυθμίσεις"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 και IPv6"
+
+msgid "IPv4 only"
+msgstr "μόνο IPv4"
+
+msgid "IPv6 only"
+msgstr "μόνο IPv6"
+
+#, fuzzy
+msgid "Lease directory"
+msgstr "Κατάλογος leases"
+
+msgid "Lease validity time"
+msgstr "Χρόνος εγκυρότητας lease"
+
+msgid "Log file"
+msgstr "Αρχείο καταγραφής"
+
+msgid "Multicast address"
+msgstr "Διεύθυνση multicast"
+
+msgid "Operation mode"
+msgstr ""
+
+msgid "Port"
+msgstr "Θύρα"
+
+msgid "Protocol family"
+msgstr "Οικογένεια πρωτοκόλλου"
+
+msgid "Served interfaces"
+msgstr "Εξυπηρετούμενες διεπαφές"
+
+msgid "Server"
+msgstr "Εξυπηρετητής"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Καθορίζει τους εξυπηρετητές NTP σε IPv4 και IPv6 που ανακοινώνονται"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Καθορίζει τους εξυπηρετητές DNS σε IPv4 και IPv6 που ανακοινώνονται"
+
+#, fuzzy
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+"Καθορίζει τα προθέματα διευθύνσεων IPv4 και IPv6 που ανακοινώνονται, σε "
+"μορφή CIDR"
+
+msgid "The AHCP Service is not running."
+msgstr ""
+
+msgid "The AHCP Service is running with ID %s."
+msgstr ""
+
+#, fuzzy
+msgid "There are no active leases."
+msgstr "Δεν υπάρχουν ενεργά leases"
+
+msgid "Unique ID file"
+msgstr "Αρχείο μοναδικού αναγνωριστικού"

+ 115 - 0
package/luci/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 <madanadam@gmail.com>\n"
+"Language-Team: none\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+msgid "AHCP Server"
+msgstr "AHCP Server"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery and DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+
+msgid "Active AHCP Leases"
+msgstr "Active AHCP Leases"
+
+msgid "Address"
+msgstr "Address"
+
+msgid "Advanced Settings"
+msgstr "Advanced Settings"
+
+msgid "Age"
+msgstr "Age"
+
+msgid "Announced DNS servers"
+msgstr "Announced DNS servers"
+
+msgid "Announced NTP servers"
+msgstr "Announced NTP servers"
+
+msgid "Announced prefixes"
+msgstr "Announced prefixes"
+
+msgid "Collecting data..."
+msgstr "Collecting data..."
+
+msgid "Forwarder"
+msgstr "Forwarder"
+
+msgid "General Setup"
+msgstr "General Setup"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 and IPv6"
+
+msgid "IPv4 only"
+msgstr "IPv4 only"
+
+msgid "IPv6 only"
+msgstr "IPv6 only"
+
+msgid "Lease directory"
+msgstr "Lease directory"
+
+msgid "Lease validity time"
+msgstr "Lease validity time"
+
+msgid "Log file"
+msgstr "Log file"
+
+msgid "Multicast address"
+msgstr "Multicast address"
+
+msgid "Operation mode"
+msgstr "Operation mode"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Protocol family"
+
+msgid "Served interfaces"
+msgstr "Served interfaces"
+
+msgid "Server"
+msgstr "Server"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Specifies the announced IPv4 and IPv6 NTP servers"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Specifies the announced IPv4 and IPv6 name servers"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+"Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+
+msgid "The AHCP Service is not running."
+msgstr "The AHCP Service is not running."
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "The AHCP Service is running with ID %s."
+
+msgid "There are no active leases."
+msgstr "There are no active leases."
+
+msgid "Unique ID file"
+msgstr "Unique ID file"

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

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

+ 118 - 0
package/luci/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 <sagim9@gmail.com>\n"
+"Language-Team: none\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "שרת AHCP"
+
+# מי שמבין את המונחים הטכניים שיעבור על זה ויתקן.
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP הוא פרוטוקול להגדרה אוטומטית של רשתות IPV6 ו- dual-stack IPv6/IPv4, אשר "
+"עוצב לשימוש כתחליף לגילוי נתבים ול- DHCP ברשתות שבהן קשה או בלתי אפשרי "
+"להגדיר שרת בתוך כל שם מתחם לשידור שכבת קישור, לדוגמה רשתות אד-הוק ניידות."
+
+#, fuzzy
+msgid "Active AHCP Leases"
+msgstr "החכרות AHCP קיימות"
+
+msgid "Address"
+msgstr "כתובת"
+
+msgid "Advanced Settings"
+msgstr "הגדרות מתקדמות"
+
+msgid "Age"
+msgstr "גיל"
+
+msgid "Announced DNS servers"
+msgstr "שרתי DNS מוכרזים"
+
+msgid "Announced NTP servers"
+msgstr "שרתי NTP מוכרזים"
+
+msgid "Announced prefixes"
+msgstr "קידומות מוכרזות"
+
+msgid "Collecting data..."
+msgstr "אוסף נתונים..."
+
+msgid "Forwarder"
+msgstr ""
+
+msgid "General Setup"
+msgstr "התקנה כללית"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 ו- IPv6"
+
+msgid "IPv4 only"
+msgstr "IPv4 בלבד"
+
+msgid "IPv6 only"
+msgstr "IPv6 בלבד"
+
+#, fuzzy
+msgid "Lease directory"
+msgstr "ספריית החכרות"
+
+# תו
+msgid "Lease validity time"
+msgstr "תוקף ההקצאה"
+
+msgid "Log file"
+msgstr "קובץ רישום"
+
+msgid "Multicast address"
+msgstr "כתובת Multicast"
+
+# אפשר גם מצב פעולה
+msgid "Operation mode"
+msgstr "מצב הפעלה"
+
+msgid "Port"
+msgstr "פורט"
+
+msgid "Protocol family"
+msgstr "משפחת פרוטוקולים"
+
+msgid "Served interfaces"
+msgstr "סיגמנטים מופעלים"
+
+msgid "Server"
+msgstr "שרת"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "שרתי NTP ברשתות IPV4 IPV6"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "שרתי DNS ברשתות IPV4 IPV6"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr "קידומת שרתים (CIDR)"
+
+msgid "The AHCP Service is not running."
+msgstr ""
+
+msgid "The AHCP Service is running with ID %s."
+msgstr ""
+
+msgid "There are no active leases."
+msgstr "אין הקצאות פעילות."
+
+msgid "Unique ID file"
+msgstr "קובץ מזהה יחודי"

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

+ 114 - 0
package/luci/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"

+ 117 - 0
package/luci/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 <kentaro.matsuyama@gmail.com>\n"
+"Language-Team: none\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.0.4\n"
+
+msgid "AHCP Server"
+msgstr "AHCPサーバー"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCPはIPv6及びIPv6/IPv4デュアルスタックを使用するネットワークにおいて、ルー"
+"ターディスカバリの代わりとして使用するためにデザインされた自動設定プロトコル"
+"です。また、AHCPはモバイル・アドホックネットワークのような、リンク層のドメイ"
+"ンブロードキャスト毎に設定を行うことが困難なネットワークでのDHCP機能としても"
+"使用することができます。"
+
+msgid "Active AHCP Leases"
+msgstr "有効なAHCPリース"
+
+msgid "Address"
+msgstr "アドレス"
+
+msgid "Advanced Settings"
+msgstr "詳細設定"
+
+msgid "Age"
+msgstr "Age"
+
+msgid "Announced DNS servers"
+msgstr "通知するDNSサーバー"
+
+msgid "Announced NTP servers"
+msgstr "通知するNTPサーバー"
+
+msgid "Announced prefixes"
+msgstr "通知するプレフィクス"
+
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
+msgid "Forwarder"
+msgstr "転送"
+
+msgid "General Setup"
+msgstr "一般設定"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4及びIPv6"
+
+msgid "IPv4 only"
+msgstr "IPv4のみ"
+
+msgid "IPv6 only"
+msgstr "IPv6のみ"
+
+msgid "Lease directory"
+msgstr "リースファイル・ディレクトリ"
+
+msgid "Lease validity time"
+msgstr "リース有効時間"
+
+msgid "Log file"
+msgstr "ログファイル"
+
+msgid "Multicast address"
+msgstr "マルチキャストアドレス"
+
+msgid "Operation mode"
+msgstr "動作モード"
+
+msgid "Port"
+msgstr "ポート"
+
+msgid "Protocol family"
+msgstr "プロトコルファミリ"
+
+msgid "Served interfaces"
+msgstr "対象インターフェース"
+
+msgid "Server"
+msgstr "サーバー"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "通知するNTPサーバーのIPv4及びIPv6アドレスを設定します"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "通知するDNSサーバーのIPv4及びIPv6アドレスを設定します"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+"通知するIPv4及びIPv6アドレスのネットワーク・プレフィクスをCIDR形式で設定しま"
+"す"
+
+msgid "The AHCP Service is not running."
+msgstr "AHCP サービスは稼働していません。"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "AHCP サービスは稼働中です。(ID %s)"
+
+msgid "There are no active leases."
+msgstr "有効なリースはありません。"
+
+msgid "Unique ID file"
+msgstr "ユニークIDファイル"

+ 105 - 0
package/luci/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 ""

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

+ 115 - 0
package/luci/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 <przykryweczka@gmail.com>\n"
+"Language-Team: none\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+msgid "AHCP Server"
+msgstr "Serwer AHCP"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP to protokół automatycznej konfiguracji sieci IPv6 i IPv6/IPv4 "
+"przeznaczone do stosowania zamiast DHCP w sieciach, w których jest trudne "
+"lub wręcz niemożliwe, aby skonfigurować serwer w każdej warstwie łącza "
+"domeny rozgłoszeniowej, na przykład w mobilnych sieciach ad-hoc."
+
+msgid "Active AHCP Leases"
+msgstr "Aktywne dzierżawy AHCP"
+
+msgid "Address"
+msgstr "Adres"
+
+msgid "Advanced Settings"
+msgstr "Ustawienia zaawansowane"
+
+msgid "Age"
+msgstr "Wiek"
+
+msgid "Announced DNS servers"
+msgstr "Rozgłaszane serwery DNS"
+
+msgid "Announced NTP servers"
+msgstr "Rozgłaszane serwery NTP"
+
+msgid "Announced prefixes"
+msgstr "Rozgłaszane prefiksy"
+
+msgid "Collecting data..."
+msgstr "Zbieranie informacji..."
+
+msgid "Forwarder"
+msgstr "Przekierowanie"
+
+msgid "General Setup"
+msgstr "Ustawienia podstawowe"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 oraz IPv6"
+
+msgid "IPv4 only"
+msgstr "Tylko IPv4"
+
+msgid "IPv6 only"
+msgstr "Tylko IPv6"
+
+msgid "Lease directory"
+msgstr "Katalog dzierżaw"
+
+msgid "Lease validity time"
+msgstr "Czas dzierżawy"
+
+msgid "Log file"
+msgstr "Plik dziennika"
+
+msgid "Multicast address"
+msgstr "Adres Multicast"
+
+msgid "Operation mode"
+msgstr "Tryb pracy"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Rodzina protokołów"
+
+msgid "Served interfaces"
+msgstr "Udostępniane interfejsy"
+
+msgid "Server"
+msgstr "Serwer"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Określa rozgłaszane adresy IPv4/6 serwerów NTP"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Określa rozgłaszane adresy IPv4/6 serwerów nazw"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr "Określa rozgłaszane prefiksy sieciowe w notacji CIDR"
+
+msgid "The AHCP Service is not running."
+msgstr "Usługa AHCP nie jest uruchomiona."
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "Usługa AHCP jest uruchomiona z ID %s."
+
+msgid "There are no active leases."
+msgstr "Nie ma aktywnych dzierżaw."
+
+msgid "Unique ID file"
+msgstr "Unikalny plik ID"

+ 115 - 0
package/luci/applications/luci-app-ahcp/po/pt-br/ahcp.po

@@ -0,0 +1,115 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-03-29 23:07+0200\n"
+"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
+"Language-Team: none\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: 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 é 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"

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

+ 115 - 0
package/luci/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 <condor20_05@yahoo.it>\n"
+"Language-Team: none\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "Server AHCP"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP este un protocol de autoconfigurare pentru IPv6 si IPv4 menit sa "
+"inlocuie \"router discovery\" si DHCP in retele unde este dificil de "
+"configurat un server pentru fiecare domeniu de broadcast pe fiecare "
+"legatura, de exemplu pentru retele mobile ad-hoc."
+
+msgid "Active AHCP Leases"
+msgstr "Conexiuni active AHCP"
+
+msgid "Address"
+msgstr "Adresă"
+
+msgid "Advanced Settings"
+msgstr "Setări avansate"
+
+msgid "Age"
+msgstr "Vârstă"
+
+msgid "Announced DNS servers"
+msgstr "Servere DNS anuntate"
+
+msgid "Announced NTP servers"
+msgstr "Servere NTP anuntate"
+
+msgid "Announced prefixes"
+msgstr "Prefixe anuntate"
+
+msgid "Collecting data..."
+msgstr "Colectare date.."
+
+msgid "Forwarder"
+msgstr "Forwarder"
+
+msgid "General Setup"
+msgstr "Configurare generala"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 si IPv6"
+
+msgid "IPv4 only"
+msgstr "Doar IPv4 "
+
+msgid "IPv6 only"
+msgstr "Doar IPv6 "
+
+msgid "Lease directory"
+msgstr "Director de conexiuni"
+
+msgid "Lease validity time"
+msgstr "Timpul pentru conexiuni valide"
+
+msgid "Log file"
+msgstr "Fisier log"
+
+msgid "Multicast address"
+msgstr "Adresa multicast"
+
+msgid "Operation mode"
+msgstr "Modul de operare"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Familia de protocol"
+
+msgid "Served interfaces"
+msgstr "Interfetele servite"
+
+msgid "Server"
+msgstr "Server"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Specifica serverele de NTP IPv4 si IPv6 anuntate"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Specifica serverele de DNS IPv4 si IPv6 anuntate"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr "Specifica prefixele IPv4 si IPv6 anuntate in format CIDR"
+
+msgid "The AHCP Service is not running."
+msgstr "Serviciul AHCP nu ruleaza"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "Serviciul AHCP nu ruleaza cu ID %s."
+
+msgid "There are no active leases."
+msgstr "Nu exista conexiuni active."
+
+msgid "Unique ID file"
+msgstr "ID de fisier unic"

+ 120 - 0
package/luci/applications/luci-app-ahcp/po/ru/ahcp.po

@@ -0,0 +1,120 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: ahcp\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2013-09-05 15:29+0200\n"
+"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
+"Language-Team: Russian <x12ozmouse@ya.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.6\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+# Ad-Hoc Configuration Protocol - протокол автоматической конфигурации IPv6 и сетей IPv6/IPv4 двойного стека
+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 "Сбор данных..."
+
+#, fuzzy
+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 "Файл уникального идентификатора"

+ 106 - 0
package/luci/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 ""

+ 109 - 0
package/luci/applications/luci-app-ahcp/po/sv/ahcp.po

@@ -0,0 +1,109 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2014-04-27 22:52+0200\n"
+"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Language-Team: none\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "AHCP-server"
+
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+
+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"

+ 99 - 0
package/luci/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 ""

+ 113 - 0
package/luci/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 <qbilay@mynet.com>\n"
+"Language-Team: none\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "AHCP Sunucusu"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP bir IPv6 ve IPv4/IPv6 çift ağ için otomatik yapılandırma protokolüdür. "
+"Yönlendirici Bildirimleri ve DHCP sunucuları geçici olarak yerine dağıtılmış "
+"ağlar için tasarlanmıştır."
+
+msgid "Active AHCP Leases"
+msgstr "Aktif ACHP  Kiralamaları"
+
+msgid "Address"
+msgstr "Adres"
+
+msgid "Advanced Settings"
+msgstr "Gelişmiş Ayarlar"
+
+msgid "Age"
+msgstr "Yaş"
+
+msgid "Announced DNS servers"
+msgstr ""
+
+msgid "Announced NTP servers"
+msgstr ""
+
+msgid "Announced prefixes"
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "Veriler toplanıyor..."
+
+msgid "Forwarder"
+msgstr ""
+
+msgid "General Setup"
+msgstr "Genel Ayarlar"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 ve IPv6"
+
+msgid "IPv4 only"
+msgstr "Sadece IPv4"
+
+msgid "IPv6 only"
+msgstr "Sadece IPv6"
+
+msgid "Lease directory"
+msgstr "Kiralama Dizini"
+
+msgid "Lease validity time"
+msgstr "Kiralama Geçerlilik Süresi"
+
+msgid "Log file"
+msgstr "Kayıt Dosyası"
+
+msgid "Multicast address"
+msgstr ""
+
+msgid "Operation mode"
+msgstr "Çalışma Modu"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "Protocol family"
+msgstr "Protokol Ailesi"
+
+msgid "Served interfaces"
+msgstr "Sunucu Arayüzleri"
+
+msgid "Server"
+msgstr "Sunucu"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr ""
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr ""
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+
+msgid "The AHCP Service is not running."
+msgstr " AHCP Hizmeti Çalışmıyor"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr " AHCP Hizmeti ID %ile çalışıyor"
+
+msgid "There are no active leases."
+msgstr "Aktif Kiralama Yok"
+
+msgid "Unique ID file"
+msgstr "Benzersiz ID Dosyası"

+ 115 - 0
package/luci/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 <yuripet@gmail.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "Сервер AHCP"
+
+#, fuzzy
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+"AHCP є протоколом автоматичної конфігурації мереж IPv6 та IPv6/IPv4, що "
+"разраблений для використання замість DHCP. Наприклад, він використовується у "
+"стільникових ad-hoc мережах."
+
+msgid "Active AHCP Leases"
+msgstr "Активні оренди AHCP"
+
+msgid "Address"
+msgstr "Адреса"
+
+msgid "Advanced Settings"
+msgstr "Додаткові параметри"
+
+msgid "Age"
+msgstr "Вік"
+
+msgid "Announced DNS servers"
+msgstr "Оголошені DNS-сервери"
+
+msgid "Announced NTP servers"
+msgstr "Оголошені NTP-сервери"
+
+msgid "Announced prefixes"
+msgstr "Оголошені префікси"
+
+msgid "Collecting data..."
+msgstr "Збирання даних..."
+
+msgid "Forwarder"
+msgstr "Спрямовувач"
+
+msgid "General Setup"
+msgstr "Загальні параметри"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 та IPv6"
+
+msgid "IPv4 only"
+msgstr "Тільки IPv4"
+
+msgid "IPv6 only"
+msgstr "Тільки IPv6"
+
+msgid "Lease directory"
+msgstr "Каталог оренд"
+
+msgid "Lease validity time"
+msgstr "Термін дії оренди"
+
+msgid "Log file"
+msgstr "Файл журналу"
+
+msgid "Multicast address"
+msgstr "Групова адреса"
+
+msgid "Operation mode"
+msgstr "Режим роботи"
+
+msgid "Port"
+msgstr "Порт"
+
+msgid "Protocol family"
+msgstr "Протокол"
+
+msgid "Served interfaces"
+msgstr "Інтерфейси, які обслуговуються"
+
+msgid "Server"
+msgstr "Сервер"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 NTP-сервери"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 DNS-сервери"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr ""
+"Дозволяє вказати оголошувані IPv4 та IPv6 префікси мережі в нотації CIDR"
+
+msgid "The AHCP Service is not running."
+msgstr "Сервіс AHCP не запущено"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "Сервіс AHCP запущено з ID %s."
+
+msgid "There are no active leases."
+msgstr "Активних оренд немає."
+
+msgid "Unique ID file"
+msgstr "Файл унікальних ідентифікаторів"

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

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

+ 109 - 0
package/luci/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 <mickey60711@gmail.com>\n"
+"Language-Team: none\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.0.6\n"
+
+msgid "AHCP Server"
+msgstr "AHCP伺服器"
+
+msgid ""
+"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
+"networks designed to be used in place of router discovery or DHCP on "
+"networks where it is difficult or impossible to configure a server within "
+"every link-layer broadcast domain, for example mobile ad-hoc networks."
+msgstr ""
+
+msgid "Active AHCP Leases"
+msgstr ""
+
+msgid "Address"
+msgstr "位置"
+
+msgid "Advanced Settings"
+msgstr "進階設定"
+
+msgid "Age"
+msgstr ""
+
+msgid "Announced DNS servers"
+msgstr "匿名的DNS伺服器"
+
+msgid "Announced NTP servers"
+msgstr "匿名的NTP伺服器"
+
+msgid "Announced prefixes"
+msgstr "匿名的前綴"
+
+msgid "Collecting data..."
+msgstr "收集資料"
+
+msgid "Forwarder"
+msgstr ""
+
+msgid "General Setup"
+msgstr "一般設定"
+
+msgid "IPv4 and IPv6"
+msgstr "IPv4 和 IPv6"
+
+msgid "IPv4 only"
+msgstr "只有IPv4"
+
+msgid "IPv6 only"
+msgstr "只有IPv6"
+
+msgid "Lease directory"
+msgstr "租用目錄"
+
+msgid "Lease validity time"
+msgstr "租用有效時間"
+
+msgid "Log file"
+msgstr "記錄檔"
+
+msgid "Multicast address"
+msgstr "多點廣播位置"
+
+msgid "Operation mode"
+msgstr "操作模式"
+
+msgid "Port"
+msgstr "通訊埠"
+
+msgid "Protocol family"
+msgstr "協定群組"
+
+msgid "Served interfaces"
+msgstr "提供服務的界面"
+
+msgid "Server"
+msgstr "伺服器"
+
+msgid "Specifies the announced IPv4 and IPv6 NTP servers"
+msgstr "特別的匿名IPv4 與 IPv6 NTP 伺服器"
+
+msgid "Specifies the announced IPv4 and IPv6 name servers"
+msgstr "特別的匿名IPv4 與 IPv6 名稱伺服器"
+
+msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
+msgstr "特別的匿名IPv4 與 IPv6 網路CIDR前綴"
+
+msgid "The AHCP Service is not running."
+msgstr "AHCP服務沒有運作"
+
+msgid "The AHCP Service is running with ID %s."
+msgstr "AHCP服務運作中 ID為 %s"
+
+msgid "There are no active leases."
+msgstr "沒有使用中的租用"
+
+msgid "Unique ID file"
+msgstr "獨立的ID檔案"

+ 11 - 0
package/luci/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

+ 39 - 0
package/luci/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 <kuoruan@gmail.com>
+
+# LuCI specific settings
+LUCI_TITLE:=LuCI Support for Aria2
+LUCI_DEPENDS:=+aria2
+LUCI_PKGARCH:=all
+
+define Package/$(PKG_NAME)/config
+# shown in make menuconfig <Help>
+help
+		$(LUCI_TITLE)
+		.
+		Version: $(PKG_VERSION)-$(PKG_RELEASE)
+		$(PKG_MAINTAINER)
+endef
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
+

+ 42 - 0
package/luci/applications/luci-app-aria2/luasrc/controller/aria2.lua

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

+ 211 - 0
package/luci/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua

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

+ 77 - 0
package/luci/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm

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

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

+ 200 - 0
package/luci/applications/luci-app-aria2/po/zh-cn/aria2.po

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

+ 11 - 0
package/luci/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

+ 13 - 0
package/luci/applications/luci-app-asterisk/Makefile

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

+ 746 - 0
package/luci/applications/luci-app-asterisk/luasrc/asterisk.lua

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

+ 245 - 0
package/luci/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" }
+}

+ 194 - 0
package/luci/applications/luci-app-asterisk/luasrc/controller/asterisk.lua

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

+ 91 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua

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

+ 49 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua

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

+ 22 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua

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

+ 391 - 0
package/luci/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

+ 47 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua

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

+ 45 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua

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

+ 53 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua

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

+ 89 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua

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

+ 29 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua

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

+ 53 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua

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

+ 100 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua

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

+ 77 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua

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

+ 98 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua

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

+ 41 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua

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

+ 151 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua

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

+ 125 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua

@@ -0,0 +1,125 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 103 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua

@@ -0,0 +1,103 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 123 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua

@@ -0,0 +1,123 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 38 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua

@@ -0,0 +1,38 @@
+-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 17 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua

@@ -0,0 +1,17 @@
+-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 145 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua

@@ -0,0 +1,145 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 104 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua

@@ -0,0 +1,104 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 86 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua

@@ -0,0 +1,86 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 94 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua

@@ -0,0 +1,94 @@
+-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 48 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua

@@ -0,0 +1,48 @@
+-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 51 - 0
package/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua

@@ -0,0 +1,51 @@
+-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
+-- 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

+ 13 - 0
package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm

@@ -0,0 +1,13 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+cbi/valueheader%>
+<% if self.href then %><a href="<%=self.href%>"><% end -%>
+	<%=self:cfgvalue(section)%>
+<%- if self.href then %></a><%end%>
+&#160;
+<input type="hidden" id="<%=cbid%>" value="<%=luci.util.pcdata(self:cfgvalue(section))%>" />
+<%+cbi/valuefooter%>

+ 245 - 0
package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm

@@ -0,0 +1,245 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<%
+	local uci = luci.model.uci.cursor_state()
+	local ast = require "luci.asterisk"
+
+	function digit_pattern(s,t)
+		return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'%s>%s</code>"
+			%{ 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
+%>
+
+
+<form method="post" action="<%=url('admin/asterisk/dialplans')%>" enctype="multipart/form-data">
+	<div>
+		<script type="text/javascript" src="/luci-static/resources/cbi.js"></script>
+		<input type="hidden" name="cbi.submit" value="1" />
+		<input type="submit" value="Save" class="hidden" />
+	</div>
+
+<div class="cbi-map" id="cbi-asterisk">
+	<h2 name="content">Outgoing Call Routing</h2>
+	<div class="cbi-map-descr">
+		Here you can manage your dial plans which are used to route outgoing calls from your local extensions.<br /><br />
+		Related tasks:<br />
+		<a href="<%=url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> |
+		<a href="<%=url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> |
+		<a href="<%=url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a>
+	</div>
+	<!-- tblsection -->
+	<fieldset class="cbi-section" id="cbi-asterisk-sip">
+		<!--<legend>Dialplans</legend>-->
+		<div class="cbi-section-descr"></div>
+
+		<% for i, plan in pairs(ast.dialplan.plans()) do %>
+		<div class="cbi-section-node">
+			<table class="cbi-section-table">
+				<tr class="cbi-section-table-titles">
+					<th style="text-align: left; padding: 3px" class="cbi-section-table-cell">
+						<big>Dialplan <em><%=plan.name%></em></big>
+					</th>
+					<td>
+						<a href="<%=url('admin/asterisk/dialplans')%>?delplan=<%=plan.name%>">
+							<img style="border:none" alt="Remove this dialplan" title="Remove this dialplan" src="/luci-static/resources/cbi/remove.gif" />
+						</a>
+					</td>
+				</tr>
+
+				<!-- dialzones -->
+				<% local zones_used = { }; local row = 0 %>
+				<% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %>
+				<tr class="cbi-section-table-row <%=rowstyle(row)%>">
+					<td style="text-align: left; padding: 3px" class="cbi-section-table-cell">
+						<strong>&#x2514; Dialzone <em><%=zone.name%></em></strong> (<%=zone.description%>)
+						<p style="padding-left: 1em; margin-bottom:0">
+							Lines:
+							<%=ast.tools.hyperlinks(
+								zone.trunks, function(v)
+									return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
+								end
+							)%><br />
+							Matches:
+							<%=format_matches(zone)%>
+						</p>
+					</td>
+					<td style="width:5%" class="cbi-value-field">
+						<a href="<%=url('admin/asterisk/dialplans/out', zone.name)%>">
+							<img style="border:none" alt="Edit dialzone" title="Edit dialzone" src="/luci-static/resources/cbi/edit.gif" />
+						</a>
+						<a href="<%=url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>">
+							<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
+						</a>
+					</td>
+				</tr>
+				<% row = row + 1; end %>
+				<!-- /dialzones -->
+
+				<!-- voicemail -->
+				<% local boxes_used = { } %>
+				<% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %>
+				<tr class="cbi-section-table-row <%=rowstyle(row)%>">
+					<td style="text-align: left; padding: 3px" class="cbi-section-table-cell">
+						<strong>&#x2514; Voicemailbox <em><%=box.id%></em></strong> (<%=box.name%>)
+						<p style="padding-left: 1em; margin-bottom:0">
+							Owner: <%=box.name%> |
+							eMail: <%=#box.email > 0 and box.email or 'n/a'%> |
+							Pager: <%=#box.page  > 0 and box.page  or 'n/a'%><br />
+							Matches: <%=format_matches(ext)%>
+						</p>
+					</td>
+					<td style="width:5%" class="cbi-value-field">
+						<a href="<%=url('admin/asterisk/voicemail/mailboxes')%>">
+							<img style="border:none" alt="Manage mailboxes ..." title="Manage mailboxes ..." src="/luci-static/resources/cbi/edit.gif" />
+						</a>
+						<a href="<%=url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>">
+							<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
+						</a>
+					</td>
+				</tr>
+				<% row = row + 1; end %>
+				<!-- /voicemail -->
+
+				<!-- meetme -->
+				<% local rooms_used = { } %>
+				<% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %>
+				<tr class="cbi-section-table-row <%=rowstyle(row)%>">
+					<td style="text-align: left; padding: 3px" class="cbi-section-table-cell">
+						<strong>&#x2514; MeetMe Room <em><%=room.room%></em></strong>
+						<% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %>
+						<p style="padding-left: 1em; margin-bottom:0">
+							Matches: <%=format_matches(ext)%>
+						</p>
+					</td>
+					<td style="width:5%" class="cbi-value-field">
+						<a href="<%=url('admin/asterisk/meetme/rooms')%>">
+							<img style="border:none" alt="Manage conferences ..." title="Manage conferences ..." src="/luci-static/resources/cbi/edit.gif" />
+						</a>
+						<a href="<%=url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>">
+							<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
+						</a>
+					</td>
+				</tr>
+				<% row = row + 1; end %>
+				<!-- /meetme -->
+
+				<tr class="cbi-section-table-row">
+					<td style="text-align: left; padding: 3px" class="cbi-section-table-cell" colspan="2">
+						<hr style="margin-bottom:0.5em; border-width:0 0 1px 0" />
+
+						Add Dialzone:<br />
+						<select style="width:30%" name="addzone.<%=plan.name%>">
+							<option value="">-- please select --</option>
+							<% for _, zone in luci.util.kspairs(ast.dialzone.zones()) do %>
+								<% if not zones_used[zone.name] then %>
+									<option value="<%=zone.name%>"><%=zone.name%> (<%=zone.description%>)</option>
+								<% end %>
+							<% end %>
+						</select>
+						<br /><br />
+
+						Add Voicemailbox:<br />
+						<select style="width:20%" name="addvbox.<%=plan.name%>" onchange="this.form['addvboxext.<%=plan.name%>'].value=this.options[this.selectedIndex].value.split('@')[0]">
+							<option value="">-- please select --</option>
+							<% for ext, box in luci.util.kspairs(ast.voicemail.boxes()) do %>
+								<% if not boxes_used[box.id] then %>
+									<option value="<%=box.id%>"><%=box.id%> (<%=box.name%>)</option>
+								<% end %>
+							<% end %>
+						</select>
+						as extension
+						<input type="text" style="width:5%" name="addvboxext.<%=plan.name%>" />
+						<br /><br />
+
+						Add MeetMe Conference:<br />
+						<select style="width:20%" name="addmeetme.<%=plan.name%>" onchange="this.form['addmeetmeext.<%=plan.name%>'].value=this.options[this.selectedIndex].value">
+							<option value="">-- please select --</option>
+							<% for ext, room in luci.util.kspairs(ast.meetme.rooms()) do %>
+								<%# if not rooms_used[room.room] then %>
+									<option value="<%=room.room%>">
+										<%=room.room%>
+										<% if room.description and #room.description > 0 then %>(<%=room.description%>)<% end %>
+									</option>
+								<%# end %>
+							<% end %>
+						</select>
+						as extension
+						<input type="text" style="width:5%" name="addmeetmeext.<%=plan.name%>" />
+						<br /><br />
+
+						<input type="submit" class="cbi-button cbi-button-add" value="Add item &raquo;" title="Add item ..."/>
+					</td>
+				</tr>
+
+			</table>
+
+			<div class="cbi-section-create cbi-tblsection-create"></div>
+		</div>
+		<br />
+		<% end %>
+
+		<div class="cbi-section-node">
+			<div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
+				<h3>Create a new dialplan</h3>
+				The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
+
+				<%- if create_error then %>
+					<br /><span style="color:red">Invalid name given!</span><br />
+				<% end -%>
+
+				<br />
+				<input type="text" class="cbi-section-create-name" name="addplan" style="width:200px" />
+				<input type="submit" class="cbi-button cbi-button-add" value="Add dialplan" title="Add dialplan"/>
+			</div>
+		</div>
+
+	</fieldset>
+</div>
+</form>
+<div class="clear"></div>
+<%+footer%>

+ 165 - 0
package/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm

@@ -0,0 +1,165 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<%
+	local uci = luci.model.uci.cursor_state()
+	local ast = require("luci.asterisk")
+
+	function digit_pattern(s)
+		return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'>%s</code>" % 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
+
+%>
+
+
+<form method="post" action="<%=url('admin/asterisk/dialplans/zones')%>" enctype="multipart/form-data">
+	<div>
+		<script type="text/javascript" src="/luci-static/resources/cbi.js"></script>
+		<input type="hidden" name="cbi.submit" value="1" />
+		<input type="submit" value="Save" class="hidden" />
+	</div>
+
+<div class="cbi-map" id="cbi-asterisk">
+	<h2 name="content">Dial Zone Management</h2>
+	<div class="cbi-map-descr">
+		<a href="<%=url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br />
+		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.
+	</div>
+
+	<!-- tblsection -->
+	<fieldset class="cbi-section" id="cbi-asterisk-sip">
+		<div class="cbi-section-node">
+			<table class="cbi-section-table">
+				<tr class="cbi-section-table-titles">
+					<th style="text-align: left; padding: 3px" class="cbi-section-table-cell" colspan="6">
+						<h3>Dialzone Overview</h3>
+					</th>
+				</tr>
+
+				<tr class="cbi-section-table-descr">
+					<th style="width: 5%; text-align:right" class="cbi-section-table-cell">Name</th>
+					<th style="width: 5%; text-align:right" class="cbi-section-table-cell">Prepend</th>
+					<th style="width: 20%; text-align:left" class="cbi-section-table-cell">- Match</th>
+					<th style="text-align:left" class="cbi-section-table-cell">Trunk</th>
+					<th style="width: 35%; text-align:left" class="cbi-section-table-cell">Description</th>
+					<th style="width: 4%; text-align:left" class="cbi-section-table-cell"></th>
+				</tr>
+
+				<% for i, rule in pairs(ast.dialzone.zones()) do %>
+				<tr class="cbi-section-table-row <%=rowstyle(i)%>">
+					<td style="text-align:right" class="cbi-value-field">
+						<%=rule.name%>
+					</td>
+					<td style="text-align:right" class="cbi-value-field">
+						<% for _ in ipairs(rule.matches) do %>
+							<%=rule.addprefix and digit_pattern(rule.addprefix)%>&#160;<br />
+						<% end %>
+					</td>
+					<td style="text-align:left" class="cbi-value-field">
+						<% for _, m in ipairs(rule.matches) do %>
+							<%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%>
+							<%=digit_pattern(m)%><br />
+						<% end %>
+					</td>
+					<td style="text-align:left" class="cbi-value-field">
+						<%=ast.tools.hyperlinks(
+							rule.trunks, function(v)
+								return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
+							end
+						)%>
+					</td>
+					<td style="text-align:left" class="cbi-value-field">
+						<%=rule.description or rule.name%>
+					</td>
+					<td style="text-align:left" class="cbi-value-field">
+						<a href="<%=url('admin/asterisk/dialplans/out', rule.name)%>">
+							<img style="border:none" alt="Edit entry" title="Edit entry" src="/luci-static/resources/cbi/edit.gif" />
+						</a>
+						<a href="<%=url('admin/asterisk/dialplans/zones')%>?delzone=<%=rule.name%>">
+							<img style="border:none" alt="Delete entry" title="Delete entry" src="/luci-static/resources/cbi/remove.gif" />
+						</a>
+					</td>
+				</tr>
+				<% end %>
+			</table>
+			<div class="cbi-section-create cbi-tblsection-create"></div>
+		</div>
+		<br />
+
+		<div class="cbi-section-node">
+			<div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
+				<h3>Create a new dialzone</h3>
+				The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
+				You can specifiy multiple number matches by separating them with spaces.<br />
+
+				<%- if create_error then %>
+					<br /><span style="color:red">Invalid name given!</span><br />
+				<% end -%>
+
+				<table>
+					<tr>
+						<td style="padding:3px">
+							<label for="create1">1) Name</label><br />
+							<input type="text" class="cbi-section-create-name" id="create1" name="newzone_name" style="width:200px" />
+							<br /><br />
+
+							<label for="create2">2) Number Match</label><br />
+							<input type="text" class="cbi-section-create-name" id="create2" name="newzone_match" style="width:200px" />
+						</td>
+						<td style="padding:3px">
+							<label for="create3">3) Trunks</label><br />
+							<select class="cbi-input-select" multiple="multiple" id="create3" name="newzone_uses" size="4"  style="width:200px">
+								<% for i, t in ipairs(find_trunks()) do %>
+									<option value="<%=t[1]%>"><%=t[2]%></option>
+								<% end %>
+							</select>
+						</td>
+					</tr>
+				</table>
+				<br />
+
+				<input type="submit" class="cbi-button cbi-button-add" name="newzone" value="Add entry" title="Add entry"/>
+			</div>
+		</div>
+	</fieldset>
+</div>
+</form>
+<div class="clear"></div>
+<%+footer%>

+ 680 - 0
package/luci/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 <iopahopa@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 =&gt; .so ; Estableix el nom CallerID"
+
+#~ msgid "load => .so ; Set CallerID Number"
+#~ msgstr "load =&gt; .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 =&gt; .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 =&gt; .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"

+ 11 - 0
package/luci/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"

+ 131 - 0
package/luci/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 <roecker@empty-v.de>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

+ 71 - 0
package/luci/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 <acinonyx@openwrt.gr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 "Εφαρμογή"

+ 680 - 0
package/luci/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 <suspend@tiscali.cz>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 =&gt; .so ; Set CallerID Name"
+
+#~ msgid "load => .so ; Set CallerID Number"
+#~ msgstr "load =&gt; .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 =&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 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 =&gt; .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"

+ 355 - 0
package/luci/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 <jarre2_es_jose@hotmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

+ 569 - 0
package/luci/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 <fblistes+luci@free.fr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

+ 194 - 0
package/luci/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 <zstorch@gmail.com>\n"
+"Language-Team: none\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.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 "תבנית ההודעה"

+ 134 - 0
package/luci/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"

+ 162 - 0
package/luci/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 <claudyus84@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

+ 44 - 0
package/luci/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 <kentaro.matsuyama@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 "グローバル変数を消去"

+ 611 - 0
package/luci/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 <waichet@hotmail.com>\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"

+ 12 - 0
package/luci/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"

+ 75 - 0
package/luci/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ł <msjablonsky@gmail.com>\n"
+"Language-Team: none\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.4\n"
+
+#~ msgid "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"

+ 691 - 0
package/luci/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 <luizluca@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

+ 150 - 0
package/luci/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 <jm@unimos.net>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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"

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels