diff --git a/LICENSE b/LICENSE index f8a1bcc..0ad25db 100644 --- a/LICENSE +++ b/LICENSE @@ -1,235 +1,661 @@ -GNU AFFERO GENERAL PUBLIC LICENSE -Version 3, 19 November 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 -Copyright (C) 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. Preamble -The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. -Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. -A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. -The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. -An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. -The precise terms and conditions for copying, distribution and modification follow. + The precise terms and conditions for copying, distribution and +modification follow. TERMS AND CONDITIONS -0. Definitions. + 0. Definitions. -"This License" refers to version 3 of the GNU Affero General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. -"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. -"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. -To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. -A "covered work" means either the unmodified Program or a work based on the Program. + A "covered work" means either the unmodified Program or a work based +on the Program. -To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. -To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. -An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. -1. Source Code. -The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. + 1. Source Code. -A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. -The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. -The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those subprograms and other parts of the work. -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. - -2. Basic Permissions. -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -3. Protecting Users' Legal Rights From Anti-Circumvention Law. -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - -4. Conveying Verbatim Copies. -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - -5. Conveying Modified Source Versions. -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". - - c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - -6. Conveying Non-Source Forms. -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - - a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - - d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - -A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - -"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - -7. Additional Terms. -"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or authors of the material; or - - e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. - -All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - -8. Termination. - -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - -9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - -10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - -An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - -11. Patents. - -A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - -In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - -A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - -12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - -13. Remote Network Interaction; Use with the GNU General Public License. - -Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. - -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. - -14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - -15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. - sprpcb - Copyright (C) 2026 sysadmin + + Copyright (C) - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. -If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. -You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md index 355699b..5e8d57d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,212 @@ -# sprpcb +# arches-via-docker +SPRPCB es un desarrollo de [ArchesProject](https://www.archesproject.org/) empleando el modelo de implementación de [OpenContext](https://github.com/opencontext/arches-via-docker) -Sistema Plurinacional de Registro del Patrimonio Cultural Boliviano \ No newline at end of file + +# Implementación en servidor web público Arches versión 7.6.x + +El propósito principal de este repositorio es desplegar el sistema SPRPCB en el servidor del Plan Moxos. Por el momento solo está disponible la versión de producción del sistema SPRPCB migrado de la implementación de la nube de ENTEL. + +En un tiempo breve se habilitará una actualización para implementar una versión de desarrollo en la última versión de ArchesProject + ```bash + git checkout origin/pmoxos-local + ``` + +# Nginx y Let’s Encrypt con Docker Compose + +Este enfoque obtiene y renueva automáticamente los certificados TLS [Let's Encrypt](https://letsencrypt.org/) y configura HTTPS en Nginx para su dominio utilizando docker compose. + +La idea es simple. Hay 3 contenedores que trabajan así: + +* Nginx, generates self-signed "dummy" certificates to pass ACME challenge for obtaining Let's Encrypt certificates +* Certbot - for obtaining and renewing certificates, waits for Nginx to become ready and obtains certificates +* Cron - for triggering certificates renewal once a day, triggers Certbot to try to renew certificates and Nginx to reload configuration on a daily basis +* The Nginx container uses updates symbolic links that point to either "dummy" certificates or Let's Encrypt certificates. + +# The directories and files +The following lists some information about the contents of this repo and how they fit together: + +* `docker-compose.yml` +* `.env` - specifies `COMPOSE_PROJECT_NAME` to make container names independent from the base directory name. specifies project configuration, e.g. domain names, emails, database connection details, etc. This file contains sensitive information. +* `arches/` + * `Dockerfile` + * `arches_data` - A directory on your host machine that gets attached to the Arches container. This makes it convenient to pass data (like packages or exports) in and out of your Arches container. + * `conf.d/` - A directory of Supervisord configurations for the celery worker and celery beat processes. This gets copied into the Arches container. + * `celery.py` - Editable file if you want to modify your Arches project use of celery + * `arches_proj-supervisor.conf` - Supervisord configurations for the celery worker and celery beat processes + * `entrypoint.sh` - entrypoint script. This has some handy utility functions for some routine administration of the Arches container. + * `settings_local.py` - Editable python file to define project specific settings for your Arches instance. Many of the environment variables that you assign in your `.env` file + * `settings_local.py` - Editable python file configuring URLs in your Arches instance +* `certbot/` + * `Dockerfile` + * `certbot.sh` - entrypoint script +* `cron/` + * `Dockerfile` + * `renew_certs.sh` - script executed on a daily basis to try to renew certificates +* `html/` - directory mounted as `root` for Nginx + * `index.html` +* `nginx/` + * `Dockerfile` + * `nginx.sh` - entrypoint script. This script will update where symbolic links will resolve (either to the dummy self-assigned certificates or to the Let's Encrypt obtained certificates) + * `hsts.conf` - HTTP Strict Transport Security (HSTS) policy + * `options-ssl-nginx.conf` - SSL related configurations + * `default.conf` - Nginx configuration for your domain. Contains a configuration to get A+ rating at [SSL Server Test](https://www.ssllabs.com/ssltest/). This configuration also asks Nginx to gzip compress certain text-based static files (especially CSS and Javascript) which should help with performance. This config uses symbolic links to specify the path to SSL certificates. + * `default.conf` - Nginx server configuration. It loads the Perl language module to simplify passing environment variables to your Nginx domain configuration. +* `webpack/` + * `Dockerfile` + * `webpack_entrypoint.sh` - The `webpack` container is a minimalist container that invokes a docker command on the `arches` container. This command prepares static assets for the Arches frontend by running webpack and collectstatic. + +To adapt the example to your domain names you need to change only `.env`: + +```properties +DOMAINS=teach-with-arches.org +CERTBOT_EMAILS=info@teach-with-arches.org info@teach2.with.arches.org +CERTBOT_TEST_CERT=0 +CERTBOT_RSA_KEY_SIZE=4096 +``` + +Configuration parameters: + +* `DOMAINS` - a space separated list of domains to manage certificates for +* `CERTBOT_EMAILS` - a space separated list of email for corresponding domains. If not specified, certificates will be obtained with `--register-unsafely-without-email` +* `CERTBOT_TEST_CERT` - use Let's Encrypt staging server (`--test-cert`) + +Let's Encrypt has rate limits. So, while testing it's better to use staging server by setting `CERTBOT_TEST_CERT=1` (default value). +When you are ready to use production Let's Encrypt server, set `CERTBOT_TEST_CERT=0`. + +## Prerequisites + +1. [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/) are installed. +2. You have a domain name +3. You have a server with a publicly routable IP address +4. You have cloned this repository + ```bash + git clone https://github.com/opencontext/arches-via-docker.git + ``` + +### Note: +This approach will setup the most current stable version of Arches (now v7.6.x). If you want to deploy Arches version 6 (specifically stable version 6.2), please switch to the `v6` branch of this repo, with: + ```bash + git checkout origin/v6 + ``` + + +## Step 0 - Point your domain to server with DNS A records + +For all domain names configure DNS A records to point to a server where Docker containers will be running. + +## Step 1 - Edit domain names, emails and other variables in the configuration + +Specify you domain names and contact emails for these domains in the `edit_dot_env` file and then save this file as `.env`: + +First make an `.env` file +```bash +cp edit_dot_env .env +``` + +Now edit `.env` file to change your settings. +```bash +nano .env +``` + +Here are properties to change based on your specific Web domain. Please note, for now this only supports one domain specified by the `DOMAINS` variable (the plural is asperational..). + +```properties +DOMAINS=teach-with-arches.org +CERTBOT_EMAILS=info@teach-with-arches.org +``` + +### Note: Non-Standard Port (8004, not 8000) +Below are properties to edit to change how Arches deploy. If you want to deploy this on your own machine (localhost), setting `DJANGO_DEBUG=True` is useful to see and diagnose useful error messages in the Arches Django application, but be sure to set `DJANGO_DEBUG=False` for deployments on the public Web. *NOTE* if you run this on your localhost, this Docker build will currently make your Arches application available to your browser via [http://127.0.0.1:8004/](http://127.0.0.1:8004/) *on port 8004*, not the usual 8000. This nonstandard port was chosen in case your local host has other applications already running on port 8000. + + +```properties +DJANGO_MODE=DEV +DJANGO_DEBUG=False +... +BUILD_PRODUCTION=False +``` + + + +## Step 2 - Create named Docker volumes for dummy and Let's Encrypt TLS certificates + +```bash +docker volume create --name=logs_nginx +docker volume create --name=nginx_ssl +docker volume create --name=certbot_certs +docker volume create --name=arches_certbot +``` + +## Step 3 - Use Valid Let's Encrypt Certificates +Configure to use production Let's Encrypt server in `.env`: + +```properties +CERTBOT_TEST_CERT=0 +``` + +## Step 4 - Build images and start containers + +```bash +docker compose up --build +``` + +## Config Changes? - Replace volumes etc to implement changes + +Stop the containers: + +```bash +docker compose down +``` + +Re-create the volume for Let's Encrypt certificates: + +```bash +docker volume rm certbot_certs +docker volume rm arches_certbot +docker volume create --name=certbot_certs +docker volume create --name=arches_certbot +``` + +Start the containers: + +```bash +docker compose up +``` + +## How to Make Arches (administrative) Management Commands +Besides setting up HTTPS and Nginx, this repo deploys an instance of Arches. Currently this will setup an "empty" Arches instance. You'll need to load it with your own data by loading a package or some other approach. Once you deploy Arches, you can use normal Arches management commands as so: + +```bash +docker exec -it arches python3 manage.py [Arches management commands and arguments here] +``` + + + +## NOTE +You may run into weirdness permissions issues restarting the docker container. I solved it with: +``` +sudo chmod 666 /var/run/docker.sock + +``` + + +# BACKGROUND AND CREDIT +This repo will hopefully streamline deployment of Arches for use on the Web. Eventually, we hope to use this as the basis for deploying instances of Arches for use in archaeological teaching and learning applications. + +None of this code is very original. This repo started by forking: +https://github.com/evgeniy-khist/letsencrypt-docker-compose + +Some elements of this repo are also derived from: +https://github.com/opencontext/oc-docker + +and + +https://github.com/archesproject/arches-for-science-prj + +and + +https://github.com/archesproject/arches-dependency-containers + +and finally + +https://github.com/archesproject/arches-her diff --git a/arches/Dockerfile b/arches/Dockerfile new file mode 100644 index 0000000..930caac --- /dev/null +++ b/arches/Dockerfile @@ -0,0 +1,249 @@ +FROM ubuntu:22.04 +# Start with Ubuntu 22 + +USER root + +# Set environment variables to make installations non-interactive +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ="America/La_Paz" + +# Update package lists and install basic packages first +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + wget \ + gnupg \ + lsb-release \ + software-properties-common \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Add Python 3.12 repository and install Python packages +RUN add-apt-repository ppa:deadsnakes/ppa \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + python3.12 \ + python3.12-dev \ + python3.12-venv \ + python3-pip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install system dependencies +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + make \ + gcc \ + build-essential \ + mime-support \ + libgdal-dev \ + dos2unix \ + nano \ + git \ + postgresql-client-14 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# Set up a virual environment to use for all later commands. +RUN python3.12 -m venv /opt/venv \ + && . /opt/venv/bin/activate \ + && pip install --upgrade pip +# Make sure we use the virtualenv: +ENV PATH="/opt/venv/bin:$PATH" + +## Setting default environment variables +ARG ARCHES_ROOT +# The name of the arches project +ARG ARCHES_PROJECT +# Project specific paths +ARG APP_ROOT +ARG APP_COMP_FOLDER +ARG UPLOADED_FILES_FOLDER +ARG ARCHES_PIP_VERSION + +# settings_local.py provides the DB credentials, etc. to the Arches project. +ENV SETTINGS_PATH=${APP_COMP_FOLDER}/settings.py +ENV SETTINGS_LOCAL_PATH=${APP_COMP_FOLDER}/settings_local.py +ENV CELERY_PATH=${APP_COMP_FOLDER}/celery.py +ENV URLS_PATH=${APP_COMP_FOLDER}/urls.py +ENV GUNICORN_CONFIG_PATH=${APP_COMP_FOLDER}/gunicorn_config.py +ENV ARCHES_DATA=${ARCHES_ROOT}/arches_data +ENV PACKAGE_PATH=${APP_COMP_FOLDER}/package.json +ENV ESLINT_CONFIG_MJS_PATH_USE=${APP_ROOT}/eslint.config.mjs +ENV UPLOADED_FILES_FOLDER=${UPLOADED_FILES_FOLDER} +ENV WHEELS=/wheels +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE 1 + +# Setup needed directories +RUN mkdir ${ARCHES_ROOT} && mkdir /var/log/supervisor && mkdir /var/log/celery + +# Get ready to do some code installation +RUN apt-get update && apt-get install -y make software-properties-common + +# Install packages required to run Arches +# Note that the ubuntu/debian package for libgdal1-dev pulls in libgdal1i, which is built +# with everything enabled, and so, it has a huge amount of dependancies (everything that GDAL +# support, directly and indirectly pulling in mysql-common, odbc, jp2, perl! ... ) +# a minimised build of GDAL could remove several hundred MB from the container layer. +RUN set -ex \ + && RUN_DEPS=" \ + build-essential \ + libxml2-dev \ + libproj-dev \ + libjson-c-dev \ + xsltproc \ + docbook-xsl \ + docbook-mathml \ + libgdal-dev \ + libpq-dev \ + mime-support \ + python3-dev \ + postgresql-client-14 \ + dos2unix \ + wait-for-it \ + vim \ + " \ + && curl -sL https://deb.nodesource.com/setup_16.x | bash - \ + && curl -sL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/postgresql.list \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends $RUN_DEPS \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + + + +# ---------------------------------------------- +# Do installs relating to Node +# ---------------------------------------------- + +# Set environment variables +ENV NODE_MAJOR=18 + +# Update package lists and install necessary packages +RUN apt-get update \ + && apt-get install -y \ + ca-certificates \ + curl \ + gnupg \ + && mkdir -p /etc/apt/keyrings + +# Add nodesource GPG key +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + +# Add nodesource repository +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && apt-get update + +# Install Node.js +RUN apt-get install -y nodejs + +# Clean up +RUN apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + + + + +WORKDIR ${ARCHES_ROOT} + +RUN rm -rf /root/.cache/pip/* + +RUN pip install --upgrade pip +RUN pip install --force-reinstall -U setuptools + +# Install the current stable release of the Arches application and make an Arches project. +RUN pip install supervisor \ + && pip install pytz --upgrade \ + && pip install tzdata --upgrade \ + && pip install Redis \ + && pip install gunicorn \ + && pip install boto3==1.26 \ + && pip install django-storages==1.14.4 \ + && pip install arches==${ARCHES_PIP_VERSION} + +# create a new Arches project +RUN mkdir -p /new_arches_proj +RUN arches-admin startproject ${ARCHES_PROJECT} --directory /new_arches_proj +RUN mv /new_arches_proj ${APP_ROOT} + +# create the uploaded files folder +RUN mkdir -p ${UPLOADED_FILES_FOLDER} + +# copia de archivos de idioma es +COPY ./arches/es /opt/venv/lib/python3.12/site-packages/arches/locale/es +RUN echo 'archivos de idioma es copiados' + +# copy in local settings to our newly created Arches project. +WORKDIR ${APP_ROOT} +COPY ./arches/settings_local.py ${SETTINGS_LOCAL_PATH} +RUN sed -i 's/\r$//g' ${SETTINGS_LOCAL_PATH} +# copy the celery.py file into out archaes project. This hopefully makes the workers and beat work: +COPY ./arches/celery.py ${CELERY_PATH} +RUN sed -i 's/\r$//g' ${CELERY_PATH} +# copy the urls.py into our new Arches project. This is part of +# customization for internationalization +RUN echo "copied urls to ${URLS_PATH}"; +COPY ./arches/urls.py ${URLS_PATH} +RUN sed -i 's/\r$//g' ${URLS_PATH} + +# Copy the gunicorn_config.py file into our new Arches project. This is used +# for running Arches in production (not DEBUG mode) +# NOTE: We're NOT actually using this, because it will throw an error with urls.py +# So this is here for reference only in case someone wants to edit gunicorn_config.py +# and figure out how to make it work. +RUN echo "copy gunicorn_config.py to ${GUNICORN_CONFIG_PATH}"; +COPY ./arches/gunicorn_config.py ${GUNICORN_CONFIG_PATH} +RUN sed -i 's/\r$//g' ${GUNICORN_CONFIG_PATH} + +# Copy customized package until the issue with datatables.net is resolved. +# COPY ./arches/package.json ${PACKAGE_PATH} + +# copy the celery supervisor +COPY /arches/conf.d/ ${APP_ROOT}/conf.d/ +RUN chmod -R 700 ${APP_ROOT}/conf.d/ +COPY /arches/arches_proj-supervisor.conf ${APP_ROOT}/arches_proj-supervisor.conf +RUN chmod -R 700 ${APP_ROOT}/arches_proj-supervisor.conf +RUN mkdir -p /var/log/supervisor +RUN mkdir -p /var/log/celery + +# Now install NPM +WORKDIR ${APP_ROOT} +# RUN echo "NPM install...."; +# RUN npm install + +# Set some settings to make NPM less fussy +RUN npm config set cafile null +RUN npm config set strict-ssl false + +# remove any node_modules that might have been installed by the arches install +RUN rm -rf ${APP_ROOT}/node_modules +RUN rm -f ${APP_ROOT}/package-lock.json +# Now do the NPM install +RUN npm install + +# Make sure the entry point is available and lacks weird characters +# that don't work in a Linux OS +COPY /arches/entrypoint.sh ${APP_ROOT}/entrypoint.sh +RUN chmod -R 700 ${APP_ROOT}/entrypoint.sh &&\ + dos2unix ${APP_ROOT}/entrypoint.sh + + +# Set default workdir +WORKDIR ${APP_ROOT} +ENTRYPOINT ["./entrypoint.sh"] +CMD ["run_arches"] + + +# Set default workdir +WORKDIR ${APP_ROOT} +# Expose port 8000 (Django server) +EXPOSE 8000 +# Expose Webpack port +EXPOSE 8021 +# Expose CouchDB port +EXPOSE 5984 diff --git a/arches/arches_data/README.md b/arches/arches_data/README.md new file mode 100644 index 0000000..559d55f --- /dev/null +++ b/arches/arches_data/README.md @@ -0,0 +1,4 @@ +# arches_data + +This folder will be mounted into the `arches` container so that it will be easier to load packages and exchange other files with the running Arches instance. +The `arches` container will expect to find a `packages` sub-directory inside the `arches_data` folder. \ No newline at end of file diff --git a/arches/arches_proj-supervisor.conf b/arches/arches_proj-supervisor.conf new file mode 100644 index 0000000..b38ed78 --- /dev/null +++ b/arches/arches_proj-supervisor.conf @@ -0,0 +1,29 @@ +[unix_http_server] + file=/tmp/supervisor.sock ; path to your socket file + chmod=7770 + +[supervisord] + logfile=/var/log/supervisor/supervisord.log ; supervisord log file + logfile_maxbytes=50MB ; maximum size of logfile before rotation + logfile_backups=10 ; number of backed up logfiles + loglevel=info ; info, debug, warn, trace + pidfile=/var/run/supervisord.pid ; pidfile location + nodaemon=false ; run supervisord as a daemon + minfds=1024 ; number of startup file descriptors + minprocs=200 ; number of process descriptors + user=root ; defaults to whichever user is runs supervisor + childlogdir=/var/log/supervisor/ ; where child log files will live + +[rpcinterface:supervisor] + supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] + serverurl=unix:///tmp/supervisor.sock ; use unix:// schem for a unix sockets. + +[include] + files=./conf.d/arches_proj-celeryd.conf + # While the above appears to work, and is needed for features like the Bulk + # Data manager, I can't seem to get celerybeat to work as below: + # + # files=./conf.d/arches_proj-celeryd.conf ./conf.d/arches_proj-celerybeat.conf + diff --git a/arches/celery.py b/arches/celery.py new file mode 100644 index 0000000..2da3bd8 --- /dev/null +++ b/arches/celery.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import, unicode_literals +import os +from celery import Celery + +ARCHES_PROJECT = os.getenv('ARCHES_PROJECT') + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', f'{ARCHES_PROJECT}.settings') +app = Celery(ARCHES_PROJECT) +app.config_from_object('django.conf:settings', namespace='CELERY') +app.autodiscover_tasks() \ No newline at end of file diff --git a/arches/conf.d/arches_proj-celerybeat.conf b/arches/conf.d/arches_proj-celerybeat.conf new file mode 100644 index 0000000..4ab3f04 --- /dev/null +++ b/arches/conf.d/arches_proj-celerybeat.conf @@ -0,0 +1,22 @@ +; ================================ +; celery beat supervisor +; ================================ + +[program:celerybeat] + command=python -m celery -A arches_proj.celery beat --schedule=/tmp/celerybeat-schedule --loglevel=INFO --pidfile=/tmp/celerybeat.pid + directory=/arches_app/arches_proj + + user=root + numprocs=1 + stdout_logfile=/var/log/celery/beat.log + stderr_logfile=/var/log/celery/beat.log + autostart=true + autorestart=true + startsecs=10 + + ; Causes supervisor to send the termination signal (SIGTERM) to the whole process group. + stopasgroup=true + + ; if rabbitmq is supervised, set its priority higher + ; so it starts first + priority=999 \ No newline at end of file diff --git a/arches/conf.d/arches_proj-celeryd.conf b/arches/conf.d/arches_proj-celeryd.conf new file mode 100644 index 0000000..5313c12 --- /dev/null +++ b/arches/conf.d/arches_proj-celeryd.conf @@ -0,0 +1,26 @@ +; ================================== +; celery worker supervisor +; ================================== + +[program:celery] + command=python -m celery -A arches_proj worker -l INFO + directory=/arches_app/arches_proj + + user=root + numprocs=1 + stdout_logfile=/var/log/celery/worker.log + stderr_logfile=/var/log/celery/worker.log + autostart=true + autorestart=true + startsecs=10 + + ; Need to wait for currently executing tasks to finish at shutdown. + ; Increase this if you have very long running tasks. + stopwaitsecs = 600 + + ; Causes supervisor to send the termination signal (SIGTERM) to the whole process group. + stopasgroup=true + + ; Set Celery priority higher than default (999) + ; so, if rabbitmq is supervised, it will start first. + priority=1000 diff --git a/arches/entrypoint.sh b/arches/entrypoint.sh new file mode 100644 index 0000000..66e72cf --- /dev/null +++ b/arches/entrypoint.sh @@ -0,0 +1,435 @@ +#!/bin/bash + +# APP and YARN folder locations +APP_FOLDER=${APP_ROOT} +APP_COMP_FOLDER=${APP_COMP_FOLDER} +GUNICORN_CONFIG_PATH=${APP_COMP_FOLDER}/gunicorn_config.py +STATIC_ROOT=/static_root +STATIC_JS=${STATIC_ROOT}/js +WEBPACK_STATS_PATH=${APP_FOLDER}/webpack-stats.json + +# Environmental Variables +export DJANGO_PORT=${DJANGO_PORT:-8000} +COUCHDB_URL=${COUCHDB_URL} + +#Utility functions that check db status +wait_for_db() { + echo "Testing if database server is up..." + while [[ ! ${return_code} == 0 ]] + do + psql --host=${PGHOST} --port=${PGPORT} --user=${PGUSERNAME} --dbname=postgres -c "select 1" >&/dev/null + return_code=$? + sleep 1 + done + echo "Database server is up" + + echo "Testing if Elasticsearch is up..." + while [[ ! ${return_code} == 0 ]] + do + curl -s "http://${ESHOST}:${ESPORT}/_cluster/health?wait_for_status=green&timeout=60s" >&/dev/null + return_code=$? + sleep 1 + done + echo "Elasticsearch is up" +} + +db_exists() { + echo "Checking if database "${PGDBNAME}" exists..." + count=`psql --host=${PGHOST} --port=${PGPORT} --user=${PGUSERNAME} --dbname=postgres -Atc "SELECT COUNT(*) FROM pg_catalog.pg_database WHERE datname='${PGDBNAME}'"` + + # Check if returned value is a number and not some error message + re='^[0-9]+$' + if ! [[ ${count} =~ $re ]] ; then + echo "Error: Something went wrong when checking if database "${PGDBNAME}" exists..." >&2; + echo "Exiting..." + exit 1 + fi + + # Return 0 (= true) if database exists + if [[ ${count} > 0 ]]; then + return 0 + else + return 1 + fi +} + +#### Install +init_arches() { + echo "Checking if Arches project "${ARCHES_PROJECT}" exists..." + if [[ ! -d ${APP_FOLDER} ]] || [[ ! "$(ls ${APP_FOLDER})" ]]; then + echo "" + echo "----- Custom Arches project '${ARCHES_PROJECT}' does not exist. -----" + echo "----- Creating '${ARCHES_PROJECT}'... -----" + echo "" + + cd ${APP_FOLDER} + echo "Sleep for a 45 seconds because elastic search seems to need the wait (a total hack)..." + sleep 45s; + arches-project create ${ARCHES_PROJECT} + run_setup_db + setup_couchdb + + exit_code=$? + if [[ ${exit_code} != 0 ]]; then + echo "Something went wrong when creating your Arches project: ${ARCHES_PROJECT}." + echo "Exiting..." + exit ${exit_code} + fi + else + echo "Custom Arches project '${ARCHES_PROJECT}' exists." + wait_for_db + if db_exists; then + echo "Database ${PGDBNAME} already exists." + echo "Skipping Package Loading" + else + echo "Database ${PGDBNAME} does not exists yet." + run_setup_db + run_elastic_safe_migrations + setup_couchdb + fi + fi +} + +# Setup Couchdb +setup_couchdb() { + echo "--- SKIP Creating couchdb system databases (not in V7, no Collector) ---" + # echo "Sleep for a 10 seconds because elastic search seems to need the wait (a total hack)..." + # sleep 10s; + # curl -X PUT ${COUCHDB_URL}/_users + # curl -X PUT ${COUCHDB_URL}/_global_changes + # curl -X PUT ${COUCHDB_URL}/_replicator +} + + +#### Misc +check_settings_local() { + # Make sure we have a settings_local in the proper location of the project + cd ${APP_COMP_FOLDER} + echo "The directory ${APP_COMP_FOLDER} contains:" + ls -l + echo "---------------------------------------------------------------" +} + +#### Run commands +start_celery_supervisor() { + echo "" + echo "----- START CELERY SUPERVISOR -----" + echo "" + echo "Sleep 60s in the hope that arches_redis will be fully up and running..." + sleep 60s; + if [ -f "/tmp/supervisor.sock" ]; then + echo "The celery supervisor seems started, so why try to start it again? " + else + echo "The celery supervisor has yet to start, so we'll start it.." + cd ${APP_FOLDER} + wait-for-it arches_redis:6379 -t 120 && supervisord -c arches_proj-supervisor.conf + fi +} + +run_createcachetable() { + echo "" + echo "----- RUNNING CREATE CACHETABLE -----" + echo "" + cd ${APP_FOLDER} + python3 manage.py createcachetable +} + +run_elastic_safe_migrations() { + echo "" + echo "----- RUNNING DATABASE MIGRATIONS WITH ELASTIC CHECK -----" + echo "" + echo "Testing if Elasticsearch is up..." + while [[ ! ${return_code} == 0 ]] + do + curl -s "http://${ESHOST}:${ESPORT}/_cluster/health?wait_for_status=green&timeout=60s" >&/dev/null + return_code=$? + sleep 1 + done + echo "Elasticsearch is up" + cd ${APP_FOLDER} + echo "Sleep for a 20 seconds because elastic search seems to need the wait (a total hack)..." + echo "We're running migrations in case the initial db setup failed because elasticsearch was still not quite ready" + sleep 20s; + echo "Now do Migrations..." + python3 manage.py migrate +} + +run_make_migrations() { + echo "" + echo "----- RUNNING DATABASE MAKE MIGRATIONS -----" + echo "" + cd ${APP_FOLDER} + python manage.py makemigrations +} + +run_migrations() { + echo "" + echo "----- RUNNING DATABASE MIGRATIONS -----" + echo "" + cd ${APP_FOLDER} + python manage.py migrate +} + +run_es_reindex() { + echo "" + echo "----- RUNNING ELASTIC SEARCH (ES) REINDEX DATABASE -----" + echo "" + cd ${APP_FOLDER} + python3 manage.py es reindex_database +} + + +run_collect_static() { + echo "" + echo "----- RUNNING COLLECT STATIC -----" + echo "" + if [[ ${BUILD_PRODUCTION} == 'True' ]]; then + echo "Skipping collectstatic, hopefully buildproduction will do the trick..." + else + cd ${APP_FOLDER} + python3 manage.py collectstatic --noinput + fi + echo "---------------------------------------------------------------" +} + +run_collect_static_nocheck() { + echo "" + echo "----- RUNNING COLLECT STATIC -----" + echo "" + cd ${APP_FOLDER} + python3 manage.py collectstatic --noinput + echo "---------------------------------------------------------------" +} + +run_build_production() { + echo "" + echo "----- RUNNING BUILD PRODUCTION -----" + echo "" + if [[ ${BUILD_PRODUCTION} == 'True' ]]; then + # NOTE: Only do this if you have more than 8GB of system RAM. This will likely error out + # otherwise. + cd ${APP_FOLDER} + exec sh -c "npm run build_development" + else + echo "Skipping buildproduction because BUILD_PRODUCTION is not 'True' " + fi + echo "---------------------------------------------------------------" +} + + +run_setup_arches_setup_webpack() { + if [[ ! -d ${STATIC_JS} ]] || [[ ! "$(ls ${STATIC_JS})" ]]; then + cd ${APP_FOLDER} + echo "Starting Django development server" + python manage.py runserver 0.0.0.0:8000 & + echo "Running npm build and collectstatic" + npm run build_development && python manage.py collectstatic --noinput + else + echo "Webpack and Collectstatic for setup already completed."; + fi + + RUNSERVER_PID=$(pgrep -f "manage.py runserver") + if [ -n "$RUNSERVER_PID" ]; then + echo "Killing manage.py runserver process with PID $RUNSERVER_PID" + kill -9 $RUNSERVER_PID + echo "Process $RUNSERVER_PID killed" + else + echo "No manage.py runserver process found" + fi + +} + + +run_webpack() { + echo "" + echo "----- *** RUNNING WEBPACK SERVER *** -----" + echo "" + if [[ ${BUILD_PRODUCTION} == 'True' ]]; then + # NOTE: Only do this if you have more than 8GB of system RAM. This will likely error out + # otherwise. + echo "Running Webpack, hopefully the build_production thing will work!" + cd ${APP_FOLDER} + exec sh -c "npm run build_production" + else + cd ${APP_FOLDER} + echo "Do build_development." + echo "Running Webpack to do the NPM build_development thing." + exec sh -c "npm run build_development && python manage.py collectstatic --noinput" + fi +} + + +run_setup_webpack() { + # NOTE: We're deprecating this in favor of run_setup_arches_setup_webpack. + echo "" + echo "----- *** RUNNING WEBPACK SERVER FOR SETUP *** -----" + echo "" + echo "Check if the Arches app responds to http requests..." + while [[ ! ${return_code} == 0 ]] + do + curl -s "http://arches:8000" >&/dev/null + return_code=$? + sleep 5 + done + echo "Arches app is now responding to http requests!" + sleep 5 + # We're going to first check to see if we have anythin in the static_root/js folder. + # If we do, then we've run this already and can skip webpack and collect static. + if [[ ! -d ${STATIC_JS} ]] || [[ ! "$(ls ${STATIC_JS})" ]]; then + echo "We (apparently) have yet to run webpack and collectstatic. Do it now!"; + run_webpack + + else + echo "Webpack and Collectstatic for setup already completed."; + # exec sh -c "python manage.py collectstatic --noinput" + fi +} + +run_list_static() { + echo "" + echo "----- VIEW COLLECTED STATIC -----" + echo "" + cd /static_root + ls + echo "---------------------------------------------------------------" +} + +run_setup_db() { + echo "" + echo "----- RUNNING SETUP_DB -----" + echo "" + echo "Testing if Elasticsearch is up..." + while [[ ! ${return_code} == 0 ]] + do + curl -s "http://${ESHOST}:${ESPORT}/_cluster/health?wait_for_status=green&timeout=60s" >&/dev/null + return_code=$? + sleep 1 + done + echo "Elasticsearch is up, pause for 10 secs to be sure." + sleep 10s; + echo "Now we should be safe to setup the database" + cd ${APP_FOLDER} + python3 manage.py setup_db --force +} + +run_load_package() { + echo "" + echo "----- *** LOADING PACKAGE: ${ARCHES_PROJECT} *** -----" + echo "" + cd ${APP_FOLDER} + python3 manage.py packages -o load_package -s ${ARCHES_PROJECT}/pkg -db -dev -y +} + +run_django_server() { + echo "" + echo "----- *** RUNNING DJANGO DEVELOPMENT SERVER *** -----" + echo "" + cd ${APP_FOLDER} + if [[ ${DJANGO_DEBUG} == 'True' ]]; then + echo "Running DEBUG mode Django" + exec sh -c "python3 manage.py runserver 0.0.0.0:${DJANGO_PORT}" + else + echo "Should run the production mode Arches Django via gunicorn via:" + # The GUNICORN_CONFIG_PATH breaks this, (errors in urls.py) so we'll just run it directly + # echo "gunicorn ${ARCHES_PROJECT}.wsgi:application --config ${GUNICORN_CONFIG_PATH}" + # exec sh -c "gunicorn ${ARCHES_PROJECT}.wsgi:application --config ${GUNICORN_CONFIG_PATH}" + echo "gunicorn -w 2 -b 0.0.0.0:${DJANGO_PORT} ${ARCHES_PROJECT}.wsgi:application --reload --timeout 3600" + exec sh -c "gunicorn -w 2 -b 0.0.0.0:${DJANGO_PORT} ${ARCHES_PROJECT}.wsgi:application --reload --timeout 3600" + fi +} + +#### Main commands +run_arches() { + init_arches + run_elastic_safe_migrations + run_createcachetable + start_celery_supervisor + run_setup_arches_setup_webpack + run_django_server +} + +#### Main commands +run_livereload() { + run_livereload_server +} + +### Starting point ### + +# trying not to use virtualenv??? +# activate_virtualenv + +# Use -gt 1 to consume two arguments per pass in the loop +# (e.g. each argument has a corresponding value to go with it). +# Use -gt 0 to consume one or more arguments per pass in the loop +# (e.g. some arguments don't have a corresponding value to go with it, such as --help ). + +# If no arguments are supplied, assume the server needs to be run +if [[ $# -eq 0 ]]; then + wait_for_db + run_arches +fi + +# Else, process arguments +echo "Full command: $@" +while [[ $# -gt 0 ]] +do + key="$1" + echo "Command: ${key}" + + case ${key} in + run_arches) + wait_for_db + run_arches + ;; + run_livereload) + run_livereload_server + ;; + run_collect_static) + run_collect_static + ;; + run_collect_static_nocheck) + run_collect_static_nocheck + ;; + run_list_static) + run_list_static + ;; + run_setup_arches_setup_webpack) + run_setup_arches_setup_webpack + ;; + run_setup_webpack) + run_setup_webpack + ;; + run_webpack) + run_webpack + ;; + run_build_production) + run_build_production + ;; + setup_arches) + start_celery_supervisor + wait_for_db + setup_arches + ;; + run_make_migrations) + wait_for_db + run_make_migrations + ;; + run_migrations) + wait_for_db + run_migrations + ;; + run_es_reindex) + wait_for_db + run_es_reindex + ;; + help|-h) + display_help + ;; + *) + cd ${APP_FOLDER} + "$@" + exit 0 + ;; + esac + shift # next argument or value +done \ No newline at end of file diff --git a/arches/es/LC_MESSAGES/django.mo b/arches/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000..c5666f5 Binary files /dev/null and b/arches/es/LC_MESSAGES/django.mo differ diff --git a/arches/es/LC_MESSAGES/django.po b/arches/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..9567b41 --- /dev/null +++ b/arches/es/LC_MESSAGES/django.po @@ -0,0 +1,6483 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-30 19:07-0700\n" +"PO-Revision-Date: 2024-11-10 19:42-0400\n" +"Last-Translator: \n" +"Language-Team: \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: Poedit 3.1.1\n" + +#: app/datatypes/base.py:39 +msgid "{0} error, {1} {2} - {3}. Unable to save." +msgstr "{0} Error, {1} {2} - {3}.No se puede salvar." + +#: app/datatypes/base.py:199 +msgid "Multiple provisional edits. Returning first edit" +msgstr "Múltiples ediciones provisionales. Retornando a la primera edición" + +#: app/datatypes/base.py:203 +msgid "Tile has no authoritative or provisional data" +msgstr "El mosaico no tiene datos autorizados o provisionales" + +#: app/datatypes/concept_types.py:140 +msgid "The widget used to save this data appears to be incorrect for this datatype. Contact system admin to resolve" +msgstr "El widget utilizado para guardar estos datos parece ser incorrecto para este tipo de datos. Contacte al administrador del sistema para resolver" + +#: app/datatypes/concept_types.py:148 +msgid "This is an invalid concept prefLabel, or an incomplete UUID" +msgstr "Este es un concepto inválido preflabel, o un UUID incompleto" + +#: app/datatypes/concept_types.py:156 +msgid "This UUID is not an available concept value" +msgstr "Este UUID no es un valor conceptual disponible" + +#: app/datatypes/datatypes.py:104 +msgid "This is not a string" +msgstr "Esto no es una cadena" + +#: app/datatypes/datatypes.py:328 +msgid "Not a properly formatted number" +msgstr "No es un número correctamente formateado" + +#: app/datatypes/datatypes.py:419 +msgid "Not of type boolean" +msgstr "No es de tipo booleano" + +#: app/datatypes/datatypes.py:500 +msgid "Incorrect format. Confirm format is in settings.DATE_FORMATS or set the format in settings.DATE_IMPORT_EXPORT_FORMAT." +msgstr "Formato incorrecto. El formato de confirmación está en settings.DATE_FORMATS o establece el formato en settings.DATE_IMPORT_EXPORT_FORMAT." + +#: app/datatypes/datatypes.py:564 +#, python-brace-format +msgid "{value} is an invalid date format" +msgstr "{value} es un formato de fecha no válido" + +#: app/datatypes/datatypes.py:665 +msgid "Incorrect Extended Date Time Format. See http://www.loc.gov/standards/datetime/ for supported formats" +msgstr "Formato de hora de fecha extendida incorrecta. Ver http://www.loc.gov/standards/datetime/ para formatos compatibles" + +#: app/datatypes/datatypes.py:718 +msgid "Only dates that specify an exact year, month, and day can be used with the \"=\" operator" +msgstr "Solo las fechas que especifican un año, mes y día exactos se pueden usar con el operador \"=\"" + +#: app/datatypes/datatypes.py:727 +msgid "Only dates that specify an exact year, month, and day can be used with the \">\", \"<\", \">=\", and \"<=\" operators" +msgstr "Solo las fechas que especifican un año, mes y día exactos se pueden usar con los operadores \">\", \"<\", \"> =\" y \"<=\"" + +#: app/datatypes/datatypes.py:739 +msgid "Invalid date specified." +msgstr "Fecha no válida especificada." + +#: app/datatypes/datatypes.py:806 +msgid "Unable to serialize some geometry features" +msgstr "No se puede serializar algunas características de geometría" + +#: app/datatypes/datatypes.py:1398 +msgid "File type not permitted" +msgstr "Tipo de archivo no permitido" + +#: app/datatypes/datatypes.py:1424 +#, python-brace-format +msgid "This node has a limit of {0} files. Please reduce files." +msgstr "Este nodo tiene un límite de {0} archivos. Reduce los archivos." + +#: app/datatypes/datatypes.py:1432 +#, python-brace-format +msgid "This node has a file-size limit of {0}. Please reduce file size or contact your sysadmin." +msgstr "Este nodo tiene un límite de tamaño de archivo de {0}.Porfavor reduzca el tamaño del archivo o comuníquese con su sysadmin." + +#: app/datatypes/datatypes.py:1440 +#, python-brace-format +msgid "The file \"{0}\" does not exist in \"{1}\"" +msgstr "El archivo \"{0}\" no existe en \"{1}\"" + +#: app/datatypes/datatypes.py:1444 +#, python-brace-format +msgid "datatype: {0}, value: {1} - {2} ." +msgstr "tipo de datos: {0}, valor: {1} - {2} ." + +#: app/datatypes/datatypes.py:1503 app/datatypes/datatypes.py:1590 +msgid "File does not exist" +msgstr "El archivo no existe" + +#: app/datatypes/datatypes.py:1622 +msgid "The file url is invalid" +msgstr "La URL del archivo no es válida" + +#: app/datatypes/datatypes.py:1624 +msgid "A file is not available for this tile" +msgstr "Un archivo no está disponible para este mosaico" + +#: app/datatypes/datatypes.py:1626 +msgid "This file's fileid is not a valid UUID" +msgstr "El file ID de este archivo no es un UUID válido" + +#: app/datatypes/datatypes.py:1757 +#, python-brace-format +msgid "No domain option found for option id {0}, in node conifg: {1}" +msgstr "No se encuentra opción de dominio para la id {0}, en el nodo config: {1}" + +#: app/datatypes/datatypes.py:1806 +msgid "Invalid domain id. Please check the node this value is mapped to for a list of valid domain ids." +msgstr "ID de dominio no válido. Porfavor verifique el nodo que se asigna este valor para una lista de ID de dominio válidas." + +#: app/datatypes/datatypes.py:2122 +#, python-brace-format +msgid "The related resource with id '{0}' is not in the system." +msgstr "El recurso relacionado con id '{0}' no está en el sistema." + +#: app/etl_modules/base_import_module.py:33 +msgid "Delegating load reversal to Celery task" +msgstr "Delegar la inversión de carga a la tarea de Celery" + +#: app/etl_modules/branch_csv_importer.py:218 +msgid "Legacy id(s) already exist. Legacy ids must be unique" +msgstr "Ya existen identificaciones (ID) heredadas. Las ID's heredadas deben ser únicas" + +#: app/etl_modules/branch_csv_importer.py:243 app/etl_modules/import_single_csv.py:208 +msgid "Failed to complete load" +msgstr "No se pudo completar la carga" + +#: app/etl_modules/branch_csv_importer.py:244 app/etl_modules/import_single_csv.py:209 +msgid "Unable to insert record into staging table" +msgstr "No se puede insertar el registro en la tabla de puesta en escena" + +#: app/etl_modules/branch_csv_importer.py:279 +msgid "Invalid excel file/zip specified" +msgstr "Archivo de Excel no válido o Archivo zip especificado" + +#: app/etl_modules/branch_csv_importer.py:280 +msgid "Upload a valid excel file" +msgstr "Carga un archivo de Excel válido" + +#: app/etl_modules/branch_csv_importer.py:307 +msgid "Unable to initialize load" +msgstr "No se puede inicializar la carga" + +#: app/etl_modules/branch_csv_importer.py:322 app/etl_modules/import_single_csv.py:161 +msgid "Delegating load to Celery task" +msgstr "Delegar la carga a la tarea de Celery" + +#: app/etl_modules/branch_csv_importer.py:326 app/etl_modules/import_single_csv.py:165 +msgid "delegated_to_celery" +msgstr "delegado_a_celery" + +#: app/etl_modules/branch_csv_importer.py:329 app/etl_modules/import_single_csv.py:168 +msgid "Cannot start process. Unable to run process as a background task at this time." +msgstr "No se puede iniciar el proceso. No se puede ejecutar el proceso como una tarea de fondo en este momento." + +#: app/etl_modules/branch_csv_importer.py:335 app/etl_modules/import_single_csv.py:174 app/templates/views/rdm/modals/import-concept-form.htm:40 +msgid "Error" +msgstr "Error" + +#: app/etl_modules/import_single_csv.py:104 +msgid "No csv file found" +msgstr "No se encontró el archivo CSV" + +#: app/etl_modules/import_single_csv.py:105 +msgid "Upload a valid csv file" +msgstr "Cargar un archivo CSV válido" + +#: app/etl_modules/import_single_csv.py:143 +msgid "No valid node is selected" +msgstr "No hay un nodo válido seleccionado" + +#: app/etl_modules/import_single_csv.py:145 +msgid "Only one column should be selected for id" +msgstr "Solo se debe seleccionar una columna para ID" + +#: app/functions/primary_descriptors.py:67 +#, python-brace-format +msgid "Invalid nodegroupid, {0}, participating in descriptor function." +msgstr "NodeGroupID inválido, {0}, participando en la función Descriptor." + +#: app/functions/primary_descriptors.py:69 app/views/resource.py:745 app/views/search.py:387 +msgid "Undefined" +msgstr "Indefinido" + +#: app/models/concept.py:153 +msgid "Only include values for include or exclude, but not both" +msgstr "Solo incluye valores para incluir o excluir, pero no ambos" + +#: app/models/concept.py:844 +#, python-format +msgid "Invalid subconcept definition: %s" +msgstr "Definición de subconcepto no válida: %s" + +#: app/models/concept.py:852 +#, python-format +msgid "Invalid related concept definition: %s" +msgstr "Definición de concepto relacionado no válida: %s" + +#: app/models/concept.py:863 +#, python-format +msgid "Invalid value definition: %s" +msgstr "Definición de valor no válida: %s" + +#: app/models/concept.py:1267 +msgid "Need to include values when creating a collection" +msgstr "Necesita incluir valores al crear una colección" + +#: app/models/concept.py:1375 +msgid "Index of label failed. Index type (scheme id) could not be derived from the label." +msgstr "Índice de la etiqueta Fallido. El tipo de índice (ID del esquema) no se pudo derivar de la etiqueta." + +#: app/models/fields/i18n.py:166 +msgid "A I18n_TextField object" +msgstr "Un objeto i18n_textfield" + +#: app/models/fields/i18n.py:357 +msgid "A I18n_JSONField object" +msgstr "Un objeto i18n_jsonfield" + +#: app/models/graph.py:77 +msgid "New Node" +msgstr "Nuevo nodo" + +#: app/models/graph.py:267 +msgid "Top Node" +msgstr "Nodo superior" + +#: app/models/graph.py:491 +#, python-brace-format +msgid "Duplicate node alias: \"{0}\". All aliases must be unique in a resource model." +msgstr "Alias de nodo duplicados: \"{0}\".Todos los alias deben ser únicos en un modelo de recursos." + +#: app/models/graph.py:495 +#, python-brace-format +msgid "Fail to save node \"{0}\"." +msgstr "No guardar el nodo \"{0}\"." + +#: app/models/graph.py:554 +#, python-brace-format +msgid "Your resource model: {0}, already has instances saved. You cannot delete a Resource Model with instances." +msgstr "Su modelo de recursos: {0}, ya tiene instancias guardadas. No puede eliminar un modelo de recursos con instancias." + +#: app/models/graph.py:703 +#, python-brace-format +msgid "Your resource model: {0}, already has instances saved. You cannot modify a Resource Model with instances." +msgstr "Su modelo de recursos: {0}, ya tiene instancias guardadas. No puede modificar un modelo de recursos con instancias." + +#: app/models/graph.py:735 +msgid "Ontology rules don't allow this node to be appended" +msgstr "Las reglas de ontología no permiten que este nodo ser agregado" + +#: app/models/graph.py:1002 +#, python-brace-format +msgid "Your resource model: {self.name}, already has instances saved. You cannot delete nodes from a Resource Model with instances." +msgstr "Su modelo de recursos: {self.name}, ya tiene instancias guardadas. No puede eliminar nodos de un modelo de recursos con instancias." + +#: app/models/graph.py:1037 +msgid "The graph you wish to append needs to define an ontology" +msgstr "El grafo que desea agregar necesita definir una ontología" + +#: app/models/graph.py:1050 +msgid "Ontology rules don't allow this graph to be appended" +msgstr "Las reglas de ontología no permiten que este grafo sea agregado" + +#: app/models/graph.py:1522 +#, python-brace-format +msgid "Your resource model: {self.name}, already has instances saved. You cannot modify a Resource Model with instances." +msgstr "Su modelo de recursos: {self.name}, ya tiene instancias guardadas. No puede modificar un modelo de recursos con instancias." + +#: app/models/graph.py:1541 +#, python-brace-format +msgid "Duplicate node name: \"{0}\". All node names in a card must be unique." +msgstr "Nombre del nodo duplicado: \"{0}\".Todos los nombres de nodos en una tarjeta deben ser únicos." + +#: app/models/graph.py:1550 +#, python-brace-format +msgid "Duplicate node name: \"{0}\". All sibling node names must be unique." +msgstr "Nombre del nodo duplicado: \"{0}\".Todos los nombres de nodos hermanos deben ser únicos." + +#: app/models/graph.py:1586 +msgid "The top node of your resource graph: {self.root.name} needs to be a collector. Hint: check that nodegroup_id of your resource node(s) are not null." +msgstr "El nodo superior de su grafo de recursos: {self.root.name} debe ser un coleccionista. Sugerencia: verifique que NodeGroup_ID de sus nodos de recursos no sea nulo." + +#: app/models/graph.py:1592 +msgid "The top node of your resource graph must have a datatype of 'semantic'." +msgstr "El nodo superior de su grafo de recursos debe tener un tipo de datos de 'semántica'." + +#: app/models/graph.py:1597 +msgid "If your graph contains more than one node and is not a resource the root must be a collector." +msgstr "Si su grafo contiene más de un nodo y no es un recurso, la raíz debe ser un coleccionista." + +#: app/models/graph.py:1602 +msgid "Field name must not be blank." +msgstr "El nombre del campo no debe estar en blanco." + +#: app/models/graph.py:1604 +msgid "Field name must contain only alpha-numeric characters or underscores." +msgstr "El nombre del campo debe contener solo caracteres alfa-numéricos o subrayos." + +#: app/models/graph.py:1606 +msgid "Field name cannot begin with an underscore or number" +msgstr "El nombre del campo no puede comenzar con un bajo o número" + +#: app/models/graph.py:1612 +#, python-brace-format +msgid "Field name must be unique to the graph; '{fieldname}' already exists." +msgstr "El nombre del campo debe ser exclusivo del grafo;'{fieldname}' ya existe." + +#: app/models/graph.py:1634 +#, python-brace-format +msgid "A valid {0} ontology class must be selected" +msgstr "Se debe seleccionar una clase de ontología {0} válida" + +#: app/models/graph.py:1637 +#, python-brace-format +msgid "'{0}' is not a valid {1} ontology class" +msgstr "'{0}' no es una clase de ontología {1} válida" + +#: app/models/graph.py:1645 +msgid "You must specify an ontology property. Your graph isn't semantically valid. Entity domain '{edge.domainnode.ontologyclass}' and Entity range '{edge.rangenode.ontologyclass}' can not be related via Property '{edge.ontologyproperty}'." +msgstr "Debes especificar una propiedad ontológica. Tu grafo no es semánticamente válido. El dominio de entidad '{edge.domainnode.ontologyclass}' y el rango de entidad '{edge.rangenode.ontologyclass}' no pueden relacionarse a través de la propiedad '{edge.ontologyproperty}'." + +#: app/models/graph.py:1664 +msgid "Your graph isn't semantically valid. Entity domain '{edge.domainnode.ontologyclass}' and Entity range '{edge.rangenode.ontologyclass}' cannot be related via Property '{edge.ontologyproperty}'." +msgstr "Tu grafo no es semánticamente válido. El dominio de entidad '{edge.domainnode.ontologyclass}' y el rango de entidad '{edge.rangenode.ontologyclass}' no pueden relacionarse a través de la propiedad '{edge.ontologyproperty}'." + +#: app/models/graph.py:1672 +#, python-brace-format +msgid "'{0}' is not found in the {1} ontology or is not a valid ontology property for Entity domain '{2}'." +msgstr "'{0}' no se encuentra en la {1} ontología o no es una propiedad de ontología válida para el dominio de entidad '{2}'." + +#: app/models/graph.py:1681 +msgid "You have assigned ontology classes to your graph nodes but not assigned an ontology to your graph." +msgstr "Ha asignado clases de ontología a sus nodos grafos pero no ha asignado una ontología a su grafo." + +#: app/models/graph.py:1702 +msgid "The json-ld context you supplied wasn't formatted correctly." +msgstr "El contexto JSON-LD que proporcionó no estaba formateado correctamente." + +#: app/models/graph.py:1707 +#, python-brace-format +msgid "Another resource model already uses the slug '{self.slug}'" +msgstr "Otro modelo de recursos ya usa el slug '{self.slug}'" + +#: app/models/graph.py:1753 +msgid "Graph Validation Error" +msgstr "Error de validación de grafos" + +#: app/models/models.py:435 +msgid "Only resource models may be edited - branches are not editable" +msgstr "Solo se pueden editar los modelos de recursos: las ramas no son editables" + +#: app/models/models.py:437 +msgid "This Model is currently unpublished and not available for instance creation." +msgstr "Este modelo actualmente es inédito y no está disponible, por ejemplo, la creación." + +#: app/models/resource.py:785 +msgid "Published Model Error" +msgstr "Error de modelo publicado" + +#: app/models/resource.py:795 +msgid "Unpublished Model Error" +msgstr "Error de modelo no publicado" + +#: app/models/tile.py:276 +msgid "This card violates a unique constraint. The following value is already saved: " +msgstr "Esta tarjeta viola una restricción única. El siguiente valor ya está guardado: " + +#: app/models/tile.py:297 +#, python-brace-format +msgid "Error checking for missing node. Nodeid: {nodeid} with value: {value}, not in nodes. You may have a node in your business data that no longer exists in any graphs." +msgstr "Comprobación de errores para el nodo faltante. Nodeid: {nodeid} con valor: {value}, no en nodos. Es posible que tenga un nodo en sus datos comerciales que ya no exista en ningún grafo." + +#: app/models/tile.py:302 +msgid "This card requires values for the following: " +msgstr "Esta tarjeta requiere valores para lo siguiente: " + +#: app/models/tile.py:325 +#, python-brace-format +msgid "{0}" +msgstr "{0}" + +#: app/models/tile.py:645 app/models/tile.py:656 app/models/tile.py:673 +msgid "No associated functions or other TypeError raised by a function" +msgstr "No hay funciones asociadas u otros TypeError planteados por una función" + +#: app/models/tile.py:711 +msgid "Tile Validation Error" +msgstr "Error de validación de mosaico" + +#: app/models/tile.py:722 +msgid "Tile Cardinaltiy Error" +msgstr "Error de Cardinalidad de Mosaico" + +#: app/search/base_index.py:182 +msgid "Search Index Error:" +msgstr "Error en el índice de búsqueda:" + +#: app/search/base_index.py:192 +msgid "Search Index Not Defined Error:" +msgstr "Índice de búsqueda no definido Error:" + +#: app/search/base_index.py:193 +#, python-format +msgid "The index \"%s\" is not defined in settings.ELASTICSEARCH_CUSTOM_INDEXES" +msgstr "El índice \"%s\" no se define en la configuración. ELASTICSEARCH_CUSTOM_INDEXES" + +#: app/search/components/map_filter.py:75 +msgid "Feature geometry is not defined" +msgstr "La geometría de la característica no está definida" + +#: app/search/elasticsearch_dsl_builder.py:289 +msgid "You need at least one of the following operators in a Range expression: gte, gt, lte, or lt" +msgstr "Necesita al menos uno de los siguientes operadores en una expresión de rango: gte, gt, lte o lt" + +#: app/search/elasticsearch_dsl_builder.py:291 +msgid "You can only use one of either: gte or gt" +msgstr "Sólo puede utilizar uno de los dos: gte o gt" + +#: app/search/elasticsearch_dsl_builder.py:293 +msgid "You can only use one of either: lte or lt" +msgstr "Sólo puede utilizar uno de los dos: lte o lt" + +#: app/search/elasticsearch_dsl_builder.py:377 +msgid "You need to specify either a \"field\" or a \"script\"" +msgstr "Debe especificar un \"campo\" o un \"script\"" + +#: app/search/elasticsearch_dsl_builder.py:379 +msgid "You need to specify a name for your aggregation" +msgstr "Necesita especificar un nombre para su agregación" + +#: app/search/elasticsearch_dsl_builder.py:381 +msgid "You need to specify an aggregation type" +msgstr "Necesita especificar un tipo de agregación" + +#: app/search/elasticsearch_dsl_builder.py:570 +msgid "You need to specify a path for your nested aggregation" +msgstr "Debe especificar una ruta para su agregación anidada" + +#: app/search/search_export.py:212 +#, python-brace-format +msgid "Shapefile are fieldnames required for the following nodes: {0}" +msgstr "ShapeFile son nombres de campo necesarios para los siguientes nodos: {0}" + +#: app/tasks.py:31 +msgid "files_deleted" +msgstr "files_deleted" + +#: app/tasks.py:84 +msgid "Your search {} is ready for download. You have 24 hours to access this file, after which we'll automatically remove it." +msgstr "Su búsqueda {} está lista para descargar. Tiene 24 horas para acceder a este archivo, después de lo cual lo eliminaremos automáticamente." + +#: app/tasks.py:88 +msgid "" +"Hello,\n" +"Your request to download a set of search results is now ready." +msgstr "" +"Hola,\n" +"Su solicitud de descargar un conjunto de resultados de búsqueda ahora está lista." + +#: app/tasks.py:90 +msgid "Download Now" +msgstr "Descargar ahora" + +#: app/tasks.py:91 app/tasks.py:148 +msgid "Thank you" +msgstr "Gracias" + +#: app/tasks.py:140 +msgid "Resources have completed loading." +msgstr "Los recursos han completado la carga." + +#: app/tasks.py:144 +msgid "" +"Hello,\n" +"Your package has successfully loaded into your Arches project." +msgstr "" +"Hola,\n" +"Su paquete se ha cargado con éxito en su proyecto Arches." + +#: app/tasks.py:147 +msgid "Log me in" +msgstr "Iniciar sesión" + +#: app/tasks.py:213 app/tasks.py:235 +msgid "Completed" +msgstr "Completado" + +#: app/tasks.py:213 app/tasks.py:220 app/tasks.py:235 app/tasks.py:242 +msgid "Failed" +msgstr "Fallido" + +#: app/tasks.py:214 +msgid "Branch Excel Import: {} [{}]" +msgstr "Importación de una ramificación de Entel: {} [{}]" + +#: app/tasks.py:236 +msgid "Single CSV Import: {} [{}]" +msgstr "Importación de CSV individual: {} [{}]" + +#: app/templates/base-manager.htm:42 app/templates/change_password.htm:46 app/templates/javascript.htm:404 app/templates/views/rdm/modals/import-concept-form.htm:52 app/templates/views/rdm/modals/import-scheme-form.htm:53 app/templates/views/rdm/modals/manage-parent-form.htm:57 app/templates/views/rdm/modals/related-concept-form.htm:67 +#: app/templates/views/rdm/modals/related-member-form.htm:66 app/templates/views/rdm/modals/value-form.htm:63 app/templates/views/rdm/modals/value-form.htm:142 app/templates/views/rdm/modals/value-form.htm:220 app/templates/views/user-profile-manager.htm:156 +msgid "Cancel" +msgstr "Cancelar" + +#: app/templates/base-manager.htm:45 +msgid "OK" +msgstr "OK" + +#: app/templates/base-manager.htm:72 app/templates/rdm.htm:64 +msgid "Tools" +msgstr "Herramientas" + +#: app/templates/base-manager.htm:80 +msgid "Manage System Settings" +msgstr "Administrar la configuración del sistema" + +#: app/templates/base-manager.htm:86 app/templates/help/system-settings-help.htm:11 app/views/api.py:799 app/views/resource.py:239 +msgid "System Settings" +msgstr "Configuración del sistema" + +#: app/templates/base-manager.htm:90 +msgid "System Settings Graph" +msgstr "Grafo de configuración del sistema" + +#: app/templates/base-manager.htm:101 app/templates/base-manager.htm:363 app/templates/javascript.htm:386 app/templates/views/search.htm:23 app/views/search.py:105 +msgid "Search" +msgstr "Buscar" + +#: app/templates/base-manager.htm:116 +msgid "Add New Resource" +msgstr "Agregar nuevo recurso" + +#: app/templates/base-manager.htm:149 app/views/graph.py:151 +msgid "Arches Designer" +msgstr "Diseñador del Arches" + +#: app/templates/base-manager.htm:155 app/templates/index.htm:399 app/templates/views/graph.htm:64 +msgid "Resource Models" +msgstr "Modelos de recursos" + +#: app/templates/base-manager.htm:159 app/templates/views/graph.htm:65 +msgid "Branches" +msgstr "Ramas" + +#: app/templates/base-manager.htm:171 app/templates/views/map-layer-manager.htm:26 app/views/map.py:96 app/views/map.py:98 +msgid "Map Layer Manager" +msgstr "Gestor de capas de Mapas" + +#: app/templates/base-manager.htm:177 app/templates/help/map-manager-help.htm:11 app/templates/views/map-layer-manager.htm:88 +msgid "Resource Layers" +msgstr "Capas de recursos" + +#: app/templates/base-manager.htm:182 app/templates/help/map-manager-help.htm:31 app/templates/javascript.htm:439 app/templates/views/map-layer-manager.htm:89 +msgid "Basemaps" +msgstr "Mapas de base" + +#: app/templates/base-manager.htm:187 app/templates/help/map-manager-help.htm:46 app/templates/javascript.htm:440 app/templates/javascript.htm:482 app/templates/views/map-layer-manager.htm:90 +msgid "Overlays" +msgstr "Superposiciones" + +#: app/templates/base-manager.htm:201 app/templates/views/edit-history.htm:5 app/views/resource.py:572 +msgid "Recent Edits" +msgstr "Ediciones recientes" + +#: app/templates/base-manager.htm:214 app/views/user.py:107 app/views/user.py:142 +msgid "Profile Manager" +msgstr "Gestor de perfiles" + +#: app/templates/base-manager.htm:223 +msgid "Modules" +msgstr "Módulos" + +#: app/templates/base-manager.htm:232 app/templates/rdm.htm:9 app/views/concept.py:67 +msgid "Reference Data Manager" +msgstr "Administrador de datos de referencia" + +#: app/templates/base-manager.htm:274 +msgid "DEBUG" +msgstr "DEBUG" + +#: app/templates/base-manager.htm:289 app/templates/index.htm:87 app/templates/javascript.htm:735 app/templates/views/graph.htm:109 app/templates/views/rdm/concept-report.htm:26 app/templates/views/rdm/concept-report.htm:50 +msgid "Manage" +msgstr "Administrar" + +#: app/templates/base-manager.htm:323 +msgid "Profile" +msgstr "Perfil" + +#: app/templates/base-manager.htm:323 app/templates/base-manager.htm:326 +msgid "Login" +msgstr "Iniciar Sesión" + +#: app/templates/base-manager.htm:328 +msgid "Welcome" +msgstr "Bienvenido" + +#: app/templates/base-manager.htm:349 app/templates/base-manager.htm:422 +msgid "Notifications" +msgstr "Notificaciones" + +#: app/templates/base-manager.htm:374 +msgid "My Recent Edits" +msgstr "Mis ediciones recientes" + +#: app/templates/base-manager.htm:383 +msgid "Edit Resource" +msgstr "Editar recurso" + +#: app/templates/base-manager.htm:391 +msgid "Print" +msgstr "Imprimir" + +#: app/templates/base-manager.htm:400 app/templates/javascript.htm:340 app/templates/views/graph/card-configuration/card-form-preview.htm:54 app/templates/views/graph/card-configuration/card-form-preview.htm:110 +msgid "Help" +msgstr "Ayuda" + +#: app/templates/base-manager.htm:411 +msgid "Logout" +msgstr "Cerrar Sesión" + +#: app/templates/base-manager.htm:426 app/templates/base-manager.htm:448 app/templates/login.htm:73 app/templates/rdm.htm:78 app/templates/views/rdm/concept-report.htm:42 app/templates/views/rdm/concept-report.htm:59 app/templates/views/rdm/modals/add-child-form.htm:49 app/templates/views/rdm/modals/add-collection-form.htm:31 +#: app/templates/views/rdm/modals/add-scheme-form.htm:37 app/templates/views/rdm/modals/delete-collection-form.htm:43 app/templates/views/rdm/modals/delete-scheme-form.htm:43 app/templates/views/rdm/modals/export-scheme-form.htm:26 +msgid "Close" +msgstr "Cerrar" + +#: app/templates/base-manager.htm:444 +msgid "My Edit History" +msgstr "Mi historial de edición" + +#: app/templates/base-manager.htm:471 +msgid "Close Help" +msgstr "Cerrar ayuda" + +#: app/templates/base-manager.htm:482 +msgid "for more documentation, visit" +msgstr "para más documentación, visite" + +#: app/templates/change_password.htm:23 +msgid "Change your password" +msgstr "Cambia tu contraseña" + +#: app/templates/change_password.htm:47 +msgid "Change Password" +msgstr "Cambiar la contraseña" + +#: app/templates/change_password.htm:50 app/templates/signup.htm:133 +msgid "Your password must:" +msgstr "Su contraseña debe:" + +#: app/templates/errors/404.htm:11 app/templates/errors/500.htm:11 app/templates/javascript.htm:206 +msgid "Arches" +msgstr "Arches" + +#: app/templates/errors/404.htm:19 app/templates/errors/500.htm:19 +msgid "Oops!" +msgstr "¡Ups!" + +#: app/templates/errors/404.htm:20 +msgid "Page Not Found!" +msgstr "¡Página no encontrada!" + +#: app/templates/errors/404.htm:22 +msgid "Sorry, but the page you are looking for has not been found on our server." +msgstr "Lo sentimos, pero la página que está buscando no se ha encontrado en nuestro servidor." + +#: app/templates/errors/404.htm:26 app/templates/errors/500.htm:26 +msgid "Back to Homepage" +msgstr "Volver a la página de inicio" + +#: app/templates/errors/500.htm:20 +msgid "Internal Server Error!" +msgstr "¡Error Interno del Servidor!" + +#: app/templates/errors/500.htm:22 +msgid "Something went wrong and we couldn't process your request." +msgstr "Algo salió mal y no pudimos procesar su solicitud." + +#: app/templates/help/cards-tab-help.htm:6 +msgid "Cards Tab" +msgstr "Pestaña de tarjetas" + +#: app/templates/help/cards-tab-help.htm:10 app/templates/help/function-help.htm:7 app/templates/help/graph-tab-help.htm:10 app/templates/help/permissions-tab-help.htm:10 +msgid "Overview" +msgstr "Descripción general" + +#: app/templates/help/cards-tab-help.htm:14 +msgid "" +"In this tab you will configure the user-facing aspects of your graph. There are multiple levels to doing so, which are reflected in the levels of the graph tree. Report Configuration where you choose the template for the resource report, Card Configuration where you'll specify card-related settings, and " +"the Widget Manager where you will choose and configure the data entry widget for each node in the graph." +msgstr "" +"En esta pestaña, configurará los aspectos orientados al usuario de su grafo. Hay múltiples niveles para hacerlo, que se reflejan en los niveles del árbol grafo. Configuración del informe donde elige la plantilla para el informe de recursos, Configuración de Tarjeta donde especificará configuraciones " +"relacionadas con la tarjeta y el Administrador de Widgets dónde Elegirá y configurará el widget de entrada de datos para cada nodo en el grafo." + +#: app/templates/help/cards-tab-help.htm:19 app/templates/views/graph-designer.htm:307 +msgid "Report Configuration" +msgstr "Configuración de reportes" + +#: app/templates/help/cards-tab-help.htm:23 +msgid "Each Resource Model must be configured with a report template. Reports show data for all nodes in a resource instance for which the user has Read permissions." +msgstr "Cada modelo de recursos debe configurarse con una plantilla de informe. Los informes muestran datos para todos los nodos en una instancia de recursos para la cual el usuario tiene permisos de lectura." + +#: app/templates/help/cards-tab-help.htm:24 +msgid "No Header Template" +msgstr "Sin plantilla de encabezado" + +#: app/templates/help/cards-tab-help.htm:25 +msgid "Lists all node data, no special header at the top of the page." +msgstr "Enumera todos los datos del nodo, sin encabezado especial en la parte superior de la página." + +#: app/templates/help/cards-tab-help.htm:26 +msgid "Image Header Template" +msgstr "Plantilla de encabezado de imagen" + +#: app/templates/help/cards-tab-help.htm:27 +msgid "Use this template for Resource Models that will be be primarily used to record images." +msgstr "Use esta plantilla para modelos de recursos que se utilizarán principalmente para grabar imágenes." + +#: app/templates/help/cards-tab-help.htm:30 app/templates/javascript.htm:535 +msgid "Included Image Nodes" +msgstr "Nodos de imagen incluidos" + +#: app/templates/help/cards-tab-help.htm:31 +msgid "Choose one or more nodes that hold images in this Resource Model. These images will be presented as a slideshow in the report header." +msgstr "Elija uno o más nodos que contengan imágenes en este modelo de recursos.Estas imágenes se presentarán como una presentación de diapositivas en el encabezado del informe." + +#: app/templates/help/cards-tab-help.htm:34 +msgid "Map Header Template" +msgstr "Plantilla de encabezado de mapa" + +#: app/templates/help/cards-tab-help.htm:35 +msgid "Use this template for Resource Models that will be be primarily used to record resources that have a geo-location. There are number of settings you should fill out to control the appearance of the map in the header." +msgstr "Use esta plantilla para modelos de recursos que se utilizarán principalmente para registrar recursos que tienen una ubicación geográfica. Hay una cantidad de configuraciones que debe completar para controlar la apariencia del mapa en el encabezado." + +#: app/templates/help/cards-tab-help.htm:38 +msgid "Map Controls" +msgstr "Controles de mapa" + +#: app/templates/help/cards-tab-help.htm:39 +msgid "Choose whether or not the user has access to the Map Tools." +msgstr "Elija si el usuario tiene acceso o no a las herramientas del mapa." + +#: app/templates/help/cards-tab-help.htm:42 +msgid "Position" +msgstr "Posición" + +#: app/templates/help/cards-tab-help.htm:43 +#, fuzzy +msgid "" +"You can set the position by panning the map. On report load, the map will automatically pan and zoom to the resource geo-location if there is one (also see Default Value below). Pitch values are 0-60 (higher = more oblique), Bearing values can be positive or negative (270 faces west; -180 faces south). " +"Use ctrl + click then pan the map to change Pitch and Bearing." +msgstr "" +"Puede establecer la posición por vista panorámica en el mapa. En la carga del informe, el mapa se acomodará automáticamente y se acercará a la ubicación geográfica de recursos si hay una (también vea valor predeterminado a continuación). Los valores de tono son 0-60 (más altos = más oblicuos), los valores de " +"la orientación pueden ser positivos o negativos (270 caras al oeste; -180 caras hacia el sur).Use Ctrl + haga clic en Luego aplique el mapa para cambiar el tono y la orientación." + +#: app/templates/help/cards-tab-help.htm:46 +msgid "Zoom" +msgstr "Zoom" + +#: app/templates/help/cards-tab-help.htm:47 +msgid "Zoom levels go from 0 (zoomed out) to 20 (zoomed in). On report load, the map will automatically pan and zoom to the resource geo-location if there is one." +msgstr "Los niveles de zoom van de 0 (zoom) a 20 (ampliados). En la carga del informe, el mapa se acomodará automáticamente y se acercará a la ubicación geográfica de recursos si hay uno." + +#: app/templates/help/cards-tab-help.htm:50 +msgid "Geocoder" +msgstr "Geocoder" + +#: app/templates/help/cards-tab-help.htm:51 +msgid "Configure which geocoding service the address search bar will use, and whether or not to show the bar at all." +msgstr "Configure qué servicio de geo codificación utilizará la barra de búsqueda de direcciones y si mostrará o no la barra." + +#: app/templates/help/cards-tab-help.htm:54 +msgid "Resource Properties" +msgstr "Propiedades de recursos" + +#: app/templates/help/cards-tab-help.htm:55 +msgid "Configure some styling options for how the resource appears on the map." +msgstr "Configure algunas opciones de estilo para cómo aparece el recurso en el mapa." + +#: app/templates/help/cards-tab-help.htm:58 app/templates/help/cards-tab-help.htm:127 app/templates/javascript.htm:236 app/templates/javascript.htm:313 +msgid "Default Value" +msgstr "Valor predeterminado" + +#: app/templates/help/cards-tab-help.htm:59 +msgid "Choose whether the map should zoom to the resource geo-location if available or the geo-location of the user." +msgstr "Elija si el mapa debe acercarse a la ubicación geográfica de recursos si está disponible o la ubicación geográfica del usuario." + +#: app/templates/help/cards-tab-help.htm:67 app/templates/views/graph/graph-designer/card-configuration.htm:7 +msgid "Card Configuration" +msgstr "Configuración de tarjeta" + +#: app/templates/help/cards-tab-help.htm:71 +msgid "The settings for Cards are mostly related yo how you want a user to see the card, but some have a more direct bearing on data structure as well. The preview shows what the card will look like to users." +msgstr "La configuración de las tarjetas está en su mayoría relacionada con cómo desea que un usuario vea la tarjeta, pero algunos también tienen una relación más directa en la estructura de datos. La vista previa muestra cómo se verá la tarjeta para los usuarios." + +#: app/templates/help/cards-tab-help.htm:74 app/templates/views/graph/graph-designer/card-configuration.htm:18 +msgid "Card Type" +msgstr "Tipo de tarjeta" + +#: app/templates/help/cards-tab-help.htm:75 +msgid "Choose the Card Component to use. Only the Default Card is available initially, but custom Card Components are a way for developers to enhance the user experience." +msgstr "Elija el componente de la tarjeta para usar. Solo la tarjeta predeterminada está disponible inicialmente, pero los componentes de la tarjeta personalizados son una forma para que los desarrolladores mejoren la experiencia del usuario." + +#: app/templates/help/cards-tab-help.htm:78 app/templates/views/graph/graph-designer/card-configuration.htm:28 +msgid "Card Title" +msgstr "Título de tarjeta" + +#: app/templates/help/cards-tab-help.htm:79 +msgid "Users will see this title when performing data entry." +msgstr "Los usuarios verán este título al realizar la entrada de datos." + +#: app/templates/help/cards-tab-help.htm:82 app/templates/help/graph-tab-help.htm:32 app/templates/javascript.htm:228 app/templates/views/graph/graph-designer/card-configuration.htm:37 app/templates/views/graph/graph-designer/graph-settings.htm:44 app/templates/views/graph/graph-designer/graph-settings.htm:48 +msgid "Subtitle" +msgstr "Subtitulo" + +#: app/templates/help/cards-tab-help.htm:83 +msgid "Users will see this subtitle when performing data entry." +msgstr "Los usuarios verán este subtítulo al realizar la entrada de datos." + +#: app/templates/help/cards-tab-help.htm:86 +msgid "CSS Classes" +msgstr "Clases de CSS" + +#: app/templates/help/cards-tab-help.htm:87 +msgid "You can add your own CSS classes to this Card to customize its look and feel. Define these classes in your project's \"package.css\" file." +msgstr "Puede agregar sus propias clases de CSS a esta tarjeta para personalizar su aspecto y sentido. Defina estas clases en el archivo \"package.css\" de su proyecto." + +#: app/templates/help/cards-tab-help.htm:90 +msgid "Make Card Visible" +msgstr "Hacer que la tarjeta sea visible" + +#: app/templates/help/cards-tab-help.htm:91 +msgid "Show this Card by default. Developers could hide a card initially, and show it based other variables." +msgstr "Muestre esta tarjeta por defecto. Los desarrolladores podrían ocultar una tarjeta inicialmente y mostrarla basadas en otras variables." + +#: app/templates/help/cards-tab-help.htm:94 +msgid "Allow Multiple Values" +msgstr "Permitir múltiples valores" + +#: app/templates/help/cards-tab-help.htm:95 +msgid "While certain node data types allow the storage of multiple values in a single node, \"concept-list\" for example, this setting is how you control cardinality at a higher level. When determining whether or not to use this setting, we recommend testing out the resource editor interface directly." +msgstr "" +"Si bien ciertos tipos de datos de nodo permiten el almacenamiento de valores múltiples en un solo nodo, \"Lista de conceptual\", por ejemplo, esta configuración es cómo controla la cardinalidad en un nivel superior. Al determinar si utilizar o no esta configuración, recomendamos probar directamente la interfaz del editor de recursos." + +#: app/templates/help/cards-tab-help.htm:98 +msgid "Enable Card-level Help" +msgstr "Habilitar ayuda a nivel de tarjeta" + +#: app/templates/help/cards-tab-help.htm:99 +msgid "To aid data entry users when using this Card, you may want to add some extra guidance. Enable setting to do so, and design the content of this guidance with the Card-Level Help menu." +msgstr "Para ayudar a los usuarios de entrada de datos cuando usan esta tarjeta, es posible que desee agregar una orientación adicional. Habilite la configuración para hacerlo y diseñe el contenido de esta guía con el menú de ayuda a nivel de tarjeta." + +#: app/templates/help/cards-tab-help.htm:106 +msgid "Widget Management" +msgstr "Gestión de widgets" + +#: app/templates/help/cards-tab-help.htm:110 +msgid "" +"Widgets are data entry helpers for each node that collects information; it's often easier to pick a date from a calendar than to type it in, for example. Generally, the data type of the node will determine which Widget template is used. However, in some cases you will have a choice: For example, in the case of a concept " +"node, you can choose a dropdown menu or a set of radio buttons. Similarly, for a string node you can choose a basic text box or a rich text editor." +msgstr "" +"Los widgets son ayudantes de entrada de datos para cada nodo que recopila información; A menudo es más fácil elegir una fecha de un calendario que escribirlo, por ejemplo. En general, el tipo de datos del nodo determinará qué plantilla de widget se usa.Sin embargo, en algunos casos tendrá una opción: por ejemplo, en el caso de un nodo " +" concepto , puede elegir un menú desplegable o un conjunto de botones de radio. Del mismo modo, para un nodo cadena puede elegir un cuadro de texto básico o un editor de texto enriquecido." + +#: app/templates/help/cards-tab-help.htm:111 +msgid "Depending on the Widget, there are more settings you can configure, most of which are optional and all come with acceptable defaults." +msgstr "Dependiendo del widget, hay más configuraciones que puedes configurar, la mayoría de las cuales son opcionales y todos vienen con valores predeterminados aceptables." + +#: app/templates/help/cards-tab-help.htm:112 +msgid "Common Settings" +msgstr "Configuraciones comunes" + +#: app/templates/help/cards-tab-help.htm:115 app/templates/views/graph/graph-designer/widget-configuration.htm:18 app/templates/views/graph/graph-designer/widget-configuration.htm:21 +msgid "Widget Label" +msgstr "Etiqueta de widget" + +#: app/templates/help/cards-tab-help.htm:116 +msgid "This will be used in the user interface. The default label comes from the node name." +msgstr "Esto se utilizará en la interfaz de usuario. La etiqueta predeterminada proviene del nombre del nodo." + +#: app/templates/help/cards-tab-help.htm:119 app/templates/views/graph-designer.htm:312 app/templates/views/graph/graph-designer/widget-configuration.htm:27 +msgid "Template" +msgstr "Plantilla" + +#: app/templates/help/cards-tab-help.htm:120 +msgid "The list of available Widgets is determined by the node's data type, though developers can create new Widgets." +msgstr "La lista de widgets disponibles está determinada por el tipo de datos del nodo, aunque los desarrolladores pueden Crear nuevos widgets ." + +#: app/templates/help/cards-tab-help.htm:123 app/templates/javascript.htm:199 +msgid "Placeholder" +msgstr "Marcador de posición" + +#: app/templates/help/cards-tab-help.htm:124 +msgid "Shown in the input area before the user has entered anything." +msgstr "Se muestra en el área de entrada antes de que el usuario haya ingresado cualquier cosa." + +#: app/templates/help/cards-tab-help.htm:128 +msgid "If desired, you can define a default value." +msgstr "Si lo desea, puede definir un valor predeterminado." + +#: app/templates/help/cards-tab-help.htm:131 +msgid "Other Settings by Widget" +msgstr "Otras configuraciones por widget" + +#: app/templates/help/cards-tab-help.htm:134 +msgid "map-widget" +msgstr "widget de mapa" + +#: app/templates/help/cards-tab-help.htm:135 +msgid "The map widget allows for a good deal of customization, from the default center and zoom level to default layers." +msgstr "El widget del mapa permite una buena cantidad de personalización, desde el nivel predeterminado y el nivel de zoom hasta las capas predeterminadas." + +#: app/templates/help/cards-tab-help.htm:138 +msgid "datepicker-widget" +msgstr "widget-Selector de Fecha" + +#: app/templates/help/cards-tab-help.htm:139 +msgid "" +"This widget is used for the normal date data type, not the extended date/time format data type. You can set minumum or maximum dates, change how specific the calendar is when user first opens it, or set the display of the date. However, note that real YYYY-MM-DD dates are stored in the database whether no matter what display format you " +"have chosed for this widget. So if you have set YYYY for the Date Format and a user enters \"2005\", then \"2005-01-01\" will be saved in the database." +msgstr "" +"Este widget se utiliza para el tipo de datos de fecha normal, no el tipo de datos de formato de fecha/hora extendidos. Puede establecer fechas mínimum o máximas, cambiar cuán específico es el calendario cuando el usuario lo abre por primera vez o establecer la visualización de la fecha. Sin embargo, tenga en cuenta que las fechas reales " +"yyyy-mm-dd se almacenan en la base de datos si no importa qué formato de visualización haya cancelado para este widget. Entonces, si ha establecido a Yyyy para el formato de fecha y un usuario ingresa \"2005\", entonces \"2005-01-01\" se guardará en la base de datos." + +#: app/templates/help/function-help.htm:11 +msgid "" +"\n" +"

Functions are discrete operations that can be associated with a Resource Model and are run on specific nodes or cards whenever a user clicks creates or modify's a Resource. Here in the Function Manager you will associate Functions with this Resource Model and configure them appropriately.

\n" +"

To add a Function to this Resource Model, click on it in Function Library, and notice that it is added to the list of Selected Functions. To delete a Function, use the symbol in the upper right corner.\n" +" " +msgstr "" +"\n" +"

Las funciones son operaciones discretas que pueden asociarse con un modelo de recursos y se ejecutan en nodos o tarjetas específicos cada vez que un usuario hace clic en crea o modifica un recurso. Aquí en el administrador de funciones asociará las funciones con este modelo de recursos y las configurará adecuadamente. " +"

\n" +"

Para agregar una función a este modelo de recursos, haga clic en ella en la biblioteca de funciones y observe que se agrega a la lista de funciones seleccionadas. Para eliminar una función, use el símbolo en la esquina superior derecha.\n" +" " + +#: app/templates/help/function-help.htm:16 +msgid "adding a function - click to view" +msgstr "añadir una función - clic para ver" + +#: app/templates/help/function-help.htm:16 app/templates/help/graph-tab-help.htm:112 app/templates/help/permissions-tab-help.htm:47 app/templates/help/rdm-help.htm:33 app/templates/help/rdm-help.htm:47 app/templates/help/rdm-help.htm:61 app/templates/help/rdm-help.htm:75 app/templates/help/rdm-help.htm:89 +#: app/templates/help/resource-editor-help.htm:18 app/templates/help/resource-editor-help.htm:31 app/templates/help/resource-editor-help.htm:53 app/templates/help/search-help.htm:8 app/templates/help/search-help.htm:30 app/templates/help/search-help.htm:39 app/templates/help/search-help.htm:49 app/templates/help/search-help.htm:65 +#: app/templates/help/search-help.htm:88 +msgid "open in new tab" +msgstr "abrir en una nueva pestaña" + +#: app/templates/help/function-help.htm:19 +#, python-format +msgid "" +"\n" +"

Arches comes with three default functions (see below). However, functions are envisioned as the hook through which developers can easily customize Arches capabilities, because new Functions can be added to your individual Arches installation. Learn more here.

\n" +" " +msgstr "" +"\n" +"

Arches viene con tres funciones predeterminadas (ver más abajo). Sin embargo, las funciones se imaginan como el gancho a través del cual los desarrolladores pueden personalizar fácilmente las capacidades de Arches, porque se pueden agregar nuevas funciones a su instalación individual de Arches. Obtenga más información aquí .

" + +#: app/templates/help/function-help.htm:26 +msgid "Define Resource Descriptors" +msgstr "Definir descriptores de recursos" + +#: app/templates/help/function-help.htm:31 +msgid "This function will generate one or more descriptors for Resources that are created with this Resource Model. These descriptors are used throughout the database interface, but are not saved as part of the resource. This gives you control over the way Resources are identified and described in search results and elsewhere." +msgstr "" +"Esta función generará uno o más descriptores para los recursos que se crean con este modelo de recursos. Estos descriptores se utilizan en toda la interfaz de la base de datos, pero no se guardan como parte del recurso.Esto le da control sobre la forma en que se identifican y describen los recursos en los resultados de búsqueda y en " +"otros lugares." + +#: app/templates/help/function-help.htm:32 +msgid "" +"Once added to the Resource Model, use the appropriate tab to configure a descriptor template. Choose a card, and variables corresponding to each node in that card will be added to the template, demarcated with < >. You can rearrange these variables and add text to customize the descriptor. When you have set the " +"descriptors, click Re-Index to update any existing resources in your database." +msgstr "" +"Una vez agregado al modelo de recursos, use la pestaña apropiada para configurar una plantilla de descriptor. Elija una tarjeta, y las variables correspondientes a cada nodo en esa tarjeta se agregarán a la plantilla, demarcadas con & lt;& gt; .Puede reorganizar estas variables y agregar texto para personalizar el " +"descriptor. Cuando haya establecido los descriptores, haga clic en reindexar para actualizar los recursos existentes en su base de datos." + +#: app/templates/help/function-help.htm:33 +msgid "If there are multiple instances of a given card in a Resource, the first one added will be used to create these descriptors. To manually change this, edit the Resource in question and drag the desired tile to the top of the list." +msgstr "Si hay múltiples instancias de una tarjeta determinada en un recurso, el primero agregado se utilizará para crear estos descriptores.Para cambiar esto manualmente, edite el recurso en cuestión y arrastre el mosaico deseado a la parte superior de la lista." + +#: app/templates/help/function-help.htm:34 +msgid "Any user with read access permission to a resource will be seeing these resource descriptors wherever it shows up in search results or on the map. If a card is intended to be hidden from any group of users, it should not be used in this function." +msgstr "Cualquier usuario con permiso de acceso de lectura a un recurso verá estos descriptores de recursos donde sea que aparezca en los resultados de búsqueda o en el mapa. Si una tarjeta está destinada a estar oculta de cualquier grupo de usuarios, no debe usarse en esta función. " + +#: app/templates/help/function-help.htm:36 +msgid "" +"\n" +"
Example
\n" +"

Consider a Resource where the Name node value is Folsom School and Name Type node value is Primary.

\n" +"

Selecting the Name card will populate the template with <Name Type>, <Name>. The resulting descriptor would read Primary, Folsom School. Changing the template to Building Name: <Name> would yield Building Name: Folsom School.

\n" +" " +msgstr "" +"\n" +"
Ejemplo
\n" +"

Considere un Recurso donde el valor del nodo Nombre es Escuela Folsom y el valor del nodo Tipo de Nombre es Primaria.

\n" +"

Seleccionando la tarjeta Nombre se rellenará la plantilla con <Tipo de Nombre>, <Nombre>. El descriptor resultante sería Primary, Folsom School. Cambiando la plantilla a Nombre del Edificio: <Nombre> se obtendría Nombre del " +"Edificio: Escuela Folsom.

\n" +" " + +#: app/templates/help/graph-tab-help.htm:6 +msgid "Graph Tab" +msgstr "Pestaña gráfica" + +#: app/templates/help/graph-tab-help.htm:14 +msgid "In this tab you will design the graph—the core of a Resource Model or Branch. In fact, sometimes Resource Models and Branches are generically referred to as \"graphs\"." +msgstr "En esta pestaña, diseñará el graph— el núcleo de un modelo o rama de recursos. Dé hecho, a veces los modelos y ramas de recursos se conocen genéricamente como \"grafos\"." + +#: app/templates/help/graph-tab-help.htm:15 +msgid "" +"For the first step in building a graph, you should fill out the top-level settings. Some of these may be changed later while others can't, so make sure to do a lot of testing while developing a graph. With the top-level settings in place, it's time to construct the graph by adding nodes (or full " +"Branches) to the graph tree. Along the way, you'll need to set the node-level settings for each node you create." +msgstr "" +"Para el primer paso en la construcción de un grafo, debe completar la configuración de nivel superior .Algunos de estos pueden cambiarse más tarde, mientras que otros no pueden, así que asegúrese de hacer muchas pruebas mientras desarrolla un grafo.Con la configuración de nivel superior en su lugar, es hora de " +" construir el grafo agregando nodos (o ramas completas) al árbol grafo.En el camino, deberá establecer la configuración de nivel de nodo para cada nodo que cree." + +#: app/templates/help/graph-tab-help.htm:16 +msgid "Once you've finished creating this Resource Model or Branch make sure to set its status to \"active\"." +msgstr "Una vez que haya terminado de crear este modelo o rama de recursos, asegúrese de establecer su estado en \"activo\"." + +#: app/templates/help/graph-tab-help.htm:21 +msgid "Top-Level Settings" +msgstr "Configuración de nivel superior" + +#: app/templates/help/graph-tab-help.htm:25 app/templates/views/rdm/concept-report.htm:269 app/templates/views/rdm/entitytype-report.htm:160 +msgid "Identifiers" +msgstr "Identificadores" + +#: app/templates/help/graph-tab-help.htm:28 app/templates/javascript.htm:339 app/templates/views/graph/graph-designer/graph-settings.htm:31 app/templates/views/graph/graph-designer/graph-settings.htm:36 +msgid "Name" +msgstr "Nombre" + +#: app/templates/help/graph-tab-help.htm:29 +msgid "Used to identify this Resource Model throughout the app interface. Default is New Resource Model." +msgstr "Utilizado para identificar este modelo de recursos en toda la interfaz de la aplicación.El valor predeterminado es el nuevo modelo de recursos." + +#: app/templates/help/graph-tab-help.htm:33 +msgid "Optional subtitle, displayed on the Arches Designer home page." +msgstr "Subtítulo opcional, que se muestra en la página de inicio del diseñador de Arches." + +#: app/templates/help/graph-tab-help.htm:36 app/templates/views/graph/graph-designer/graph-settings.htm:56 +msgid "Ontology" +msgstr "Ontología" + +#: app/templates/help/graph-tab-help.htm:37 +msgid "" +"Decide whether an ontology will be enforced in this graph. To learn more about what this means, read Ontologies in Arches. By default, you are allowed to choose between using the CIDOC CRM v6.2, or using no ontology. Once a node or branch has " +"been added to this graph the Ontology setting cannot be modified." +msgstr "" +"Decide si se aplicará una ontología en este grafo. Para obtener más información sobre lo que esto significa, lea ontologías en arches .Por defecto, puede elegir entre usar el CIDOC CRM V6.2, o no usar ontología. Una vez que se ha agregado un " +"nodo o rama a este grafo, la configuración ontología no se puede modificar ." + +#: app/templates/help/graph-tab-help.htm:40 app/templates/views/graph/graph-designer/graph-settings.htm:68 +msgid "Root Class" +msgstr "Clase de raíz" + +#: app/templates/help/graph-tab-help.htm:41 +msgid "This setting is only necessary if an \"Ontology\" has been chosen. Define the ontology class of the root node for this graph." +msgstr "Esta configuración solo es necesaria si se ha elegido una \"ontología\". Defina la clase de ontología del nodo raíz para este grafo." + +#: app/templates/help/graph-tab-help.htm:44 app/templates/views/graph/graph-designer/graph-settings.htm:80 +msgid "Configuration" +msgstr "Configuración" + +#: app/templates/help/graph-tab-help.htm:47 +msgid "Status" +msgstr "Estado" + +#: app/templates/help/graph-tab-help.htm:48 +msgid "Set to \"inactive\" to disallow use of this graph during development. Inactive Resource Models cannot be used to create new resources, and inactive Branches can not be added to a Resource Model." +msgstr "Establecer en \"inactivo\" para no permitir el uso de este grafo durante el desarrollo. Los modelos de recursos inactivos no se pueden utilizar para crear nuevos recursos, y las ramas inactivas no se pueden agregar a un modelo de recursos." + +#: app/templates/help/graph-tab-help.htm:52 +msgid "Resource models that may be related" +msgstr "Modelos de recursos que pueden estar relacionados" + +#: app/templates/help/graph-tab-help.htm:53 +msgid "Choose which Resource Models can be related to this one with resource-to-resource relationships." +msgstr "Elija qué modelos de recursos pueden estar relacionados con este con relaciones de recursos a recursos." + +#: app/templates/help/graph-tab-help.htm:58 app/templates/views/graph/graph-designer/graph-settings.htm:89 +msgid "Root Node Data Type" +msgstr "Tipo de datos de nodo raíz" + +#: app/templates/help/graph-tab-help.htm:59 +msgid "Choose what data type to use for the root node of this Branch." +msgstr "Elija qué tipo de datos usar para el nodo raíz de esta rama." + +#: app/templates/help/graph-tab-help.htm:63 app/templates/javascript.htm:636 app/templates/javascript.htm:644 app/templates/views/graph/graph-designer/graph-settings.htm:158 app/templates/views/graph/graph-designer/node-form.htm:123 +msgid "Description" +msgstr "Descripción" + +#: app/templates/help/graph-tab-help.htm:66 app/templates/views/graph/graph-designer/graph-settings.htm:165 +msgid "Author" +msgstr "Autor" + +#: app/templates/help/graph-tab-help.htm:67 +msgid "You can optionally add an Author to this graph. Only administrators will see this information." +msgstr "Opcionalmente, puede agregar un autor a este grafo. Solo los administradores verán esta información." + +#: app/templates/help/graph-tab-help.htm:70 app/templates/views/graph/graph-designer/graph-settings.htm:177 +msgid "Abstract" +msgstr "Resumen" + +#: app/templates/help/graph-tab-help.htm:71 +msgid "You can optionally add an Abstract to this graph." +msgstr "Opcionalmente, puede agregar un Resumen a este grafo." + +#: app/templates/help/graph-tab-help.htm:71 +msgid "Users will see this abstract when they are presented with a choice of what Resource Model to use to create a new resource." +msgstr "Los usuarios verán este resumen cuando se les presente la opción de qué modelo de recursos usar para crear un nuevo recurso." + +#: app/templates/help/graph-tab-help.htm:71 +msgid "This abstract will be shown in the Branch Library which is used during graph construction." +msgstr "Este resumen se mostrará en la biblioteca de ramas que se utiliza durante la construcción de grafos." + +#: app/templates/help/graph-tab-help.htm:75 app/templates/views/graph/graph-designer/graph-settings.htm:189 +msgid "JSON-LD Context" +msgstr "Contexto de JSON-LD" + +#: app/templates/help/graph-tab-help.htm:76 +msgid "" +"Add a JSON-LD Context for this Resource Model. This allows you to namespace common URI endpoints that are used within a JSON-LD output of the resource. You can enter a plain URL (\"http://www.cidoc-crm.org/cidoc-crm/\"), or JSON that defines multiple keys ({\"crm\":" +"\"http://www.cidoc-crm.org/cidoc-crm/\",\"rdf\":\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"})." +msgstr "" +"Agregue un contexto json-ld para este modelo de recursos. Esto le permite los puntos finales URI comunes del espacio de nombres que se utilizan dentro de una salida JSON-LD del recurso. Puede ingresar una URL simple ( \"http://www.cidoc-crm.org/cidoc-crm/\" ), o JSON que " +"define múltiples claves ( {\"CRM\": \"http://www.cidoc-crm.org/cidoc-crm/\",\"rdf\":\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"h} )." + +#: app/templates/help/graph-tab-help.htm:80 app/templates/views/graph/graph-designer/graph-settings.htm:212 +msgid "Appearance" +msgstr "Apariencia" + +#: app/templates/help/graph-tab-help.htm:84 app/templates/javascript.htm:599 app/templates/views/graph/graph-designer/graph-settings.htm:221 +msgid "Color" +msgstr "Color" + +#: app/templates/help/graph-tab-help.htm:85 +msgid "Choose a color for this Resource Model to be used in the related resources force directed graph." +msgstr "Elija un color para este modelo de recursos que se utilizará en el grafo dirigido por la fuerza de recursos relacionados." + +#: app/templates/help/graph-tab-help.htm:89 +msgid "Icon" +msgstr "Icono" + +#: app/templates/help/graph-tab-help.htm:90 +msgid "Choose an icon to identify this graph throughout the app interface. You can browse the icons to select one, or type in the search bar to filter them. Arches uses the Font Awesome icon library; custom icons are not supported." +msgstr "" +"Elija un icono para identificar este grafo en toda la interfaz de la aplicación. Puede navegar por los iconos para seleccionar uno o escribir la barra de búsqueda para filtrarlos. Arches utiliza font impresionante biblioteca de iconos; Los iconos personalizados no son " +"compatibles." + +#: app/templates/help/graph-tab-help.htm:98 +msgid "Construct the Graph" +msgstr "Construir el grafo" + +#: app/templates/help/graph-tab-help.htm:102 +msgid "" +"Use the graph tree on the left side of the page to construct the graph. Every new graph starts with a Top Node, which will take the name of the new Resource Model or Branch. From this node, you can either Add Child Node to add a single node, or Add Branch to add an entire existing " +"Branch." +msgstr "" +"Use el árbol de grafos en el lado izquierdo de la página para construir el grafo. Cada nuevo grafo comienza con un nodo superior , que tomará el nombre del nuevo modelo o rama de recursos. Desde este nodo, puede agregar nodo infantil para agregar un solo nodo, o agregar rama para agregar " +"una rama existente completa." + +#: app/templates/help/graph-tab-help.htm:103 +msgid "At any point during construction you can switch from Design mode to Preview to see the full shape of your graph." +msgstr "En cualquier momento durante la construcción, puede cambiar de modo Design a Vista previa para ver la forma completa de su grafo." + +#: app/templates/help/graph-tab-help.htm:104 +msgid "If you have created a branch structure in a Resource Model that you would like to use in a different Resource Model, you can export it from the graph tree." +msgstr "Si ha creado una estructura de rama en un modelo de recursos que le gustaría usar en un modelo de recursos diferente, puede exportarla desde el árbol de grafos." + +#: app/templates/help/graph-tab-help.htm:110 app/templates/help/permissions-tab-help.htm:45 +msgid "add a node and branch to new graph - click to view" +msgstr "añadir un nodo y una rama a un nuevo grafo - click to view" + +#: app/templates/help/graph-tab-help.htm:122 +msgid "Node-Level Settings" +msgstr "Configuración de nivel de nodo" + +#: app/templates/help/graph-tab-help.htm:126 app/templates/views/graph/graph-designer/node-form.htm:28 +msgid "Node Identifiers" +msgstr "Identificadores de nodo" + +#: app/templates/help/graph-tab-help.htm:129 app/templates/views/graph/graph-designer/node-form.htm:40 +msgid "Node Name" +msgstr "Nombre de nodo" + +#: app/templates/help/graph-tab-help.htm:130 +msgid "Set the name for this node. This will be used by default in the user interface, but a different name for display can be configured at the widget level." +msgstr "Establezca el nombre de este nodo.Esto se utilizará de forma predeterminada en la interfaz de usuario, pero un nombre diferente para la pantalla se puede configurar en el nivel de widget." + +#: app/templates/help/graph-tab-help.htm:133 app/templates/views/graph/graph-designer/node-form.htm:85 +msgid "Ontology Class" +msgstr "Clase de ontología" + +#: app/templates/help/graph-tab-help.htm:134 +msgid "only present if this graph uses an ontology" +msgstr "solo presente si este grafo usa una ontología" + +#: app/templates/help/graph-tab-help.htm:134 +msgid "This setting assigns an ontological class to this node. To learn more, read Ontologies in Arches" +msgstr "Esta configuración asigna una clase ontológica a este nodo.Para obtener más información, lea ontologías en arches " + +#: app/templates/help/graph-tab-help.htm:137 +msgid "Relationship to..." +msgstr "Relación con ..." + +#: app/templates/help/graph-tab-help.htm:138 +msgid "Define what relationship this node has with its parent node (the one directly above it in the graph tree). A verbalization of your choice is shown in the Semantics section below this setting." +msgstr "Defina qué relación tiene este nodo con su nodo principal (el directamente encima de él en el árbol de grafos).Una verbalización de su elección se muestra en la sección semántica debajo de esta configuración." + +#: app/templates/help/graph-tab-help.htm:141 +msgid "Node Data Type and Settings" +msgstr "Tipo de datos de nodo y configuración" + +#: app/templates/help/graph-tab-help.htm:142 +msgid "Depending on which data type you choose, you may have many more settings to fill out. Those listed below will be present for every node no matter the data type." +msgstr "Dependiendo del tipo de datos que elija, es posible que tenga muchas más configuraciones para completar.Los que se enumeran a continuación estarán presentes para cada nodo sin importar el tipo de datos." + +#: app/templates/help/graph-tab-help.htm:145 app/templates/views/graph/graph-designer/node-form.htm:144 +msgid "Data type" +msgstr "Tipo de datos" + +#: app/templates/help/graph-tab-help.htm:146 +msgid "Choose the data type for this node. Please see the Default Data Types section below. Once data is collected for this node, this setting cannot be changed." +msgstr "Elija el tipo de datos para este nodo. Consulte la sección Tipos de datos predeterminados a continuación. Una vez que se recopilan los datos para este nodo, esta configuración no se puede cambiar." + +#: app/templates/help/graph-tab-help.htm:149 app/templates/views/graph/graph-designer/node-form.htm:183 +msgid "Expose to Advanced Search" +msgstr "Exponer a la búsqueda avanzada" + +#: app/templates/help/graph-tab-help.htm:150 +msgid "If true users will be able to add this node to an Advanced Search query." +msgstr "Si los usuarios verdaderos podrán agregar este nodo a una consulta de búsqueda avanzada." + +#: app/templates/help/graph-tab-help.htm:153 app/templates/views/graph/graph-designer/node-form.htm:203 app/templates/views/graph/graph-designer/widget-configuration.htm:63 +msgid "Required" +msgstr "Requerido" + +#: app/templates/help/graph-tab-help.htm:154 +msgid "If true a value must be entered for this node in order to save it. Once data is collected for this node, this setting cannot be changed." +msgstr "Si es verdadero, se debe ingresar un valor para este nodo para guardarlo. Una vez que se recopilan los datos para este nodo, esta configuración no se puede cambiar." + +#: app/templates/help/graph-tab-help.htm:157 +msgid "Place node(s) in a separate card" +msgstr "Colocar nodo (s) en una tarjeta separada" + +#: app/templates/help/graph-tab-help.htm:158 +msgid "only present if this node is not already the top node for a card" +msgstr "solo presente si este nodo aún no es el nodo superior para una tarjeta" + +#: app/templates/help/graph-tab-help.htm:158 +msgid "If true this node will be set in a different card from its parent. This affects data entry, and you are encouraged to test both states of this setting while building you graph. Once data is collected for this node, this setting cannot be changed." +msgstr "Si es cierto, este nodo se establecerá en una tarjeta diferente de su padre. Esto afecta la entrada de datos, y se le recomienda probar ambos estados de esta configuración mientras construye su grafo. Una vez que se recopilan los datos para este nodo, esta configuración no se puede cambiar." + +#: app/templates/help/graph-tab-help.htm:165 +msgid "Default Data Types" +msgstr "Tipos de datos predeterminados" + +#: app/templates/help/graph-tab-help.htm:169 +msgid "The data type of a node determines what kind of data that node will store. Once chosen, some data types will require further configuration." +msgstr "El tipo de datos de un nodo determina qué tipo de datos almacenará ese nodo. Una vez elegido, algunos tipos de datos requerirán una configuración adicional." + +#: app/templates/help/graph-tab-help.htm:170 +msgid "Developers can create new datatypes." +msgstr "Los desarrolladores pueden crea nuevos tipos de datos ." + +#: app/templates/help/graph-tab-help.htm:173 +msgid "boolean" +msgstr "booleano" + +#: app/templates/help/graph-tab-help.htm:174 +msgid "Use this to store a \"yes\"/\"no\" or \"true\"/\"false\" value." +msgstr "Use esto para almacenar un valor \"sí\"/\"no\" o \"verdadero\"/\"falso\"." + +#: app/templates/help/graph-tab-help.htm:177 +msgid "concept" +msgstr "concepto" + +#: app/templates/help/graph-tab-help.htm:178 +msgid "Stores one of a series of concepts from the Reference Data Manager. Users will choose a concept in a dropdown list or set of radio buttons. You'll further be prompted to choose a Concept Collection—this controls which concepts the user is able to choose from." +msgstr "Almacena uno de una serie de conceptos del Administrador de datos de referencia. Los usuarios elegirán un concepto en una lista desplegable o un conjunto de botones de radio. Además, se le pedirá que elija una Colección de Conceptos — esto controla qué conceptos el usuario puede elegir." + +#: app/templates/help/graph-tab-help.htm:181 +msgid "concept-list" +msgstr "lista de conceptos" + +#: app/templates/help/graph-tab-help.htm:182 +msgid "Stores multiple concepts in a single node." +msgstr "Almacena múltiples conceptos en un solo nodo." + +#: app/templates/help/graph-tab-help.htm:185 +msgid "date" +msgstr "fecha" + +#: app/templates/help/graph-tab-help.htm:186 +msgid "Stores a CE calendar date. See etdf for BCE and fuzzy date handling." +msgstr "Almacena una fecha del calendario CE. Vea ETDF para BCE y Fuzzy Date Manning." + +#: app/templates/help/graph-tab-help.htm:189 +msgid "edtf" +msgstr "edtf" + +#: app/templates/help/graph-tab-help.htm:190 +msgid "" +"Stores an Extended Date/Time Format value. Use this data type for BCE dates or dates with uncertainty. This datatype requires extra configuration to inform the database search methods how to interpret EDTF values. Data entry users can enter edtf dates using formats " +"listed in the EDTF draft specification." +msgstr "" +"Almacena un valor de fecha/hora extendida valor.Use este tipo de datos para fechas o fechas de BCE con incertidumbre.Este tipo de datos requiere una configuración adicional para informar los métodos de búsqueda de la base de datos sobre cómo interpretar los valores " +"EDTF.Los usuarios de entrada de datos pueden ingresar fechas de EDTF utilizando formatos enumerados en EDTF borrador de especificación ." + +#: app/templates/help/graph-tab-help.htm:193 +msgid "file-list" +msgstr "lista de archivos" + +#: app/templates/help/graph-tab-help.htm:194 +msgid "Stores one or mores files. Use this to upload images, documents, etc." +msgstr "Almacena archivos de uno o coros.Use esto para cargar imágenes, documentos, etc." + +#: app/templates/help/graph-tab-help.htm:197 +msgid "iiif-drawing" +msgstr "dibujos IIIF" + +#: app/templates/help/graph-tab-help.htm:198 +msgid "Used to store an IIIF compliant image." +msgstr "Se usa para almacenar un IIIF Compliant Imagen." + +#: app/templates/help/graph-tab-help.htm:201 +msgid "geojson-feature-collection" +msgstr "recolección de fábrica de geojson" + +#: app/templates/help/graph-tab-help.htm:202 +msgid "Stores geographic coordinates, and is used to show a resource on the map." +msgstr "Almacena coordenadas geográficas, y se utiliza para mostrar un recurso en el mapa." + +#: app/templates/help/graph-tab-help.htm:205 +msgid "domain-value" +msgstr "valor de dominio" + +#: app/templates/help/graph-tab-help.htm:206 +msgid "Similar to \"concept\", choose this to present the user with a dropdown list or set of radio buttons. Unlike \"concept\" this dropdown menu will not come from your system-wide controlled vocubulary, but from a list of values that you must define here." +msgstr "Similar al \"concepto\", elija esto para presentar al usuario una lista desplegable o un conjunto de botones de radio. A diferencia de \"concepto\", este menú desplegable no provendrá de su vocabulario controlado en todo el sistema, sino de una lista de valores que debe definir aquí." + +#: app/templates/help/graph-tab-help.htm:209 +msgid "domain-value-list" +msgstr "lista de valor de dominio" + +#: app/templates/help/graph-tab-help.htm:210 +msgid "Stores multiple domain-values in a single node." +msgstr "Almacena múltiples valores de dominio en un solo nodo." + +#: app/templates/help/graph-tab-help.htm:213 +msgid "csv-chart-json" +msgstr "csv Chart-Json" + +#: app/templates/help/graph-tab-help.htm:214 +msgid "Stores a csv chart formatted as JSON." +msgstr "Almacena un grafo de CSV formateado como JSON." + +#: app/templates/help/graph-tab-help.htm:217 +msgid "node-value" +msgstr "nodo" + +#: app/templates/help/graph-tab-help.htm:218 +msgid "Stores a reference to a different node in this graph. This would allow you to store duplicate data in more than one branch." +msgstr "Almacena una referencia a un nodo diferente en este grafo. Esto le permitiría almacenar datos duplicados en más de una rama." + +#: app/templates/help/graph-tab-help.htm:221 +msgid "number" +msgstr "número" + +#: app/templates/help/graph-tab-help.htm:222 +msgid "Stores a number." +msgstr "Almacena un número." + +#: app/templates/help/graph-tab-help.htm:225 +msgid "resource-instance" +msgstr "instancia de recursos" + +#: app/templates/help/graph-tab-help.htm:226 +msgid "" +"Embeds a separate resource instance into this node. For example, you could add a node called \"Assessed By\" to a condition assessment branch, and use this data type. This would allow you to associate an individual stored in your database as an Actor resource with a specific condition assessment. Note that this construction is different " +"from making a \"resource-to-resource relationship\". " +msgstr "" +"Incrusta una instancia de recurso separada en este nodo. Por ejemplo, puede agregar un nodo llamado \"evaluado por\" a una rama de evaluación de condición y usar este tipo de datos. Esto le permitiría asociar a un individuo almacenado en su base de datos como un recurso actor con una evaluación de condición específica. Tenga en cuenta " +"que esta construcción es diferente de hacer una \"relación de recurso a recursos\". " + +#: app/templates/help/graph-tab-help.htm:229 +msgid "resource-instance-list" +msgstr "lista de recursos" + +#: app/templates/help/graph-tab-help.htm:230 +msgid "Stores a list of resource instances in a single node." +msgstr "Almacena una lista de instancias de recursos en un solo nodo." + +#: app/templates/help/graph-tab-help.htm:233 +msgid "semantic" +msgstr "semantica" + +#: app/templates/help/graph-tab-help.htm:234 +msgid "A semantic node does not store data. Semantic nodes are used where necessary to make symbolic connections between other nodes, generally in order to follow ontological rules. The top node of every graph is a semantic node." +msgstr " Un nodo semántico no almacena datos. Los nodos semánticos se usan cuando sea necesario para hacer conexiones simbólicas entre otros nodos, generalmente para seguir las reglas ontológicas. El nodo superior de cada grafo es un nodo semántico." + +#: app/templates/help/graph-tab-help.htm:237 +msgid "string" +msgstr "cadena" + +#: app/templates/help/graph-tab-help.htm:238 +msgid "Stores a string of text. This could be something simple like a name, or more something elaborate like a descriptive paragraph with formatting and hyperlinks." +msgstr "Almacena una cadena de texto. Esto podría ser algo simple como un nombre, o algo más elaborado como un párrafo descriptivo con formato e hipervínculos." + +#: app/templates/help/map-manager-help.htm:6 +msgid "" +"\n" +"

Three categories of Map Layers will appear on your map: Resource Layers (the contents of your database), Basemaps (static background layers), and Overlays (custom data layers from outside your database). To configure a layer, first select its category in the top bar, and then " +"choose it from the list at left.

\n" +" " +msgstr "" +"\n" +"

En su mapa aparecerán tres categorías de capas de mapa: Capas de recursos (el contenido de su base de datos), Mapas base (capas de fondo estáticas) y Capas superpuestas (capas de datos personalizadas externas a su base de datos). Para configurar una capa, seleccione primero " +"su categoría en la barra superior y, a continuación, elíjala en la lista de la izquierda.

\n" +" " + +#: app/templates/help/map-manager-help.htm:13 +msgid "Resource Layers display the resource layers in your database. One Resource Layer is created for each node with a geospatial datatype (for example, geojson-feature-collection). You are able to customize the appearance and visibility of each Resource Layer in the following ways." +msgstr "Las capas de recursos muestran las capas de recursos en su base de datos. Se crea una capa de recursos para cada nodo con un tipo de datos geoespacial (por ejemplo, GeoJson-Feature-Collection ). Puede personalizar la apariencia y la visibilidad de cada capa de recursos de las siguientes maneras." + +#: app/templates/help/map-manager-help.htm:14 app/templates/help/map-manager-help.htm:34 app/templates/help/map-manager-help.htm:49 app/templates/javascript.htm:588 app/templates/views/map-layer-manager.htm:186 +msgid "Service Styling" +msgstr "Estilo de servicio" + +#: app/templates/help/map-manager-help.htm:15 +msgid "" +"Define the way features will look on the map. The example map has demonstration features that give you a preview of the changes you make. You can choose to use Advanced Editing to create a more nuanced style. Note that changes made in Advanced Editing will not be reflected if you switch back to basic editing. For " +"styling reference, checkout the MapBox Style Specification." +msgstr "" +"Defina la forma en que se verán las características en el mapa.El mapa de ejemplo tiene características de demostración que le brindan una vista previa de los cambios que realiza.Puede elegir usar edición avanzada para crear un estilo más matizado.Tenga en cuenta que los cambios realizados en la edición avanzada no se " +"reflejarán si vuelve a volver a la edición básica.Para una referencia de estilo, consulte el especificación de estilo de mapbox ." + +#: app/templates/help/map-manager-help.htm:16 app/templates/help/map-manager-help.htm:36 app/templates/help/map-manager-help.htm:51 app/templates/javascript.htm:395 app/templates/views/graph/graph-designer/card-configuration.htm:70 app/templates/views/map-layer-manager.htm:183 +msgid "Settings" +msgstr "Ajustes" + +#: app/templates/help/map-manager-help.htm:17 +msgid "You can change the name of this overlay if desired; by default it will use the name of its Resource Model. You make also set the layer to be added to the search map by default, or choose a custom icon for it." +msgstr "Puede cambiar el nombre de esta superposición si lo desea;Por defecto, usará el nombre de su modelo de recursos.También hace que establezca la capa que se agregará al mapa de búsqueda de forma predeterminada, o elija un icono personalizado para ella." + +#: app/templates/help/map-manager-help.htm:18 app/templates/javascript.htm:590 +msgid "Clustering" +msgstr "Agrupación" + +#: app/templates/help/map-manager-help.htm:19 +msgid "Arches uses 'clustering' to better display resources at low zoom levels (zoomed out). You are able to control the clustering settings for each layer individually." +msgstr "Arches utiliza 'clúster' para mostrar mejor recursos a niveles bajos de zoom (zoom). Puede controlar la configuración de agrupación para cada capa individualmente." + +#: app/templates/help/map-manager-help.htm:21 +msgid "Cluster Distance - distance (in pixels) within which resources will be clustered" +msgstr " distancia de clúster - distancia (en píxeles) dentro del cual se agruparán los recursos" + +#: app/templates/help/map-manager-help.htm:22 +msgid "Cluster Max Zoom - zoom level after which clustering will stop being used" +msgstr " clúster max zoom - nivel de zoom después del cual la agrupación se utilizará detener " + +#: app/templates/help/map-manager-help.htm:23 +msgid "Cluster Min Points - minimum number of points needed to create a cluster" +msgstr " Puntos mínimos de clúster - número mínimo de puntos necesarios para crear un clúster" + +#: app/templates/help/map-manager-help.htm:25 app/templates/javascript.htm:207 app/templates/javascript.htm:589 app/templates/views/graph-designer.htm:212 app/templates/views/graph/graph-designer/permission-settings-form.htm:10 app/templates/views/graph/graph-designer/permission-settings-form.htm:57 +msgid "Permissions" +msgstr "Permisos" + +#: app/templates/help/map-manager-help.htm:26 +msgid "This tab shows the permissions for the nodegroup whose geometry is displayed in this Resource Layer. Permissions are defined in the Graph Designer." +msgstr "Esta pestaña muestra los permisos para el NodeGroup cuya geometría se muestra en esta capa de recursos. Los permisos se definen en el diseñador de grafos." + +#: app/templates/help/map-manager-help.htm:33 +msgid "A Basemap will always be present in your map. Arches comes with a few default basemaps, but advanced users are able to add more. Once added, there are few ways to configure each basemap." +msgstr "Un mapa base siempre estará presente en su mapa. Arches viene con algunos mapeos de base predeterminados, pero los usuarios avanzados pueden agregar más. Una vez agregado, hay pocas formas de configurar cada mapa base." + +#: app/templates/help/map-manager-help.htm:35 +msgid "Define a style for this basemap. Note that depending on the type of layer, there are different styling options. For styling reference, checkout the MapBox Style Specification." +msgstr "Defina un estilo para este mapa base. Tenga en cuenta que dependiendo del tipo de capa, existen diferentes opciones de estilo. Para una referencia de estilo, consulte el especificación de estilo de mapbox ." + +#: app/templates/help/map-manager-help.htm:38 +msgid "Layer name - enter a name to identify this basemap" +msgstr " nombre de capa : ingrese un nombre para identificar este mapa base" + +#: app/templates/help/map-manager-help.htm:39 +msgid "Default search map - choose this layer to be the default basemap" +msgstr " Mapa de búsqueda predeterminado : elija esta capa para ser el mapa base predeterminado" + +#: app/templates/help/map-manager-help.htm:40 app/templates/help/map-manager-help.htm:55 +msgid "Layer icon - associate an icon with this layer" +msgstr " icono de capa : asocie un icono con esta capa" + +#: app/templates/help/map-manager-help.htm:48 +msgid "Overlays allow you to incorporate map layers from external sources. Note that Search Results and Search Markets are treated as overlays, and can be customize separately. New overlays can be added with a little behind-the-scenes work. Once added, there are few ways to configure each overlay." +msgstr "" +"Las superposiciones le permiten incorporar capas de mapas de fuentes externas.Tenga en cuenta que los resultados de búsqueda y los mercados de búsqueda se tratan como superposiciones y se pueden personalizar por separado.Se pueden agregar nuevas superposiciones con un poco de trabajo detrás de escena.Una vez agregado, hay pocas formas " +"de configurar cada superposición." + +#: app/templates/help/map-manager-help.htm:50 +msgid "Define a style for this overlay. Note that depending on the type of layer, there are different styling options. For styling reference, checkout the MapBox Style Specification." +msgstr "Defina un estilo para esta superposición. Tenga en cuenta que dependiendo del tipo de capa, existen diferentes opciones de estilo. Para una referencia de estilo, consulte el especificación de estilo de mapbox ." + +#: app/templates/help/map-manager-help.htm:53 +msgid "Layer name - enter a name to identify this overlay" +msgstr " nombre de capa : ingrese un nombre para identificar esta superposición" + +#: app/templates/help/map-manager-help.htm:54 +msgid "Default search map - choose whether this overlay should be shown in the search map by default. Note that in the search map itself you can change the order of the layers." +msgstr " Mapa de búsqueda predeterminado : elija si esta superposición debe mostrarse en el mapa de búsqueda de forma predeterminada. Tenga en cuenta que en el mapa de búsqueda en sí puede cambiar el orden de las capas." + +#: app/templates/help/permissions-tab-help.htm:6 +msgid "Permissions Tab" +msgstr "Pestaña de permisos" + +#: app/templates/help/permissions-tab-help.htm:14 +msgid "Arches allows you to define user and user group permissions on a per-nodegroup basis. For example, you may want to hide the coordinates of a Resource from the public, or allow a certain group of users to only update the condition assessment section of a Resource Model. Rules like these are all enforced using permissions." +msgstr "" +"Arches le permite definir los permisos de usuarios y grupos de usuarios por nodegroup. Por ejemplo, es posible que desee ocultar las coordenadas de un recurso del público, o permitir que un cierto grupo de usuarios solo actualice la sección de evaluación de condición de un modelo de recursos. Reglas como estas se aplican todas " +"utilizando permisos." + +#: app/templates/help/permissions-tab-help.htm:15 +msgid "Permissions Levels" +msgstr "Niveles de permisos" + +#: app/templates/help/permissions-tab-help.htm:18 app/templates/javascript.htm:648 app/templates/javascript.htm:756 app/templates/views/components/plugins/workflow.htm:34 app/templates/views/graph/function-manager.htm:121 app/templates/views/rdm/modals/delete-collection-form.htm:44 app/templates/views/rdm/modals/delete-scheme-form.htm:44 +msgid "Delete" +msgstr "Borrar" + +#: app/templates/help/permissions-tab-help.htm:19 +msgid "Allows users to delete instances of this nodegroup. Note, this is not the same as being allowed to delete an entire resource, permissions for which are not handled here." +msgstr "Permite a los usuarios eliminar las instancias de este Node Group. Tenga en cuenta que esto no es lo mismo que se le permite eliminar un recurso completo, los permisos de los cuales no se manejan aquí." + +#: app/templates/help/permissions-tab-help.htm:22 +msgid "No Access" +msgstr "No hay acceso" + +#: app/templates/help/permissions-tab-help.htm:23 +msgid "Disallows users from seeing or editing instances of this nodegroup. Use this permission level to hide sensitive data from non-authenticated users (the public)." +msgstr "No permite a los usuarios ver o editar instancias de este grupo de nodo. Use este nivel de permiso para ocultar datos confidenciales de usuarios no autenticados (el público)." + +#: app/templates/help/permissions-tab-help.htm:26 +msgid "Read" +msgstr "Leer" + +#: app/templates/help/permissions-tab-help.htm:27 +msgid "Allows users to see this nodegroup's card. If disallowed, the card/nodegroup will be hidden from the map and resource reports." +msgstr "Permite a los usuarios ver la tarjeta de este NodeGroup. Si no se permite, la tarjeta/NodeGroup se ocultará del mapa y los informes de recursos." + +#: app/templates/help/permissions-tab-help.htm:30 +msgid "Create/Update" +msgstr "Crear/actualizar" + +#: app/templates/help/permissions-tab-help.htm:31 +msgid "Allows users to create or edit instances of this nodegroup. This provides the ability to let users edit some information about a resource, while be restricted from editing other information." +msgstr "Permite a los usuarios crear o editar instancias de este NodeGroup.Esto proporciona la capacidad de permitir a los usuarios editar alguna información sobre un recurso, mientras que se restringe la edición de otra información." + +#: app/templates/help/permissions-tab-help.htm:34 +msgid "Non-Authenticated Users" +msgstr "Usuarios no Autenticados" + +#: app/templates/help/permissions-tab-help.htm:35 +msgid "" +"You may notice that by default Arches comes with a \"Guest\" group, as well as user named \"anonymous\" who is a member of that group. Any non-authenticated user is treated as the \"anonymous\" user. This means that all permissions applied to the Guest group will be given to anyone who views the website without logging " +"in." +msgstr "" +"Puede notar que, por defecto, Arches viene con un grupo \"invitado\", así como un usuario llamado \"Anónimo\" que es miembro de ese grupo. Cualquier usuario no autenticado es tratado como el usuario \"anónimo\". Esto significa que todos los permisos aplicados al grupo de invitados se darán a cualquier persona que vea " +"el sitio web sin iniciar sesión." + +#: app/templates/help/profile-manager-help.htm:7 +msgid "The profile manager allows you to update your account information, such as your password, at any time." +msgstr "El Administrador de perfil le permite actualizar la información de su cuenta, como su contraseña, en cualquier momento." + +#: app/templates/help/rdm-help.htm:6 +msgid "" +"The Reference Data Management (RDM) enables the creation and maintenance of controlled vocabularies that are used throughout your database. In Arches, controlled vocabularies consist of Concepts, and these Concepts are managed in Thesauri and Collections. In the RDM you can create new Thesauri, create new Concepts, import Concepts from " +"external an endpoint (like the Getty AAT), and -- the ultimate goal -- create Collections, which will be used in your database as data input dropdown lists." +msgstr "" +"La gestión de datos de referencia (RDM) permite la creación y mantenimiento de vocabularios controlados que se utilizan a lo largo de su base de datos.En los arches, los vocabularios controlados consisten en conceptos, y estos conceptos se gestionan en tesauros y colecciones.En el RDM puede crear nuevos tesauros, crear nuevos conceptos, " +"importar conceptos desde un punto final externo (como el Getty AAT) y, el objetivo final, Crear colecciones, que se utilizarán en su base de datos como listas de despido de entrada de datos." + +#: app/templates/help/rdm-help.htm:8 app/templates/javascript.htm:574 app/templates/views/rdm/concept-report.htm:356 +msgid "Concepts" +msgstr "Conceptos" + +#: app/templates/help/rdm-help.htm:10 +msgid "" +"A Concept is a qualitative property that can be attached to a resource, something like \"Stone\" (which may describe a building material) or \"House\" (which may describe a past use for a structure). The advantage of storing these properties as Concepts is that a Concept may have attributes of its own. In the case of \"House\", we could " +"add an alternate label, \"Dwelling\" to that Concept. Then, if a user searches for \"dwelling\", any resource with the \"House\" Concept attached to it will be found." +msgstr "" +"Un concepto es una propiedad cualitativa que se puede adjuntar a un recurso, algo como \"piedra\" (que puede describir un material de construcción) o \"casa\" (que puede describir un uso pasado para una estructura).La ventaja de almacenar estas propiedades como conceptos es que un concepto puede tener atributos propios.En el caso de la " +"\"casa\", podríamos agregar una etiqueta alternativa, \"vivienda\" a ese concepto.Luego, si un usuario busca \"vivienda\", se encontrará cualquier recurso con el concepto de \"casa\" adjunto." + +#: app/templates/help/rdm-help.htm:11 +msgid "Concepts can also be nested, to allow more complex and meaningful relationships between them. For example, \"House\" may appear next to \"School\" within a parent Concept called \"Building Use\"." +msgstr "Los conceptos también pueden estar anidados, para permitir relaciones más complejas y significativas entre ellos.Por ejemplo, la \"casa\" puede aparecer junto a la \"escuela\" dentro de un concepto de padre llamado \"uso de edificios\"." + +#: app/templates/help/rdm-help.htm:15 app/templates/rdm.htm:57 +msgid "Thesauri" +msgstr "Tesauro" + +#: app/templates/help/rdm-help.htm:17 +msgid "A Thesaurus is an entire set of Concepts which can be imported and exported as a whole. You can create as many new Thesauri as you need, or just add new Concepts to the default \"Arches\" Thesaurus. The organization of your Thesauri has no impact on the way Concepts will be exposed to the public or used throughout the app." +msgstr "" +"Un tesauro es un conjunto completo de conceptos que se pueden importar y exportar en su conjunto.Puede crear tantos tesauros nuevos como necesite, o simplemente agregar nuevos conceptos al tesauro de \"arches\" predeterminado.La organización de sus tesauros no tiene impacto en la forma en que los conceptos se expondrán al público o se " +"utilizarán en toda la aplicación." + +#: app/templates/help/rdm-help.htm:21 app/templates/rdm.htm:60 app/templates/views/rdm/concept-report.htm:344 +msgid "Collections" +msgstr "Colecciones" + +#: app/templates/help/rdm-help.htm:23 +msgid "" +"Collections, or Concept Collections as they are sometimes called, are custom aggregations of Concepts that will be used in your app as dropdown lists during the data entry process. Collections allow you to reorganize your Concepts for the specific purpose of data entry, so your dropdown lists do not have to look anything like your " +"Thesaurus. You can create as many Collections as you want, or add new Concepts to existing Collections." +msgstr "" +"Las colecciones, o las colecciones de conceptos, como a veces se les llama, son agregaciones personalizadas de conceptos que se utilizarán en su aplicación como listas desplegables durante el proceso de entrada de datos. Las colecciones le permiten reorganizar sus conceptos con el propósito específico de la entrada de datos, por lo que " +"sus listas desplegables no tienen que parecerse a su tesauro. Puede crear tantas colecciones como desee, o agregar nuevos conceptos a las colecciones existentes." + +#: app/templates/help/rdm-help.htm:27 +msgid "Example - Create a New Thesaurus" +msgstr "Ejemplo: crea un nuevo tesauro" + +#: app/templates/help/rdm-help.htm:29 +msgid "In the video below, a new Thesaurus is created. Once you have made a Thesaurus, you can begin creating a hierarchy of Concepts within it. Remember, the final step will be to make a new Collection and add Concepts to it (from any of your Thesauri)." +msgstr "En el video a continuación, se crea un nuevo tesauro. Una vez que haya hecho un tesauro, puede comenzar a crear una jerarquía de conceptos dentro de él.Recuerde, el paso final será hacer una nueva colección y agregarle conceptos (de cualquier de sus tesauros)." + +#: app/templates/help/rdm-help.htm:31 app/templates/help/rdm-help.htm:45 app/templates/help/rdm-help.htm:59 app/templates/help/rdm-help.htm:73 app/templates/help/rdm-help.htm:87 +msgid "click to view demonstration" +msgstr "haga clic para ver la demostración" + +#: app/templates/help/rdm-help.htm:41 +msgid "Example - Create a Top Concept" +msgstr "Ejemplo: crear un concepto superior" + +#: app/templates/help/rdm-help.htm:43 +msgid "The first level of organization within a Thesaurus is a set of Top Concepts. A Top Concept may be something like \"Architectural Styles\" and its children Concepts will be the actual styles themselves. Below, a new, empty Top Concept is added to an empty Thesaurus." +msgstr "El primer nivel de organización dentro de un tesauro es un conjunto de conceptos principales. Un concepto superior puede ser algo así como \"estilos arquitectónicos\" y los conceptos de sus hijos serán los estilos reales. A continuación, se agrega un nuevo concepto superior vacío a un tesauro vacío." + +#: app/templates/help/rdm-help.htm:55 +msgid "Example - Create New Concepts" +msgstr "Ejemplo: crear nuevos conceptos" + +#: app/templates/help/rdm-help.htm:57 +msgid "To create a new Concept, begin by selecting the Top Concept under which it should be placed. This will bring the details about the Top Concept into the main panel. Use the Manage dropdown to \"Add Child\", type in a label, and select the correct language for the label." +msgstr "Para crear un nuevo concepto, comience seleccionando el concepto superior bajo el cual debe colocarse.Esto traerá los detalles sobre el concepto superior al panel principal.Use el menú desplegable Administrar para \"Agregar niño\", escriba una etiqueta y seleccione el idioma correcto para la etiqueta." + +#: app/templates/help/rdm-help.htm:69 +msgid "Example - Add an Alternate Label to a Concept" +msgstr "Ejemplo: agregue una etiqueta alternativa a un concepto" + +#: app/templates/help/rdm-help.htm:71 +msgid "To improve the searchability of your Concepts, you can add as many alternate labels to each one as you want Below, the label \"Dwelling\" is added to the Concept \"House\". The result is that anyone using \"Dwelling\" as a search term will be shown Resources that have the \"House\" Concept." +msgstr "" +"Para mejorar la capacidad de búsqueda de sus conceptos, puede agregar tantas etiquetas alternativas a cada una como desee a continuación, se agrega la etiqueta \"vivienda\" al concepto \"casa\".El resultado es que cualquier persona que use \"vivienda\" como término de búsqueda se mostrará recursos que tienen el concepto de \"casa\"." + +#: app/templates/help/rdm-help.htm:83 +msgid "Example - Create a Collection" +msgstr "Ejemplo - Crea una colección" + +#: app/templates/help/rdm-help.htm:85 +msgid "" +"Creating a Collection is very similar to creating a Thesaurus. However, you will be adding existing Concepts to a Collection (potentially from more than one Thesaurus) instead of creating new ones. Below, a new Collection is created. To go further, select the Collection, and use the \"Add dropdown entry\" link to add existing Concepts " +"to this Collection. When configuring the Graph for a Branch or Resource Model, you will now be able to add this Concept Collection to a node." +msgstr "" +"Crear una colección es muy similar a la creación de un tesauro.Sin embargo, agregará conceptos existentes a una colección (potencialmente de más de un tesauro) en lugar de crear otros nuevos.A continuación, se crea una nueva colección.Para ir más allá, seleccione la colección y use el enlace \"Agregar entrada desplegable\" para agregar " +"conceptos existentes a esta colección.Al configurar el grafo para una rama o modelo de recursos, ahora podrá agregar esta colección de conceptos a un nodo." + +#: app/templates/help/resource-editor-help.htm:7 +msgid "Creating Resource Data" +msgstr "Creación de datos de recursos" + +#: app/templates/help/resource-editor-help.htm:11 +msgid "The Resource Editor is used to create new or edit existing Resources. What you see on the left-hand side of the page is this Resource's \"card tree\", which shows all of the data entry cards that you can edit. Think of \"creating data\" as \"adding cards\"." +msgstr "El editor de recursos se utiliza para crear recursos nuevos o editar existentes. Lo que ve en el lado izquierdo de la página es el \"árbol de tarjetas\" de este recurso, que muestra todas las tarjetas de entrada de datos que puede editar. Piense en \"crear datos\" como \"agregar tarjetas\"." + +#: app/templates/help/resource-editor-help.htm:12 +msgid "To begin, select a card, enter data, and click Add. Some cards may allow multiple instances, in which case you will be able to add as many of the same type as you want." +msgstr "Para comenzar, seleccione una tarjeta, ingrese datos y haga clic en Agregar .Algunas tarjetas pueden permitir múltiples instancias, en cuyo caso podrá agregar tantos del mismo tipo que desee." + +#: app/templates/help/resource-editor-help.htm:13 +msgid "Note that in the demonstration below, the \"Define Resource Descriptors\" function has already been configured to set the Name card value as the resource display name." +msgstr "Tenga en cuenta que en la demostración a continuación, la función \"Definir descriptores de recursos\" ya se ha configurado para establecer el valor de la tarjeta de nombre como el nombre de la pantalla de recursos." + +#: app/templates/help/resource-editor-help.htm:16 +msgid "basic card data enty - click to view" +msgstr "entrada de datos de tarjeta básica: haga clic para ver" + +#: app/templates/help/resource-editor-help.htm:24 +msgid "Once you have saved data for a resource, you can see a full summary by selecting the top card. This is the resource report." +msgstr "Una vez que haya guardado datos para un recurso, puede ver un resumen completo seleccionando la tarjeta superior. Esté es el informe de recursos." + +#: app/templates/help/resource-editor-help.htm:25 +msgid "In some cases, cards will be nested within other cards, as in the example of adding a geo-location below." +msgstr "En algunos casos, las tarjetas se anidarán dentro de otras cartas, como en el ejemplo de agregar una ubicación geográfica a continuación." + +#: app/templates/help/resource-editor-help.htm:29 +msgid "nested card data enty - click to view" +msgstr "entrada de datos de tarjeta anidada: haga clic para ver" + +#: app/templates/help/resource-editor-help.htm:42 +msgid "Creating Resources Relations" +msgstr "Creación de relaciones de recursos" + +#: app/templates/help/resource-editor-help.htm:47 +msgid "In the Resource Editor you can also access the Related Resources Editor . To create a relationship between this resource and another in your database, open the editor, find the resource, and click Add." +msgstr "En el editor de recursos también puede acceder al editor de recursos relacionados .Para crear una relación entre este recurso y otro en su base de datos, abra el editor, busque el recurso y haga clic en add ." + +#: app/templates/help/resource-editor-help.htm:48 +msgid "Your Resource Model will need to be configured to allow relations with the target Resource Model. If relations are not allowed, resources in the dropdown menu will not be selectable." +msgstr "Su modelo de recursos deberá configurarse para permitir las relaciones con el modelo de recursos de destino. Si no se permiten relaciones, los recursos en el menú desplegable no serán seleccionables." + +#: app/templates/help/resource-editor-help.htm:51 +msgid "create resource relation - click to view" +msgstr "crear relación de recursos: haga clic para ver" + +#: app/templates/help/resource-editor-landing-help.htm:7 +msgid "Choose a Resource Model to begin creating a new Resource in your database." +msgstr "Elija un modelo de recursos para comenzar a crear un nuevo recurso en su base de datos." + +#: app/templates/help/search-help.htm:6 +msgid "Introduction to Search" +msgstr "Introducción a la búsqueda" + +#: app/templates/help/search-help.htm:11 +msgid "Search Bar The quickest way to search the database is to begin typing in the search bar. You'll be presented with database terminology which you can use to create one or more simple filters. The search bar also acts as an aggregator of all currently enabled filters." +msgstr "" +" Barra de búsqueda La forma más rápida de buscar la base de datos es comenzar a escribir en la barra de búsqueda. Se le presentará la terminología de la base de datos que puede usar para crear uno o más filtros simples. La barra de búsqueda también actúa como agregador de All actualmente filtros habilitados." + +#: app/templates/help/search-help.htm:12 +msgid "Search Tools There are a number tools you can use to explore the database, which are described in detail below." +msgstr " Herramientas de búsqueda Hay una serie de herramientas que puede usar para explorar la base de datos, que se describen en detalle a continuación." + +#: app/templates/help/search-help.htm:13 +msgid "Search Results Whenever you change any search filters, the updated search results will be listed here. You can link to a resource's report, zoom to it on the map, or view its related resources." +msgstr " Resultados de búsqueda Siempre que cambie los filtros de búsqueda, los resultados de búsqueda actualizados se enumerarán aquí. Puede vincular al informe de un recurso, acercarlo en el mapa o ver sus recursos relacionados." + +#: app/templates/help/search-help.htm:14 +msgid "Search Panel The contents of this panel will change depending on what search tool you are using. Typically, the map will be activated by default." +msgstr " panel de búsqueda El contenido de este panel cambiará dependiendo de la herramienta de búsqueda que esté utilizando. Por lo general, el mapa se activará de forma predeterminada." + +#: app/templates/help/search-help.htm:19 app/templates/index.htm:148 +msgid "Search Tools" +msgstr "Herramientas de búsqueda" + +#: app/templates/help/search-help.htm:22 app/templates/javascript.htm:399 +msgid "Map" +msgstr "Mapa" + +#: app/templates/help/search-help.htm:24 +msgid "Search results can be represented on the map in two ways: markers show the first set of resources in the search results, and cells are used to give a general spatial representation of all resources in the search results." +msgstr "Los resultados de la búsqueda se pueden representar en el mapa de dos maneras: marcadores muestran el primer conjunto de recursos en los resultados de búsqueda, y células se utilizan para dar una representación espacial general de Todos los recursos en los resultados de búsqueda." + +#: app/templates/help/search-help.htm:25 +msgid "In addition to displaying search results, the map can show resource layers (showing all resources), or custom overlays, if any have been added. You control the visibility of all layers and basemaps with the tool panel on the right." +msgstr "Además de mostrar los resultados de búsqueda, el mapa puede mostrar capas de recursos (que muestran todos los recursos) o superposiciones personalizadas, si se han agregado alguna.Usted controla la visibilidad de todas las capas y mapas de base con el panel de herramientas a la derecha." + +#: app/templates/help/search-help.htm:26 +msgid "Finally, you can add a spatial filter to your query by using the map drawing tools to draw a shape and apply a buffer distance if desired." +msgstr "Finalmente, puede agregar un filtro espacial a su consulta utilizando las herramientas de dibujo del mapa para dibujar una forma y aplicar una distancia de búfer si lo desea." + +#: app/templates/help/search-help.htm:28 +msgid "change basemap - click to view" +msgstr "cambiar el mapa base: haga clic para ver" + +#: app/templates/help/search-help.htm:37 +msgid "toggle search results layer - click to view" +msgstr "capa de resultados de búsqueda de alternación: haga clic para ver" + +#: app/templates/help/search-help.htm:47 +msgid "search with spatial query - click to view" +msgstr "buscar con consulta espacial: haga clic para ver" + +#: app/templates/help/search-help.htm:58 +msgid "Time" +msgstr "Tiempo" + +#: app/templates/help/search-help.htm:60 +msgid "You can apply a temporal criterion to your query by using the Time Filter. You have the option of creating the filter by hand, or you can use the time wheel. The time wheel is a graphic representation of all the resources in the database, organized chronologically." +msgstr "Puede aplicar un criterio temporal a su consulta utilizando el filtro de tiempo. Tiene la opción de crear el filtro a mano, o puede usar la rueda de tiempo. La rueda de tiempo es una representación gráfica de todos los recursos en la base de datos, organizada cronológicamente." + +#: app/templates/help/search-help.htm:63 +msgid "apply time filter with time wheel - click to view" +msgstr "aplicar filtro de tiempo con rueda de tiempo: haga clic para ver" + +#: app/templates/help/search-help.htm:74 app/templates/views/graph/card-configuration/card-form-preview.htm:93 app/templates/views/graph/card-configuration/card-form-preview.htm:135 +msgid "Saved" +msgstr "Guardado" + +#: app/templates/help/search-help.htm:76 +msgid "Saved searches allow you to view pre-made queries. Saved searches are created by database administrators, so the number of saved searches shown here will vary from one database to the next." +msgstr "Las búsquedas guardadas le permiten ver consultas prefabricadas. Las búsquedas guardadas son creadas por administradores de bases de datos, por lo que el número de búsquedas guardadas que se muestran aquí variará de una base de datos a la siguiente." + +#: app/templates/help/search-help.htm:80 app/templates/javascript.htm:594 +msgid "Advanced" +msgstr "Avanzado" + +#: app/templates/help/search-help.htm:82 +msgid "You can use the advanced search to make more complex queries based on data attributes, or \"facets\". While the basic search filter allows you to combine multiple filters, advanced search is the only way to combine filters with an or operator, and also gives you access to more comparison operators." +msgstr "" +"Puede usar la búsqueda avanzada para hacer consultas más complejas basadas en atributos de datos o \"facetas\". Si bien el filtro de búsqueda básico le permite combinar múltiples filtros, la búsqueda avanzada es la única forma de combinar filtros con un operador o , y también le brinda acceso a más operadores de " +"comparación." + +#: app/templates/help/search-help.htm:83 +msgid "In the example below, a search is made within a single resource type for any name like \"church\" or any name like \"gate\"." +msgstr "En el ejemplo a continuación, se realiza una búsqueda dentro de un solo tipo de recurso para cualquier nombre como \"iglesia\" o cualquier nombre como \"gate\"." + +#: app/templates/help/search-help.htm:86 +msgid "search for multiple words in names - click to view" +msgstr "busque múltiples palabras en nombres: haga clic para ver" + +#: app/templates/help/search-help.htm:97 +msgid "Related" +msgstr "Relacionado" + +#: app/templates/help/search-help.htm:99 +msgid "For each resource listed in the search results you can view its related resources with the \"Related Resources\" link under the description. By viewing Related Resources, you get a new view of the database: not how resources are related geographically nor chronologically, but qualitatively." +msgstr "Para cada recurso enumerado en los resultados de búsqueda, puede ver sus recursos relacionados con el enlace \"Recursos relacionados\" en la descripción. Al ver los recursos relacionados, obtiene una nueva vista de la base de datos: no cómo los recursos están relacionados geográficamente ni cronológicamente, sino cualitativamente." + +#: app/templates/help/search-help.htm:100 +msgid "There two methods for viewing Related Resources: in a table where each related resource is a row, or in a graph where resources are shown as nodes in a graph, with relationships connecting them." +msgstr "Hay dos métodos para ver los recursos relacionados: en una tabla donde cada recurso relacionado es una fila, o en un grafo donde los recursos se muestran como nodos en un grafo, con relaciones que los conectan." + +#: app/templates/help/system-settings-help.htm:6 +msgid "" +"\n" +"

A number of global settings can be defined or altered here.

\n" +" " +msgstr "" +"\n" +"

Aquí se pueden definir o modificar varios ajustes globales.

\n" +" " + +#: app/templates/help/system-settings-help.htm:13 +msgid "Default Application Settings" +msgstr "Configuración de aplicación predeterminada" + +#: app/templates/help/system-settings-help.htm:15 +msgid "" +"\n" +" Application Name - Name of your Arches app, to be displayed in the browser title bar and elsewhere.
\n" +" Default Data Import/Export User - Name to associate with data that is imported into the system.
\n" +" " +msgstr "" +"\n" +" Nombre de la aplicación - Nombre de su aplicación Arches, que se mostrará en la barra de título del navegador y en otros lugares.
\n" +" Importación/Exportación de datos de usuario predeterminados: nombre que se asociará a los datos que se importen al sistema.
\n" +" " + +#: app/templates/help/system-settings-help.htm:20 +msgid "Web Analytics" +msgstr "Analiticas web" + +#: app/templates/help/system-settings-help.htm:22 +msgid "" +"\n" +" Google Analytics Key - If you have made a Google Analytics Key to track your app's traffic, enter it here.
\n" +" " +msgstr "" +"\n" +" Clave de Google Analytics - Si ha creado una clave de Google Analytics para realizar un seguimiento del tráfico de su aplicación, introdúzcala aquí.
\n" +" " + +#: app/templates/help/system-settings-help.htm:26 +msgid "Thesaurus Service Providers" +msgstr "Proveedores de servicios de tesauro" + +#: app/templates/help/system-settings-help.htm:28 +msgid "" +"\n" +" Thesaurus SPARQL Endpoint - Advanced users may create more SPARQL endpoints and register them here. These endpoints will be available in the RDM and allow you to import thesaurus entries from external sources.
\n" +" " +msgstr "" +"\n" +" Tesaurus SPARQL Endpoint - Los usuarios avanzados pueden crear más puntos finales SPARQL y registrarlos aquí.Estos puntos finales estarán disponibles en el RDM y le permitirán importar entradas de tesauro de fuentes externas.
" + +#: app/templates/help/system-settings-help.htm:35 +msgid "Map Settings" +msgstr "Configuración de mapa" + +#: app/templates/help/system-settings-help.htm:37 +msgid "Mapbox API" +msgstr "API MAPBOX" + +#: app/templates/help/system-settings-help.htm:38 +msgid "Arches uses the Mapbox mapping library for map display and data creation. Arches also supports Mapbox basemaps and other services." +msgstr "Arches utiliza la biblioteca de mapeo MAPBOX para la pantalla MAP y la creación de datos. Arches también es compatible con Mapbox mapas base y otros servicios." + +#: app/templates/help/system-settings-help.htm:40 +msgid "" +"Mapbox API Key (Optional) - By default, Arches uses some basemap web services from Mapbox. You will need to create a free API key (or \"access token\") for these services to be activated. Alternatively, you could remove all of the " +"default basemaps and add your own, non-Mapbox layers." +msgstr "" +" MAPBOX API Clave (Opcional) - Por defecto, Arches usa algunos servicios web de mapa base de MAPBOX. Tendrá que crea una llave de API gratuita (o \"Token de acceso\") para que estos servicios se activen. Alternativamente, puede " +"eliminar todos los mapas de base predeterminados y agregar sus propias capas no mapbox." + +#: app/templates/help/system-settings-help.htm:41 +msgid "Mapbox Sprites - Path to Mapbox sprites (use default)." +msgstr " Mapbox sprites - ruta a sprites de Mapbox (use predeterminado)." + +#: app/templates/help/system-settings-help.htm:42 +msgid "Mapbox Glyphs - Path to Mapbox glyphs (use default)." +msgstr " mapbox glifs - ruta a los glifos de mapbox (use predeterminado)." + +#: app/templates/help/system-settings-help.htm:44 +msgid "Project Extent" +msgstr "Extensión del proyecto" + +#: app/templates/help/system-settings-help.htm:45 +msgid "Draw a polygon representing your project's extent. These bounds will serve as the default for the search result grid bounds, and map bounds in search, cards, and reports." +msgstr "Dibuje un polígono que represente el alcance de su proyecto. Estos límites servirán como el valor predeterminado para los límites de la cuadrícula de resultados de búsqueda y los límites de mapa en la búsqueda, las tarjetas y los informes." + +#: app/templates/help/system-settings-help.htm:46 +msgid "Map Zoom" +msgstr "Zoom de mapa" + +#: app/templates/help/system-settings-help.htm:47 +msgid "You can define the zoom behavior of your map. Zoom level 0 shows the whole world (and is the absolute minimum zoom level) and zoom level 20 is the maximum level that most map services support." +msgstr "Puede definir el comportamiento de zoom de su mapa.El nivel de zoom 0 muestra el mundo entero (y es el nivel mínimo de zoom absoluto) y el nivel de zoom 20 es el nivel máximo que la mayoría de los servicios de mapas admiten." + +#: app/templates/help/system-settings-help.htm:49 +msgid "Default Zoom - Set the zoom level that the map will be shown at by default." +msgstr " zoom predeterminado : configure el nivel de zoom en el que se mostrará el mapa de forma predeterminada." + +#: app/templates/help/system-settings-help.htm:50 +msgid "Min Zoom - Minimum zoom level defines how far the user can zoom out when viewing the map." +msgstr " min zoom - El nivel mínimo de zoom define hasta qué punto el usuario puede alejarse al ver el mapa." + +#: app/templates/help/system-settings-help.htm:51 +msgid "Max Zoom - Maximum zoom level defines how far the user can zoom in when viewing the map." +msgstr " max zoom - El nivel máximo de zoom define hasta qué punto el usuario puede acercarse al ver el mapa." + +#: app/templates/help/system-settings-help.htm:53 +msgid "Search Results Grid" +msgstr "Cuadrícula de resultados de búsqueda" + +#: app/templates/help/system-settings-help.htm:54 +msgid "Arches aggregates search results and displays them as hexagons. You will need to set default parameters for the hexagon size and precision." +msgstr "Arches agrega los resultados de búsqueda y los muestra como hexágonos. Deberá establecer parámetros predeterminados para el tamaño y la precisión hexagonal." + +#: app/templates/help/system-settings-help.htm:56 +msgid "Hexagon Size (in km) - Set the actual size of the hex bins that will be shown on the map." +msgstr " tamaño hexágono (en km) - Establezca el tamaño real de los contenedores hexadecimales que se mostrarán en el mapa." + +#: app/templates/help/system-settings-help.htm:57 +msgid "Hexagon Grid Precision - Set the precision with which the contents of the hex bins will be calculated." +msgstr " Precisión de la cuadrícula hexagonal - Establezca la precisión con la que se calculará el contenido de los contenedores hexadecimales." + +#: app/templates/help/system-settings-help.htm:59 +msgid "Warning: A large project area combined with a small hexagon size and/or high precision will take a very long time to load, and can crash your browser. We suggest changing these settings in small increments to find the best combination for your project." +msgstr " ADVERTENCIA: un área de proyecto grande combinada con un pequeño tamaño hexágono y/o alta precisión tardará mucho en cargarse y puede bloquear su navegador. Sugerimos cambiar estas configuraciones en pequeños incrementos para encontrar la mejor combinación para su proyecto." + +#: app/templates/help/system-settings-help.htm:63 +msgid "Basic Search Settings" +msgstr "Configuración de búsqueda básica" + +#: app/templates/help/system-settings-help.htm:65 +msgid "Set the default search results behavior." +msgstr "Establezca el comportamiento de resultados de búsqueda predeterminado." + +#: app/templates/help/system-settings-help.htm:66 +msgid "" +"\n" +"

\n" +" Number of search results per page - Set the number of search results shown per page. Note this also defines the number of search result markers that are shown on the map.
\n" +" Number of search hints per dropdown - Set the number of search hints that will appear under the search bar as you type in search terms.
\n" +" Max number of search results to export - Set the maximum number of resources to be exported from the search results. This value should generally be evenly divible by the SEARCH_RESULT_LIMIT setting in Arches (10,000 by default).\n" +"

\n" +" " +msgstr "" +"\n" +"

\n" +" Número de resultados de búsqueda por página - Define el número de resultados de búsqueda mostrados por página. Tenga en cuenta que esto también define el número de marcadores de resultados de búsqueda que se muestran en el mapa.
\n" +" Número de sugerencias de búsqueda por menú desplegable - Establezca el número de sugerencias de búsqueda que aparecerán debajo de la barra de búsqueda cuando escriba los términos de búsqueda.
\n" +" Número máximo de resultados de búsqueda a exportar - Establezca el número máximo de recursos a exportar de los resultados de búsqueda. Por lo general, este valor debe ser divisible uniformemente por el ajuste SEARCH_RESULT_LIMIT de Arches (10.000 por defecto).\n" +"

\n" +" " + +#: app/templates/help/system-settings-help.htm:76 +msgid "Temporal Search Settings" +msgstr "Configuración de búsqueda temporal" + +#: app/templates/help/system-settings-help.htm:78 +msgid "Arches creates a Time Wheel based on the resources in your database, to allow for quick temporal visualization and queries. A few aspects of this temporal search are defined here." +msgstr "Arches crea una rueda de tiempo basada en los recursos en su base de datos, para permitir una visualización y consultas temporales rápidas. Algunos aspectos de esta búsqueda temporal se definen aquí." + +#: app/templates/help/system-settings-help.htm:80 +msgid "Color Ramp - not currently implemented The color ramp for the time wheel. For further reference, check out the d3 API reference." +msgstr " rampa de color - actualmente no implementó la rampa de color para la rueda de tiempo. Para obtener más referencia, consulte el d3 API referencia ." + +#: app/templates/help/system-settings-help.htm:81 +msgid "Time wheel configuration - not currently implemented" +msgstr " Configuración de la rueda de tiempo - actualmente no implementada " + +#: app/templates/help/system-settings-help.htm:86 +msgid "Saved Searches" +msgstr "Búsquedas guardadas" + +#: app/templates/help/system-settings-help.htm:88 +msgid "Arches allows you save a search and present it as convenience for your users. Saved Searches appear as search options in the main Search page. Creating a Saved Search is a three-step process." +msgstr "Arches le permite guardar una búsqueda y presentarla como conveniencia para sus usuarios.Las búsquedas guardadas aparecen como opciones de búsqueda en la página de búsqueda principal.Crear una búsqueda guardada es un proceso de tres pasos." + +#: app/templates/help/system-settings-help.htm:90 +msgid "" +"\n" +" 1. Specify Search Criteria - Go to the Search page and enter all the criteria you would like to use to configure your Saved Search. You may notice that with the addition of each new search filter (either by using the term filter, map filtering tools, or temporal filters) the URL for the page will change." +"
\n" +" 2. Copy the URL - In your browser address bar, copy the entire URL. This will be a long string that defines each of the search filters created in step 1.
\n" +" 3. Create the Saved Search - Finally, head back to this page and fill out the settings that you see at left. You can also upload an image that will be shown along with your Search Search.\n" +" " +msgstr "" +"\n" +" 1. Especificar criterios de búsqueda - Vaya a la página de Búsqueda e introduzca todos los criterios que desee utilizar para configurar su Búsqueda Guardada. Es posible que observe que con la adición de cada nuevo filtro de búsqueda (ya sea utilizando el filtro de términos, las herramientas de filtrado de " +"mapas o los filtros temporales) la URL de la página cambiará.
\n" +" 2. Copie la URL - En la barra de direcciones de su navegador, copie la URL completa. Esta será una cadena larga que define cada uno de los filtros de búsqueda creados en el paso 1.
\n" +" 3. Crear la búsqueda guardada - Por último, vuelva a esta página y rellene los campos que aparecen a la izquierda. También puedes subir una imagen que se mostrará junto con tu Búsqueda Guardada.\n" +" " + +#: app/templates/index.htm:72 +#, python-format +msgid "Arches | %(version)s" +msgstr "Arches | %(version)s" + +#: app/templates/index.htm:80 +msgid "Arches Features" +msgstr "Características de los arches" + +#: app/templates/index.htm:83 +msgid "Search Arches" +msgstr "Búsqueda de arches" + +#: app/templates/index.htm:92 +msgid "Sign in" +msgstr "Iniciar sesión" + +#: app/templates/index.htm:97 +msgid "Welcome, " +msgstr "Bienvenido, " + +#: app/templates/index.htm:101 +msgid "Log off" +msgstr "Desconectarse" + +#: app/templates/index.htm:133 +msgid "Home" +msgstr "Inicio" + +#: app/templates/index.htm:138 app/templates/index.htm:215 +msgid "Fast" +msgstr "Rápido" + +#: app/templates/index.htm:143 app/templates/index.htm:269 +msgid "Workflows" +msgstr "Flujos de trabajo" + +#: app/templates/index.htm:183 +#, python-format +msgid "Arches %(version)s" +msgstr "Arches %(version)s" + +#: app/templates/index.htm:184 +msgid "A web and mobile platform for" +msgstr "Una plataforma web y móvil para" + +#: app/templates/index.htm:185 +msgid "managing your most important resource information" +msgstr "administrar su información de recursos más importante" + +#: app/templates/index.htm:193 +msgid "Glarus thrust, Tectonic Area Sardona, Switzerland | Jonas Wagner https://www.flickr.com/photos/80225884@N06/ | Attribution 2.0 Generic (CC BY 2.0)" +msgstr "Glarus thrust, área tectónica Sardona, Suiza |Jonas Wagner https://www.flickr.com/photos/80225884@n06/ |Atribución 2.0 genérico (CC por 2.0)" + +#: app/templates/index.htm:216 +msgid "Deploy Applications Rapidly" +msgstr "Desplegar aplicaciones rápidamente" + +#: app/templates/index.htm:218 +msgid "Design custom information management applications in hours. Build your databases with Arches Designer, then configure your interface all without having to write any code." +msgstr "Diseñe aplicaciones de gestión de información personalizadas en horas. Cree sus bases de datos con Arches Designer, luego configure su interfaz, todo sin tener que escribir ningún código." + +#: app/templates/index.htm:235 +msgid "Interface Manager" +msgstr "Administrador de Interfaz" + +#: app/templates/index.htm:237 +msgid "Arches automatically creates data entry forms based on your data models. Use Arches' Card Manager to configure the look and feel of your data entry UI." +msgstr "Arches crea automáticamente formularios de entrada de datos basados ​​en sus modelos de datos. Use Arches 'Card Manager para configurar la apariencia de su interfaz de usuario de entrada de datos." + +#: app/templates/index.htm:246 +msgid "Data Security" +msgstr "Seguridad de datos" + +#: app/templates/index.htm:248 +msgid "Use Arches' Permissions Manager to set up data access rules for all your user groups and individual accounts. You can define read/write/delete and no-access permissions." +msgstr "Use el Administrador de permisos de Arches para configurar reglas de acceso a datos para todos sus grupos de usuarios y cuentas individuales.Puede definir los permisos de lectura/escritura/eliminación y sin acceso." + +#: app/templates/index.htm:270 +msgid "Orchestrate your data entry" +msgstr "Orquestre su entrada de datos" + +#: app/templates/index.htm:272 +msgid "Design step-wise data management interfaces that simplify complex editing tasks. Ensure that everyone enters data completely and consistently" +msgstr "Diseñe interfaces de gestión de datos a paso que simplifiquen tareas de edición complejas. Asegúrese de que todos ingresen datos de manera completa y consistente" + +#: app/templates/index.htm:295 +msgid "Arches Search Tools" +msgstr "Herramientas de búsqueda de arches" + +#: app/templates/index.htm:296 +msgid "Find what you're looking for" +msgstr "Encuentra lo que estás buscando" + +#: app/templates/index.htm:298 +msgid "Arches comes with powerful built-in search tools. Quickly filter large databases with term, geospatial, and time-based search components" +msgstr "Arches viene con potentes herramientas de búsqueda incorporadas. Filtrar rápidamente bases de datos grandes con componentes de búsqueda a término, geoespacial y basado en el tiempo" + +#: app/templates/index.htm:311 +msgid "Search Options" +msgstr "Opciones de búsqueda" + +#: app/templates/index.htm:313 +msgid "Arches gives you many ways to find precisely the information you need, even if your Arches application contains 10's of millions of records. In addition to term, thesaurus, geospatial, and temporal filters, Arches provides you with advanced filtering options that support boolean logic, inverses, and many other filtering options." +msgstr "" +"Arches le brinda muchas formas de encontrar precisamente la información que necesita, incluso si su aplicación de Arches contiene 10 de millones de registros.Además del término, los filtros de tesauro, geoespacial y temporal, Arches le proporciona opciones de filtrado avanzadas que admiten lógica booleana, inversos y muchas otras " +"opciones de filtrado." + +#: app/templates/index.htm:317 +msgid "Arches' search capabilities also provide for sophisticated data visualizations, including interactive displays of the connections between your data objects using a Force Directed Graph." +msgstr "Las capacidades de búsqueda de Arches también proporcionan visualizaciones de datos sofisticadas, incluidas pantallas interactivas de las conexiones entre sus objetos de datos utilizando un grafo dirigido por la fuerza." + +#: app/templates/index.htm:321 +msgid "If you're a software developer, you can build on Arches modular search services and create your own filters, reports, and visualizations to best show off your particular dataset." +msgstr "Si es un desarrollador de software, puede construir sobre los servicios de búsqueda modulares de Arches y crear sus propios filtros, informes y visualizaciones para mostrar mejor su conjunto de datos particular." + +#: app/templates/index.htm:343 +msgid "Sample Institution Name" +msgstr "Muestra de nombre de la institución" + +#: app/templates/index.htm:346 +msgid "Sample Address" +msgstr "Dirección de muestra" + +#: app/templates/index.htm:347 +msgid "Getty Conservation Institute" +msgstr "Instituto de Conservación Getty" + +#: app/templates/index.htm:348 +msgid "1200 Getty Center Drive" +msgstr "1200 Getty Center Drive" + +#: app/templates/index.htm:349 +msgid "Los Angeles, CA 90049" +msgstr "Los Angeles, CA 90049" + +#: app/templates/index.htm:355 +msgid "Guides and Documentation" +msgstr "Guías y documentación" + +#: app/templates/index.htm:363 +msgid "What is Arches" +msgstr "Que es arches" + +#: app/templates/index.htm:366 +msgid "Implementation Considerations" +msgstr "Consideraciones de implementación" + +#: app/templates/index.htm:369 +msgid "Information For Developers" +msgstr "Información para desarrolladores" + +#: app/templates/index.htm:379 +msgid "FAQ" +msgstr "Preguntas frecuentes (FAQ)" + +#: app/templates/index.htm:382 +msgid "Standards and Interoperability" +msgstr "Estándares e interoperabilidad" + +#: app/templates/index.htm:385 +msgid "Installation Guide" +msgstr "Guía de instalación" + +#: app/templates/index.htm:393 +msgid "Arches Project Background" +msgstr "Antecedentes del proyecto de arches" + +#: app/templates/index.htm:396 +msgid "Arches Webinars/Presentations" +msgstr "Arches Webinarios /presentaciones" + +#: app/templates/index.htm:415 +msgid "Terms & Conditions" +msgstr "Términos y condiciones" + +#: app/templates/index.htm:416 +msgid "Privacy Policy" +msgstr "Política de privacidad" + +#: app/templates/index.htm:419 +msgid "Powered by Arches" +msgstr "Impulsado por arches" + +#: app/templates/javascript.htm:114 +msgid "Delete All Resources Associated with this Graph?" +msgstr "¿Eliminar todos los recursos asociados con este grafo?" + +#: app/templates/javascript.htm:115 +msgid "Deleting All Resources removes all associated data with this graph entirely. Are you sure you would like to proceed?" +msgstr "Eliminar todos los recursos elimina todos los datos asociados con este grafo por completo. Estás seguro de que te gustaría continuar?" + +#: app/templates/javascript.htm:118 +msgid "Delete Branch/Resource Model?" +msgstr "¿Eliminar Rama/Modelo de recursos?" + +#: app/templates/javascript.htm:119 +msgid "Deleting this branch/resource model will remove it (and all associated data) entirely. Are you sure you would like to proceed?" +msgstr "Eliminar esta rama/modelo de recursos lo eliminará por completo. Estás seguro de que te gustaría continuar?" + +#: app/templates/javascript.htm:159 +msgid "Please contact your system administrator for more details." +msgstr "Póngase en contacto con el administrador de su sistema para obtener más detalles." + +#: app/templates/javascript.htm:160 +msgid "Hide Null Values" +msgstr "Ocultar valores nulos" + +#: app/templates/javascript.htm:161 app/templates/javascript.htm:509 +msgid "Load More" +msgstr "Cargar más" + +#: app/templates/javascript.htm:162 +msgid "Load All" +msgstr "Cargar todo" + +#: app/templates/javascript.htm:163 +msgid "Display Name" +msgstr "Nombre para mostrar" + +#: app/templates/javascript.htm:164 +msgid "Display Description" +msgstr "Descripción de la pantalla" + +#: app/templates/javascript.htm:165 +msgid "Map Popup" +msgstr "Ventana emergente de mapa" + +#: app/templates/javascript.htm:166 +msgid "Map Popup Template" +msgstr "Plantilla emergente de mapa" + +#: app/templates/javascript.htm:167 +msgid "ID:" +msgstr "ID:" + +#: app/templates/javascript.htm:168 +msgid "Add Buffer" +msgstr "Agregar búfer" + +#: app/templates/javascript.htm:169 +msgid "Buffer Intersecting Feature" +msgstr "Característica de intersección de búfer" + +#: app/templates/javascript.htm:170 +msgid "Add buffer to features" +msgstr "Agregar búfer a las características" + +#: app/templates/javascript.htm:171 +msgid "Add Buffer Feature" +msgstr "Agregar función de búfer" + +#: app/templates/javascript.htm:172 +msgid "Select a feature to perform intersection" +msgstr "Seleccione una función para realizar la intersección" + +#: app/templates/javascript.htm:173 +msgid "Intersect" +msgstr "Intersecarse" + +#: app/templates/javascript.htm:174 +msgid "Re-index" +msgstr "Re-indexarse" + +#: app/templates/javascript.htm:175 +msgid "Re-indexing" +msgstr "Re-indexando" + +#: app/templates/javascript.htm:176 +msgid "Re-index Resources Now" +msgstr "Re-indexar recursos ahora" + +#: app/templates/javascript.htm:177 +msgid "If you've made any changes to this function and there are resources already in the system, then you will need to reindex the resources to reflect your changes. This process can take some time (potentially several minuetes or more). Please be patient." +msgstr "Si ha realizado algún cambio en esta función y ya hay recursos en el sistema, entonces deberá reintegrar los recursos para reflejar sus cambios. Este proceso puede llevar algún tiempo (potencialmente varios minutos o más).Por favor, sea paciente." + +#: app/templates/javascript.htm:178 +msgid "Use bracketed node names like this: " +msgstr "Use nombres de nodos entre corchetes como este: " + +#: app/templates/javascript.htm:179 +msgid "Primary Name Template" +msgstr "Plantilla de nombre principal" + +#: app/templates/javascript.htm:180 +msgid "Primary Description Template" +msgstr "Plantilla de descripción principal" + +#: app/templates/javascript.htm:181 +msgid "Select a card from which to choose nodes to power your primary name identifier." +msgstr "Seleccione una tarjeta de la cual elegir nodos para alimentar su identificador de nombre principal." + +#: app/templates/javascript.htm:182 +msgid "Select a card from which to choose nodes to power your primary description identifier." +msgstr "Seleccione una tarjeta de la cual elegir nodos para alimentar su identificador de descripción principal." + +#: app/templates/javascript.htm:183 +msgid "Add as new" +msgstr "Agregar como nuevo" + +#: app/templates/javascript.htm:184 +msgid "Add Feature" +msgstr "Agregar característica" + +#: app/templates/javascript.htm:185 +msgid "Distance:" +msgstr "Distancia:" + +#: app/templates/javascript.htm:186 +msgid "Units:" +msgstr "Unidades:" + +#: app/templates/javascript.htm:187 +msgid "meters:" +msgstr "metros:" + +#: app/templates/javascript.htm:188 +msgid "feet:" +msgstr "pies:" + +#: app/templates/javascript.htm:189 +msgid "Download" +msgstr "Descargar" + +#: app/templates/javascript.htm:190 +msgid "Download File" +msgstr "Descargar archivo" + +#: app/templates/javascript.htm:191 +msgid "Triggering Nodegroups" +msgstr "Desencadenando NodeGroups" + +#: app/templates/javascript.htm:192 app/templates/javascript.htm:540 +msgid "Select a Nodegroup" +msgstr "Seleccione un NodeGroup" + +#: app/templates/javascript.htm:193 +msgid "No Relationships Added" +msgstr "No se agregan relaciones" + +#: app/templates/javascript.htm:194 +msgid "Relate Resource" +msgstr "Relacionar el recurso" + +#: app/templates/javascript.htm:195 +msgid "Cannot Be Related" +msgstr "No se puede Relacionar" + +#: app/templates/javascript.htm:196 app/templates/views/resource/editor.htm:92 +msgid "Related Resources" +msgstr "Recursos relacionados" + +#: app/templates/javascript.htm:197 +msgid "Arches keeps track of how resources are related. Click the 'related resources' link on a search result from the list on the left to see its relatives displayed in an interactive graph" +msgstr "Arches realiza un seguimiento de cómo se relacionan los recursos. Haga clic en el enlace 'Recursos relacionados' en un resultado de búsqueda de la lista de la izquierda para ver a sus familiares mostrados en un grafo interactivo" + +#: app/templates/javascript.htm:198 +msgid "Report Date:" +msgstr "Fecha de informe:" + +#: app/templates/javascript.htm:200 +msgid "X Coordinate Placeholder" +msgstr "Coordenada X de marcador de Posición" + +#: app/templates/javascript.htm:201 +msgid "Y Coordinate Placeholder" +msgstr "Coordenada Y de marcador de Posición" + +#: app/templates/javascript.htm:202 +msgid "Display as Greyscale" +msgstr "Mostrar como escala de grises" + +#: app/templates/javascript.htm:203 +msgid "Annotation Overlays" +msgstr "Superposición de anotaciones" + +#: app/templates/javascript.htm:204 +msgid "Reset to defaults" +msgstr "Reiniciar a los valores predeterminados" + +#: app/templates/javascript.htm:205 +msgid "Data Themes" +msgstr "Temas de datos" + +#: app/templates/javascript.htm:208 +msgid "Allow Normal Access" +msgstr "Permitir acceso normal" + +#: app/templates/javascript.htm:209 +msgid "Person/Group" +msgstr "Persona/grupo" + +#: app/templates/javascript.htm:210 +msgid "Set Permissions for this instance" +msgstr "Establecer permisos para esta instancia" + +#: app/templates/javascript.htm:211 +msgid "By default only you have access to this record. You can set permissions for specific people or groups by selecting to whom you will grant access" +msgstr "Por defecto, solo usted tiene acceso a este registro. Puede establecer permisos para personas o grupos específicos seleccionando a quién otorgará acceso" + +#: app/templates/javascript.htm:212 +msgid "Define access privileges for this instance. You may limit access to yourself, or select which user accounts and groups have permission to this resource." +msgstr "Defina los privilegios de acceso para este caso. Puede limitar el acceso a usted mismo o seleccionar qué cuentas y grupos de usuarios tienen permiso para este recurso." + +#: app/templates/javascript.htm:213 +msgid "Configure Access to this Instance" +msgstr "Configurar el acceso a esta instancia" + +#: app/templates/javascript.htm:214 +msgid "Resource Instance Permissions" +msgstr "Permisos de instancia de recursos" + +#: app/templates/javascript.htm:215 +msgid "Unsorted" +msgstr "No ordenado" + +#: app/templates/javascript.htm:216 +msgid "Ascending" +msgstr "Ascendente" + +#: app/templates/javascript.htm:217 +msgid "Descending" +msgstr "Descendente" + +#: app/templates/javascript.htm:218 +msgid "Fuzzy Year Padding" +msgstr "Relleno de año difuso" + +#: app/templates/javascript.htm:219 +msgid "Fuzzy Month Padding" +msgstr "Relleno de mes difuso" + +#: app/templates/javascript.htm:220 +msgid "Fuzzy Day Padding" +msgstr "Relleno de día difuso" + +#: app/templates/javascript.htm:221 +msgid "Fuzzy Season Padding (weeks)" +msgstr "Relleno de temporada borrosa (semanas)" + +#: app/templates/javascript.htm:222 +msgid "Multiplier if Date is Uncertain (?)" +msgstr "Multiplicador si la fecha es incierta (?)" + +#: app/templates/javascript.htm:223 +msgid "Multiplier if Date is Approximate (~)" +msgstr "Multiplicador si la fecha es aproximado (~)" + +#: app/templates/javascript.htm:224 +msgid "Multiplier if Both (? and ~)" +msgstr "Multiplicar si ambos (? y ~)" + +#: app/templates/javascript.htm:225 +msgid "Maximum Number of Files" +msgstr "Número máximo de archivos" + +#: app/templates/javascript.htm:226 +msgid "Related Node" +msgstr "Nodo relacionado" + +#: app/templates/javascript.htm:227 +msgid "Relationship to Node" +msgstr "Relación con el nodo" + +#: app/templates/javascript.htm:229 +msgid "Continue" +msgstr "Continuar" + +#: app/templates/javascript.htm:230 app/templates/views/components/datatypes/number.htm:27 +msgid "Value" +msgstr "Valor" + +#: app/templates/javascript.htm:231 +msgid "Disabled" +msgstr "Deshabilitado" + +#: app/templates/javascript.htm:232 app/templates/javascript.htm:269 +msgid "Disable Editing" +msgstr "Desactivar edición" + +#: app/templates/javascript.htm:233 app/templates/javascript.htm:270 +msgid "Prevent users from editing value" +msgstr "Previene que los usuarios editen un valor" + +#: app/templates/javascript.htm:234 +msgid "Domain options" +msgstr "Opciones de dominio" + +#: app/templates/javascript.htm:235 +msgid "Add new option" +msgstr "Agregar nueva opción" + +#: app/templates/javascript.htm:237 +msgid "Add GNU" +msgstr "Agregar GNU" + +#: app/templates/javascript.htm:238 app/templates/javascript.htm:543 +msgid "Showing edits by" +msgstr "Mostrando ediciones por" + +#: app/templates/javascript.htm:239 app/templates/javascript.htm:541 +msgid "Return to approved edits" +msgstr "Volver a las ediciones aprobadas" + +#: app/templates/javascript.htm:240 app/templates/javascript.htm:545 +msgid "This is a new contribution by a provisional editor." +msgstr "Esta es una nueva contribución de un editor provisional." + +#: app/templates/javascript.htm:241 app/templates/javascript.htm:544 +msgid "Currently showing the most recent approved edits" +msgstr "Actualmente muestra las ediciones aprobadas más recientes" + +#: app/templates/javascript.htm:242 app/templates/views/resource/editor/provisional-tile-manager.htm:8 +msgid "Provisional Edits" +msgstr "Ediciones provisionales" + +#: app/templates/javascript.htm:243 +msgid "QA Type" +msgstr "Tipo de QA" + +#: app/templates/javascript.htm:244 +msgid "All Resources" +msgstr "Todos los recursos" + +#: app/templates/javascript.htm:245 +msgid "All Edits" +msgstr "Todas las ediciones" + +#: app/templates/javascript.htm:246 +msgid "Delete all edits" +msgstr "Eliminar todas las ediciones" + +#: app/templates/javascript.htm:247 +msgid "Delete this record" +msgstr "Eliminar este registro" + +#: app/templates/javascript.htm:248 +msgid "Cancel edit" +msgstr "Cancelar editar" + +#: app/templates/javascript.htm:249 +msgid "Save edit" +msgstr "Guardar editar" + +#: app/templates/javascript.htm:250 +msgid "Sorry, you do not have access to this information" +msgstr "Lo siento, no tienes acceso a esta información" + +#: app/templates/javascript.htm:251 +msgid "No data added yet for" +msgstr "No hay datos agregados todavía para" + +#: app/templates/javascript.htm:252 +msgid "These data are provisional and pending review" +msgstr "Estos datos son una revisión provisional y pendiente de revisión" + +#: app/templates/javascript.htm:253 +msgid "Label 'True'" +msgstr "Etiqueta 'verdadero'" + +#: app/templates/javascript.htm:254 +msgid "Label 'False'" +msgstr "Etiqueta 'falso'" + +#: app/templates/javascript.htm:255 +msgid "Select an Option" +msgstr "Seleccione una opción" + +#: app/templates/javascript.htm:256 +msgid "Concept Collection" +msgstr "Colección conceptual" + +#: app/templates/javascript.htm:257 +msgid "Select a concept collection" +msgstr "Seleccione una colección de conceptos" + +#: app/templates/javascript.htm:258 +msgid "Select a Node" +msgstr "Seleccione un nodo" + +#: app/templates/javascript.htm:259 +msgid "Select a Property" +msgstr "Seleccionar una propiedad" + +#: app/templates/javascript.htm:260 +msgid "No Date Entered" +msgstr "No hay fecha ingresada" + +#: app/templates/javascript.htm:261 +msgid "Use date of data entry" +msgstr "Use la fecha de entrada de datos" + +#: app/templates/javascript.htm:262 +msgid "Check this to use the date of data entry as the default value." +msgstr "Verifique esto para usar la fecha de entrada de datos como el valor predeterminado." + +#: app/templates/javascript.htm:263 +msgid "Date" +msgstr "Fecha" + +#: app/templates/javascript.htm:264 +msgid "rich text" +msgstr "texto rico" + +#: app/templates/javascript.htm:265 +msgid "Direction" +msgstr "Dirección" + +#: app/templates/javascript.htm:266 +msgid "Left-to-Right" +msgstr "De izquierda a derecha" + +#: app/templates/javascript.htm:267 +msgid "Right-to-Left" +msgstr "De derecha a la izquierda" + +#: app/templates/javascript.htm:268 +msgid "Max Length" +msgstr "Longitud máxima" + +#: app/templates/javascript.htm:271 app/templates/views/rdm/modals/add-child-form.htm:25 app/templates/views/rdm/modals/add-collection-form.htm:19 app/templates/views/rdm/modals/add-scheme-form.htm:25 app/templates/views/rdm/modals/value-form.htm:45 app/templates/views/rdm/modals/value-form.htm:46 +#: app/templates/views/rdm/modals/value-form.htm:124 app/templates/views/rdm/modals/value-form.htm:202 app/templates/views/rdm/modals/value-form.htm:203 +msgid "Language" +msgstr "Idioma" + +#: app/templates/javascript.htm:272 +msgid "Languages" +msgstr "Idiomas" + +#: app/templates/javascript.htm:273 app/templates/views/rdm/modals/value-form.htm:34 app/templates/views/rdm/modals/value-form.htm:113 app/templates/views/rdm/modals/value-form.htm:191 +msgid "Type" +msgstr "Tipo" + +#: app/templates/javascript.htm:274 +msgid "not a valid EDTF format" +msgstr "no es un formato EDTF válido" + +#: app/templates/javascript.htm:275 +msgid "Year-month approximate" +msgstr "Año y mes aproximado" + +#: app/templates/javascript.htm:276 +msgid "Entire date (year-month-day) uncertain and approximate" +msgstr "Fecha completa (año mes) incierto y aproximado" + +#: app/templates/javascript.htm:277 +msgid "Year uncertain (possibly the year 1984, but not definitely)" +msgstr "Año incierto (posiblemente el año 1984, pero no definitivamente)" + +#: app/templates/javascript.htm:278 +msgid "Spring, 2001. The values 21, 22, 23, 24 may be used used to signify ' Spring', 'Summer', 'Autumn', 'Winter', respectively, in place of a month value (01 through 12) for a year-and-month format string" +msgstr "Primavera, 2001. Los valores 21, 22, 23, 24 pueden usarse para significar 'primavera', 'verano', 'otoño', 'invierno', respectivamente, en lugar de un valor de mes (01 a 12) para uncadena de formato de año y mes" + +#: app/templates/javascript.htm:279 +msgid "The year -100000. 'Y' may be used at the beginning of the date string to signify that the date is a year, when (and only when) the year exceeds four digits, i.e. for years later than 9999 or earlier than -9999." +msgstr "El año -100000.'Y' se puede usar al comienzo de la cadena de fecha para significar que la fecha es un año, cuando (y solo cuando) el año excede los cuatro dígitos, es decir, durante años más tarde que 9999 o antes de -9999." + +#: app/templates/javascript.htm:280 +msgid "A time interval with calendar year precision, beginning sometime in 1964 and ending sometime in 2008" +msgstr "Un intervalo de tiempo con precisión del año calendario, comenzando en algún momento de 1964 y terminando en algún momento de 2008" + +#: app/templates/javascript.htm:281 +msgid "A time interval with calendar month precision, beginning sometime in June 2004 and ending sometime in August of 2006" +msgstr "Un intervalo de tiempo con precisión del mes calendario, comenzando en algún momento de junio de 2004 y que termina en algún momento de agosto de 2006" + +#: app/templates/javascript.htm:282 +#, fuzzy +msgid "A time interval beginning sometime on February 1, 2004 and ending sometime in 2005. The start endpoint has calendar day precision and the end endpoint has calendar year precision" +msgstr "Un intervalo de tiempo que comienza en algún momento del 1 de febrero de 2004 y que termina en algún momento de 2005. El punto final de inicio tiene precisión del día calendario y el punto final final tiene precisión del año calendario" + +#: app/templates/javascript.htm:283 +msgid "[year][“-”][month][“-”][day]" +msgstr "[año] [“-”] [mes] [“-”] [día]" + +#: app/templates/javascript.htm:284 +msgid "Refers to the calendar date 2021 April 12th with day precision" +msgstr "Se refiere a la fecha del calendario 2021 12 de abril con precisión del día" + +#: app/templates/javascript.htm:285 +msgid "[year][“-”][month]" +msgstr "[año] [\"-\"] [mes]" + +#: app/templates/javascript.htm:286 +msgid "Refers to the calendar month April 2021 with month precision" +msgstr "Se refiere al calendario mes abril de 2021 con precisión mes" + +#: app/templates/javascript.htm:287 +msgid " [year]" +msgstr " [año]" + +#: app/templates/javascript.htm:288 +msgid "Refers to the year 2021 with year precision" +msgstr "Se refiere al año 2021 con la precisión del año" + +#: app/templates/javascript.htm:289 +msgid "Some common encodings:" +msgstr "Algunas codificaciones comunes:" + +#: app/templates/javascript.htm:290 +msgid "EDTF Date Specfication (Library of Congress)" +msgstr "EDTF Especificación de fecha (Biblioteca del Congreso)" + +#: app/templates/javascript.htm:291 +msgid "The EDTF datatype allows you to describe dates (even uncertain dates). You can find a summary of the standard here:" +msgstr "El tipo de datos EDTF le permite describir fechas (incluso fechas inciertas).Puede encontrar un resumen del estándar aquí:" + +#: app/templates/javascript.htm:292 +msgid "Extended Date/Time Formats (EDTF)" +msgstr "Formatos de fecha/hora extendidos (EDTF)" + +#: app/templates/javascript.htm:293 +msgid "EDTF Formats" +msgstr "Formatos EDTF" + +#: app/templates/javascript.htm:294 +msgid "Loading Time Wheel" +msgstr "Rueda de tiempo de carga" + +#: app/templates/javascript.htm:295 +msgid "Time Wheel" +msgstr "Rueda de tiempo" + +#: app/templates/javascript.htm:296 +msgid "Click on a block to set a filter, double-click to zoom in, double-click center to zoom out" +msgstr "Haga clic en un bloque Para configurar un filtro, haga doble clic para acercarse, haga doble clic en el centro para alejarse" + +#: app/templates/javascript.htm:297 +msgid "Last 7 Days" +msgstr "Últimos 7 días" + +#: app/templates/javascript.htm:298 +msgid "Last 30 Days" +msgstr "Últimos 30 días" + +#: app/templates/javascript.htm:299 app/templates/views/provisional-history-list.htm:19 +msgid "This week" +msgstr "Esta semana" + +#: app/templates/javascript.htm:300 app/templates/views/provisional-history-list.htm:20 +msgid "This month" +msgstr "Este mes" + +#: app/templates/javascript.htm:301 app/templates/views/provisional-history-list.htm:21 +msgid "This quarter" +msgstr "Este trimestre" + +#: app/templates/javascript.htm:302 app/templates/views/provisional-history-list.htm:22 +msgid "This year" +msgstr "Este año" + +#: app/templates/javascript.htm:303 app/templates/views/provisional-history-list.htm:16 +msgid "Today" +msgstr "Hoy" + +#: app/templates/javascript.htm:304 app/templates/views/provisional-history-list.htm:15 +msgid "Custom date range" +msgstr "Gama de fechas personalizadas" + +#: app/templates/javascript.htm:305 +msgid "Search all dates" +msgstr "Buscar todas las fechas" + +#: app/templates/javascript.htm:306 +msgid "Date Type" +msgstr "Tipo de fecha" + +#: app/templates/javascript.htm:307 +msgid "Date Interval" +msgstr "Intervalo de fecha" + +#: app/templates/javascript.htm:308 +msgid "Minimum Date" +msgstr "Fecha mínima" + +#: app/templates/javascript.htm:309 +msgid "Maximum Date" +msgstr "Fecha máxima" + +#: app/templates/javascript.htm:310 +msgid "Date Format" +msgstr "Formato de fecha" + +#: app/templates/javascript.htm:311 +msgid "Has no value" +msgstr "No tiene valor" + +#: app/templates/javascript.htm:312 +msgid "Has any value" +msgstr "Tiene cualquier valor" + +#: app/templates/javascript.htm:314 +msgid "Format" +msgstr "Formato" + +#: app/templates/javascript.htm:315 +msgid "view valid formats" +msgstr "ver formatos válidos" + +#: app/templates/javascript.htm:316 +msgid "Max" +msgstr "Máximo" + +#: app/templates/javascript.htm:317 +msgid "Min" +msgstr "Mínimo" + +#: app/templates/javascript.htm:318 +msgid "Increment" +msgstr "Incremento" + +#: app/templates/javascript.htm:319 +msgid "Increment Size" +msgstr "Tamaño de incremento" + +#: app/templates/javascript.htm:320 +msgid "Decimal Places" +msgstr "Lugares decimales" + +#: app/templates/javascript.htm:321 +msgid "Number of decimal places" +msgstr "Número de decimales" + +#: app/templates/javascript.htm:322 +msgid "Prefix" +msgstr "Prefijo" + +#: app/templates/javascript.htm:323 +msgid "Field Prefix" +msgstr "Prefijo de campo" + +#: app/templates/javascript.htm:324 +msgid "suffix" +msgstr "sufijo" + +#: app/templates/javascript.htm:325 +msgid "Field Suffix" +msgstr "Sufijo de campo" + +#: app/templates/javascript.htm:326 +msgid "From" +msgstr "De" + +#: app/templates/javascript.htm:327 +msgid "To" +msgstr "A" + +#: app/templates/javascript.htm:328 +msgid "Select" +msgstr "Seleccionar" + +#: app/templates/javascript.htm:329 +msgid "Within" +msgstr "Dentro" + +#: app/templates/javascript.htm:330 +msgid "overlaps" +msgstr "superpone" + +#: app/templates/javascript.htm:331 +msgid "equals" +msgstr "iguales" + +#: app/templates/javascript.htm:332 +msgid "is not" +msgstr "no es" + +#: app/templates/javascript.htm:333 +msgid "not" +msgstr "no" + +#: app/templates/javascript.htm:334 +msgid "like" +msgstr "como" + +#: app/templates/javascript.htm:335 +msgid "not like" +msgstr "no como" + +#: app/templates/javascript.htm:336 +msgid "and" +msgstr "y" + +#: app/templates/javascript.htm:337 +msgid "or" +msgstr "o" + +#: app/templates/javascript.htm:338 +msgid "of" +msgstr "de" + +#: app/templates/javascript.htm:341 app/templates/views/user-profile-manager.htm:111 +msgid "None" +msgstr "Ninguno" + +#: app/templates/javascript.htm:342 app/templates/views/graph.htm:71 app/templates/views/graph/card-configuration/card-form-preview.htm:83 +msgid "Add" +msgstr "Agregar" + +#: app/templates/javascript.htm:343 +msgid "Remove" +msgstr "Eliminar" + +#: app/templates/javascript.htm:344 app/templates/views/graph.htm:41 app/templates/views/graph/function-manager.htm:81 app/templates/views/resource.htm:41 +msgid "Find" +msgstr "Encontrar" + +#: app/templates/javascript.htm:345 +msgid "Filter" +msgstr "Filtrar" + +#: app/templates/javascript.htm:346 app/templates/views/list.htm:20 +msgid "Clear" +msgstr "Limpiar" + +#: app/templates/javascript.htm:347 +msgid "Clear Filter" +msgstr "Limpiar Filtro" + +#: app/templates/javascript.htm:348 +msgid "Buffer" +msgstr "Buffer" + +#: app/templates/javascript.htm:349 +msgid "Distance" +msgstr "Distancia" + +#: app/templates/javascript.htm:350 app/templates/views/resource/editor.htm:235 +msgid "New" +msgstr "Nuevo" + +#: app/templates/javascript.htm:351 app/templates/views/resource/editor.htm:262 +msgid "Add New" +msgstr "Agregar nuevo" + +#: app/templates/javascript.htm:352 +msgid "Return" +msgstr "Retornar" + +#: app/templates/javascript.htm:353 +msgid "csv" +msgstr "csv" + +#: app/templates/javascript.htm:354 +msgid "html" +msgstr "html" + +#: app/templates/javascript.htm:355 +msgid "shapefile" +msgstr "archivo de forma" + +#: app/templates/javascript.htm:356 +msgid "geojson url" +msgstr "geojson url" + +#: app/templates/javascript.htm:357 +msgid "tile excel" +msgstr "mosaico de excel" + +#: app/templates/javascript.htm:358 +msgid "Copy to clipboard" +msgstr "Copiar al portapapeles" + +#: app/templates/javascript.htm:359 +msgid "Info" +msgstr "Información" + +#: app/templates/javascript.htm:360 +msgid "Arches Export" +msgstr "Exportación de arches" + +#: app/templates/javascript.htm:361 +msgid "Include the report link in the export?" +msgstr "¿Incluir el enlace del informe en la exportación?" + +#: app/templates/javascript.htm:362 +msgid "1. Format" +msgstr "1. Formato" + +#: app/templates/javascript.htm:363 +msgid "Select the format you'd like for your export data. (tile excel and geojson formats require a resource type filter)" +msgstr "Seleccione el formato que desea para sus datos de exportación.(Los formatos de Tile Excel y GeoJson requieren un filtro de tipo de recurso)" + +#: app/templates/javascript.htm:364 +msgid "2. Coordinate Precision" +msgstr "2. Precisión de Coordenadas" + +#: app/templates/javascript.htm:365 +msgid "Tell us how many decimal places of precision you'd like for geo-data results" +msgstr "Díganos cuántos lugares de precisión decimales le gustaría para los resultados de Geo-Data" + +#: app/templates/javascript.htm:366 +msgid "3. Report Link" +msgstr "3. Enlace de informe" + +#: app/templates/javascript.htm:367 +msgid "Only applicable to CSV and shapefile exports" +msgstr "Solo aplicable a las exportaciones de CSV y archivos de forma (shapefiles)" + +#: app/templates/javascript.htm:368 +msgid "4. Name this export" +msgstr "4. Nombra esta exportación" + +#: app/templates/javascript.htm:369 +msgid "5. Email Address" +msgstr "5. Dirección de correo electrónico" + +#: app/templates/javascript.htm:370 +msgid "This download may take some time. Tell us where to email a download link to your results" +msgstr "Esta descarga puede llevar algo de tiempo. Díganos dónde enviar un correo electrónico un enlace de descarga a sus resultados" + +#: app/templates/javascript.htm:371 +msgid "Export Search Results" +msgstr "Resultados de búsqueda de exportación" + +#: app/templates/javascript.htm:372 +msgid "Advanced Search" +msgstr "Búsqueda avanzada" + +#: app/templates/javascript.htm:373 +msgid "With Advanced Search you can build more sophisticated search queries. Select the search facets you wish to query from the list on the right. Then enter your criteria to customize your search filters" +msgstr "Con la búsqueda avanzada puede construir consultas de búsqueda más sofisticadas.Seleccione las facetas de búsqueda que desea consultar desde la lista de la derecha.Luego ingrese sus criterios para personalizar sus filtros de búsqueda" + +#: app/templates/javascript.htm:374 +msgid "Map Search" +msgstr "Búsqueda de mapas" + +#: app/templates/javascript.htm:375 +msgid "Accept GeoJSON" +msgstr "Acepta Geojson" + +#: app/templates/javascript.htm:376 +msgid "GeoJSON has the following errors that must be resolved:" +msgstr "Geojson tiene los siguientes errores que deben resolverse:" + +#: app/templates/javascript.htm:377 +msgid "Edit GeoJSON" +msgstr "Editar Geojson" + +#: app/templates/javascript.htm:378 +msgid "Edit Coordinates" +msgstr "Editar coordenadas" + +#: app/templates/javascript.htm:379 +msgid "Show Feature" +msgstr "Show" + +#: app/templates/javascript.htm:380 +msgid "Coordinate Reference:" +msgstr "Referencia de coordenadas:" + +#: app/templates/javascript.htm:381 +msgid "Zoom to all" +msgstr "Zoom a todos" + +#: app/templates/javascript.htm:382 +msgid "Zoom to all features" +msgstr "Zoom a todas las características" + +#: app/templates/javascript.htm:383 +msgid "No Email saved for User" +msgstr "No hay correo electrónico guardado para el usuario" + +#: app/templates/javascript.htm:384 +msgid "Drag GeoJSON or KML files here to add" +msgstr "Arrastre los archivos de Geojson o KML aquí para agregar" + +#: app/templates/javascript.htm:385 +msgid "The following errors occurred:" +msgstr "Ocurrieron los siguientes errores:" + +#: app/templates/javascript.htm:387 +msgid "Enter Search String here" +msgstr "Ingrese la cadena de búsqueda aquí" + +#: app/templates/javascript.htm:388 +msgid "View search string" +msgstr "Ver cadena de búsqueda" + +#: app/templates/javascript.htm:389 +msgid "Search String - use to filter resources displayed" +msgstr "Cadena de búsqueda: se use para filtrar los recursos mostrados" + +#: app/templates/javascript.htm:390 +msgid "Saved Search" +msgstr "Búsqueda guardada" + +#: app/templates/javascript.htm:391 +msgid "The Arches site administrator hasn't saved any searches yet." +msgstr "El administrador del sitio de Arches aún no ha guardado ninguna búsqueda." + +#: app/templates/javascript.htm:392 +msgid "searching" +msgstr "buscando" + +#: app/templates/javascript.htm:393 +msgid "Search Facets" +msgstr "Buscar facetas" + +#: app/templates/javascript.htm:394 +msgid "Analyze" +msgstr "Analizar" + +#: app/templates/javascript.htm:396 app/templates/javascript.htm:521 +msgid "Legend" +msgstr "Leyenda" + +#: app/templates/javascript.htm:397 +msgid "close" +msgstr "cerrar" + +#: app/templates/javascript.htm:398 app/templates/views/resource/edit-log.htm:93 app/templates/views/resource/edit-log.htm:96 app/templates/views/user-profile-manager.htm:91 +msgid "Edit" +msgstr "Editar" + +#: app/templates/javascript.htm:400 +msgid "Details" +msgstr "Detalles" + +#: app/templates/javascript.htm:401 +msgid "Report" +msgstr "Informe" + +#: app/templates/javascript.htm:402 app/templates/views/graph/graph-base.htm:48 app/templates/views/rdm/modals/add-image-form.htm:21 +msgid "Done" +msgstr "Hecho" + +#: app/templates/javascript.htm:403 +msgid "Apply" +msgstr "Aplicar" + +#: app/templates/javascript.htm:405 +msgid "Panels" +msgstr "Paneles" + +#: app/templates/javascript.htm:406 +msgid "Single Panel" +msgstr "Panel único" + +#: app/templates/javascript.htm:407 +msgid "Double Panel" +msgstr "Panel doble" + +#: app/templates/javascript.htm:408 +msgid "Panel 1" +msgstr "Panel 1" + +#: app/templates/javascript.htm:409 +msgid "Panel 2" +msgstr "Panel 2" + +#: app/templates/javascript.htm:410 +msgid "Panel Layout" +msgstr "Diseño del panel" + +#: app/templates/javascript.htm:411 +msgid "Selected Panel Layout" +msgstr "Diseño del panel seleccionado" + +#: app/templates/javascript.htm:412 +msgid "Annotation(s)" +msgstr "Anotacion(es)" + +#: app/templates/javascript.htm:413 +msgid "Brightness" +msgstr "Brillo" + +#: app/templates/javascript.htm:414 +msgid "Contrast" +msgstr "Contraste" + +#: app/templates/javascript.htm:415 +msgid "Saturation" +msgstr "Saturación" + +#: app/templates/javascript.htm:416 +msgid "Greyscale" +msgstr "Escala de grises" + +#: app/templates/javascript.htm:417 app/templates/javascript.htm:420 +msgid "Default Color" +msgstr "Color predeterminado" + +#: app/templates/javascript.htm:418 +msgid "Selected Feature Color" +msgstr "Color de características seleccionado" + +#: app/templates/javascript.htm:419 +msgid "Hovered Feature Color" +msgstr "Color de características flotado" + +#: app/templates/javascript.htm:421 +msgid "Layer Color Palette" +msgstr "Paleta de colores de capa" + +#: app/templates/javascript.htm:422 +msgid "Fill Opacity" +msgstr "Llenar la opacidad" + +#: app/templates/javascript.htm:423 +msgid "Fill Color" +msgstr "Color de llenado" + +#: app/templates/javascript.htm:424 +msgid "Overview Zoom" +msgstr "Descripción general zoom" + +#: app/templates/javascript.htm:425 +msgid "Min Zoom" +msgstr "Min zoom" + +#: app/templates/javascript.htm:426 +msgid "Point Radius" +msgstr "Radio del punto" + +#: app/templates/javascript.htm:427 +msgid "Line Opacity" +msgstr "Opacidad de línea" + +#: app/templates/javascript.htm:428 +msgid "Line Width" +msgstr "Ancho de línea" + +#: app/templates/javascript.htm:429 +msgid "Line Color" +msgstr "Color de línea" + +#: app/templates/javascript.htm:430 +msgid "Stroke Color" +msgstr "Color del trazo de línea" + +#: app/templates/javascript.htm:431 +msgid "Stroke Width" +msgstr "Ancho del trazo de línea" + +#: app/templates/javascript.htm:432 +msgid "Point Stroke Width" +msgstr "Ancho de trazo de puntos" + +#: app/templates/javascript.htm:433 +msgid "Point Stroke Opacity" +msgstr "Opacidad del trazo de punto" + +#: app/templates/javascript.htm:434 +msgid "Show Style Tools" +msgstr "Mostrar herramientas de estilo" + +#: app/templates/javascript.htm:435 +msgid "Hide Style Tools" +msgstr "Ocultar herramientas de estilo" + +#: app/templates/javascript.htm:436 +msgid "dismiss" +msgstr "descartar" + +#: app/templates/javascript.htm:437 +msgid "Preview" +msgstr "Vista Previa" + +#: app/templates/javascript.htm:438 app/templates/views/map-layer-manager.htm:72 +msgid "Basemap" +msgstr "Mapa base" + +#: app/templates/javascript.htm:441 +msgid "Participating Layers" +msgstr "Capas participantes" + +#: app/templates/javascript.htm:442 +msgid "Add a new feature" +msgstr "Agregar una nueva característica" + +#: app/templates/javascript.htm:443 +msgid "files uploaded" +msgstr "archivos cargados" + +#: app/templates/javascript.htm:444 +msgid "Max File Size (mb)" +msgstr "Tamaño de archivo máximo (MB)" + +#: app/templates/javascript.htm:445 +msgid "example: .jpg, .png, .txt" +msgstr "ejemplo: .jpg, .png, .txt" + +#: app/templates/javascript.htm:446 +msgid "Images formatted as .jpg, .png, .tiff files may be uploaded. Other formats will be ignored" +msgstr "Imágenes formateadas como .jpg, .png, .tiff Los archivos se pueden cargar. Otros formatos serán ignorados" + +#: app/templates/javascript.htm:447 +msgid "Accepted formats: .jpg, .png, .tiff" +msgstr "Formatos aceptados: .jpg, .png, .tiff" + +#: app/templates/javascript.htm:448 +msgid "Accepted File Types" +msgstr "Tipos de archivos aceptados" + +#: app/templates/javascript.htm:449 +msgid "Show all files" +msgstr "Mostrar todos los archivos" + +#: app/templates/javascript.htm:450 +msgid "Show first 5 files" +msgstr "Mostrar los primeros 5 archivos" + +#: app/templates/javascript.htm:451 +msgid "Show first 10 files" +msgstr "Mostrar los primeros 10 archivos" + +#: app/templates/javascript.htm:452 +msgid "Show first 25 files" +msgstr "Mostrar los primeros 25 archivos" + +#: app/templates/javascript.htm:453 +msgid "error" +msgstr "error" + +#: app/templates/javascript.htm:454 +msgid "Unsaved" +msgstr "No guardado" + +#: app/templates/javascript.htm:455 +msgid "delete all files" +msgstr "eliminar todos los archivos" + +#: app/templates/javascript.htm:456 +msgid "add more files" +msgstr "agregar más archivos" + +#: app/templates/javascript.htm:457 +msgid "file(s) uploaded" +msgstr "archivo(s) cargados" + +#: app/templates/javascript.htm:458 +msgid "find a file" +msgstr "encontrar un archivo" + +#: app/templates/javascript.htm:459 +msgid "Uploaded Files" +msgstr "Archivos cargados" + +#: app/templates/javascript.htm:460 +msgid "Allowed document formats:" +msgstr "Formatos de documento permitidos:" + +#: app/templates/javascript.htm:461 +msgid "You may upload as many documents as you wish, but the maximum size of any single file is" +msgstr "Puede cargar tantos documentos que desee, pero el tamaño máximo de cualquier archivo es" + +#: app/templates/javascript.htm:462 +msgid "You may upload as many photos as you wish, but the maximum size of any single file is 8MB." +msgstr "Puede cargar tantas fotos como desee, pero el tamaño máximo de cualquier archivo es 8 MB." + +#: app/templates/javascript.htm:463 +msgid "Adding documents to this record is optional." +msgstr "Agregar documentos a este registro es opcional." + +#: app/templates/javascript.htm:464 +msgid "Adding photos to this record is optional." +msgstr "Agregar fotos a este registro es opcional." + +#: app/templates/javascript.htm:465 +msgid "Select Files" +msgstr "Seleccionar archivos" + +#: app/templates/javascript.htm:466 +msgid "Select Photographs" +msgstr "Seleccionar fotografías" + +#: app/templates/javascript.htm:467 +msgid "Drag & Drop your files onto this panel" +msgstr "Arrastre y suelte sus archivos en este panel" + +#: app/templates/javascript.htm:468 +msgid "Drag & Drop your photos onto this panel" +msgstr "Arrastre y suelte sus fotos en este panel" + +#: app/templates/javascript.htm:469 +msgid "Upload Photographs" +msgstr "Subir fotografías" + +#: app/templates/javascript.htm:470 +msgid "Upload Documents" +msgstr "Cargar documentos" + +#: app/templates/javascript.htm:471 +msgid "Show Gallery" +msgstr "Mostrar Galería" + +#: app/templates/javascript.htm:472 +msgid "Hide Gallery" +msgstr "Ocultar Galería" + +#: app/templates/javascript.htm:473 +msgid "Select default value" +msgstr "Seleccione el valor predeterminado" + +#: app/templates/javascript.htm:474 +msgid "Select a filter" +msgstr "Seleccione un filtro" + +#: app/templates/javascript.htm:475 +msgid "Default Manifest URL" +msgstr "Manifiesto URL predeterminado" + +#: app/templates/javascript.htm:476 +msgid "Enter Manifest URL" +msgstr "Ingrese Manifiesto URL" + +#: app/templates/javascript.htm:477 +msgid "Select a manifest" +msgstr "Seleccione un manifiesto" + +#: app/templates/javascript.htm:478 app/templates/javascript.htm:669 +msgid "No manifest selected" +msgstr "Ningún manifiesto seleccionado" + +#: app/templates/javascript.htm:479 +msgid "Load manifest" +msgstr "Cargar manifiesto" + +#: app/templates/javascript.htm:480 +msgid "Loading manifest" +msgstr "Cargando manifiesto" + +#: app/templates/javascript.htm:481 +msgid "Error loading manifest" +msgstr "Error Cargando Manifiesto" + +#: app/templates/javascript.htm:483 +msgid "Filter images" +msgstr "Filtro de Imágenes" + +#: app/templates/javascript.htm:484 +msgid "Draw a" +msgstr "Dibujar un" + +#: app/templates/javascript.htm:485 +msgid "View Gallery" +msgstr "Ver galería" + +#: app/templates/javascript.htm:486 +msgid "Image" +msgstr "Imagen" + +#: app/templates/javascript.htm:487 +msgid "Image List" +msgstr "Lista de imágenes" + +#: app/templates/javascript.htm:488 +msgid "Image Tools" +msgstr "Herramientas de imagen" + +#: app/templates/javascript.htm:489 app/templates/javascript.htm:667 +msgid "Switch Image Service" +msgstr "Intercambiar Servicio de Imagen" + +#: app/templates/javascript.htm:490 +msgid "Resource Instance Name" +msgstr "Nombre de instancia de recursos" + +#: app/templates/javascript.htm:491 app/templates/javascript.htm:620 +msgid "Related Resource Summary" +msgstr "Resumen de recursos relacionados" + +#: app/templates/javascript.htm:492 app/templates/views/graph-designer.htm:34 +msgid "Resource Model" +msgstr "Modelo de recursos" + +#: app/templates/javascript.htm:493 app/templates/views/edit-history.htm:18 +msgid "Resource Type" +msgstr "Tipo de recurso" + +#: app/templates/javascript.htm:494 +msgid "Resource Details" +msgstr "Detalles de recursos" + +#: app/templates/javascript.htm:495 +msgid "Click the 'Details' link on a search result from the list on the left to view more information about a resource." +msgstr "Haga clic en el enlace 'Detalles' en un resultado de búsqueda de la lista de la izquierda para ver más información sobre un recurso." + +#: app/templates/javascript.htm:496 +msgid "Resource Information" +msgstr "Información de recursos" + +#: app/templates/javascript.htm:497 +msgid "Has Relationship" +msgstr "Tiene relación" + +#: app/templates/javascript.htm:498 +msgid "Resource's relationship to" +msgstr "Relación de los recursos con" + +#: app/templates/javascript.htm:499 +msgid "Related to" +msgstr "Relacionado a" + +#: app/templates/javascript.htm:500 +msgid "'s relationship to Resource" +msgstr "La relación con los recursos" + +#: app/templates/javascript.htm:501 +msgid "Relationships" +msgstr "Relaciones" + +#: app/templates/javascript.htm:502 +msgid "relationships shown" +msgstr "relaciones Mostradas" + +#: app/templates/javascript.htm:503 +msgid "Search Network" +msgstr "Red de búsqueda" + +#: app/templates/javascript.htm:504 +msgid "Analyze Network" +msgstr "Analizar la Red" + +#: app/templates/javascript.htm:505 +msgid "Click a node/edge for info" +msgstr "Haga clic en un nodo/borde para obtener información" + +#: app/templates/javascript.htm:506 +msgid "Click a node to show more relationships" +msgstr "Haga clic en un nodo para mostrar más relaciones" + +#: app/templates/javascript.htm:507 +msgid "Click a node refocus" +msgstr "Haga clic en un reenfoque de nodo" + +#: app/templates/javascript.htm:508 +msgid "Click a node/edge to remove" +msgstr "Haga clic en un nodo/borde para eliminar" + +#: app/templates/javascript.htm:510 +msgid "Workflow Complete" +msgstr "Flujo de trabajo completo" + +#: app/templates/javascript.htm:511 +msgid "with" +msgstr "con" + +#: app/templates/javascript.htm:512 +msgid "Link Text (Optional)" +msgstr "Texto de enlace (opcional)" + +#: app/templates/javascript.htm:513 +msgid "URL for link" +msgstr "URL para enlace" + +#: app/templates/javascript.htm:514 +msgid "URL Link Color" +msgstr "Color de enlace URL" + +#: app/templates/javascript.htm:515 +msgid "URL Placeholder" +msgstr "Marcador de posición URL" + +#: app/templates/javascript.htm:516 +msgid "URL Label Placeholder" +msgstr "Marcador de posición de la etiqueta URL" + +#: app/templates/javascript.htm:517 +msgid "Default relationship to" +msgstr "Relación predeterminada con" + +#: app/templates/javascript.htm:518 +msgid "Default inverse relationship to" +msgstr "Relación inversa predeterminada con" + +#: app/templates/javascript.htm:519 +msgid "References" +msgstr "Referencias" + +#: app/templates/javascript.htm:520 +msgid "Does not reference" +msgstr "No hace referencia" + +#: app/templates/javascript.htm:522 +msgid "Check to limit the dropdown to only this widget's node rather than all nodes in the tile." +msgstr "Verifique para limitar el menú desplegable solo al nodo de este widget en lugar de todos los nodos en el mosaico." + +#: app/templates/javascript.htm:523 +msgid "Show only the value of the selected node in the dropdown options" +msgstr "Mostrar solo el valor del nodo seleccionado en las opciones desplegables" + +#: app/templates/javascript.htm:524 +msgid "Dropdown Format" +msgstr "Formato desplegable" + +#: app/templates/javascript.htm:525 +msgid "Provisional" +msgstr "Provisional" + +#: app/templates/javascript.htm:526 +msgid "Card Name" +msgstr "Nombre de la tarjeta" + +#: app/templates/javascript.htm:527 +msgid "Add Tab" +msgstr "Agregar pestaña" + +#: app/templates/javascript.htm:528 +msgid "Tab Name" +msgstr "Nombre de la pestaña" + +#: app/templates/javascript.htm:529 +msgid "Find a resource..." +msgstr "Encontrar un recurso..." + +#: app/templates/javascript.htm:530 +msgid "Find an icon" +msgstr "Encontrar un icono" + +#: app/templates/javascript.htm:531 +msgid "Select Tab icon" +msgstr "Seleccionar icono de pestaña" + +#: app/templates/javascript.htm:532 +msgid "Select cards in this tab" +msgstr "Seleccionar tarjetas en esta pestaña" + +#: app/templates/javascript.htm:533 +msgid "Enter manifest URL" +msgstr "Ingresar manifiesto URL" + +#: app/templates/javascript.htm:534 +msgid "Default Image Service URL" +msgstr "URL de servicio de imagen predeterminado" + +#: app/templates/javascript.htm:536 +msgid "Select image nodes to include" +msgstr "Seleccione los nodos de imagen para incluir" + +#: app/templates/javascript.htm:537 +msgid "Select an Ontology Property" +msgstr "Seleccione una propiedad de ontología" + +#: app/templates/javascript.htm:538 +msgid "Select a resource" +msgstr "Seleccione un recurso" + +#: app/templates/javascript.htm:539 +msgid "Select a resource model" +msgstr "Seleccione un modelo de recursos" + +#: app/templates/javascript.htm:542 +msgid "Choose a sibling card" +msgstr "Elija una tarjeta de hermanos" + +#: app/templates/javascript.htm:546 +msgid "This resource has provisional edits that are pending review" +msgstr "Este recurso tiene ediciones provisionales que están pendientes de revisión" + +#: app/templates/javascript.htm:547 +msgid "This resource has provisional edits (not displayed in this report) that are pending review" +msgstr "Este recurso tiene ediciones provisionales (no mostradas en este informe) que están pendientes de revisión" + +#: app/templates/javascript.htm:548 +msgid "Find an address" +msgstr "Encontrar una dirección" + +#: app/templates/javascript.htm:549 +msgid "Select drawings text (optional)" +msgstr "Seleccionar texto de dibujos (opcional)" + +#: app/templates/javascript.htm:550 +msgid "Select drawings map source (optional)" +msgstr "Seleccione la fuente del mapa de dibujos (opcional)" + +#: app/templates/javascript.htm:551 +msgid "Select drawings map source layer (optional)" +msgstr "Seleccione la capa fuente del mapa de dibujos (opcional)" + +#: app/templates/javascript.htm:552 +msgid "Map Center Longitude" +msgstr "Longitud del centro de mapa" + +#: app/templates/javascript.htm:553 +msgid "Map Center Latitude" +msgstr "Latitud del centro de mapa" + +#: app/templates/javascript.htm:554 +msgid "Longitude (x coordinate)" +msgstr "Longitud (coordenada x)" + +#: app/templates/javascript.htm:555 +msgid "Latitude (y coordinate)" +msgstr "Latitud (coordenada y)" + +#: app/templates/javascript.htm:556 +msgid "Available Geometry Types" +msgstr "Tipos de geometría disponibles" + +#: app/templates/javascript.htm:557 +msgid "Zoom Level" +msgstr "Nivel de zoom" + +#: app/templates/javascript.htm:558 +msgid "Default Zoom" +msgstr "Zoom predeterminado" + +#: app/templates/javascript.htm:559 +msgid "Update Features" +msgstr "Actualizar funciones" + +#: app/templates/javascript.htm:560 +msgid "feature(s)" +msgstr "características)" + +#: app/templates/javascript.htm:561 +msgid "Point" +msgstr "Punto" + +#: app/templates/javascript.htm:562 +msgid "Line" +msgstr "Línea" + +#: app/templates/javascript.htm:563 +msgid "Polygon" +msgstr "Polígono" + +#: app/templates/javascript.htm:564 +msgid "Add point" +msgstr "Añadir punto" + +#: app/templates/javascript.htm:565 +msgid "Add line" +msgstr "Agregar línea" + +#: app/templates/javascript.htm:566 +msgid "Add polygon" +msgstr "Agregar polígono" + +#: app/templates/javascript.htm:567 +msgid "Select drawing" +msgstr "Seleccionar dibujo" + +#: app/templates/javascript.htm:568 +msgid "Related instance map sources" +msgstr "Fuentes de mapa de instancias relacionadas" + +#: app/templates/javascript.htm:569 +msgid "Related instance map source layers (optional)" +msgstr "Capas de origen de mapa de instancia relacionada (opcional)" + +#: app/templates/javascript.htm:570 +msgid "Intersection layer configuration" +msgstr "Configuración de la capa de intersección" + +#: app/templates/javascript.htm:571 +#, python-brace-format +msgid "Create a new ${graphName}" +msgstr "Crear un nuevo ${graphName}" + +#: app/templates/javascript.htm:572 +msgid "Add new Relationship" +msgstr "Agregar nueva Relación" + +#: app/templates/javascript.htm:573 +msgid "Network response was not ok" +msgstr "La respuesta de la red no estaba bien" + +#: app/templates/javascript.htm:575 +msgid "Term Matches" +msgstr "Coincidencias de término" + +#: app/templates/javascript.htm:576 +#, python-brace-format +msgid "${total} date values" +msgstr "$ {total} valores de fecha" + +#: app/templates/javascript.htm:577 +msgid "Select Widgets" +msgstr "Seleccionar widgets" + +#: app/templates/javascript.htm:578 +msgid "(This card data will define the resource description.)" +msgstr "(Los datos de esta tarjeta definirán la descripción del recurso.)" + +#: app/templates/javascript.htm:579 +msgid "(This card data will define the resource name.)" +msgstr "(Los datos de esta tarjeta definirán el nombre del recurso.)" + +#: app/templates/javascript.htm:580 +msgid "Settings Conflict: Remove this card from grouped card?" +msgstr "Conflicto de configuración: ¿eliminar esta tarjeta de la tarjeta agrupada?" + +#: app/templates/javascript.htm:581 +#, python-brace-format +msgid "The cardinality of this card cannot be changed until you remove it from being grouped with the ${cardName} card. Do you want to remove this card from being grouped with the ${cardName} card" +msgstr "La cardinalidad de esta tarjeta no se puede cambiar hasta que no la elimine de estar agrupada con la tarjeta ${cardName}. ¿Desea que esta tarjeta deje de estar agrupada con la tarjeta ${cardName}" + +#: app/templates/javascript.htm:582 +msgid "!! Referenced model does not exist -- Delete and select a new model !!" +msgstr "¡!El modelo referenciado no existe: ¡elimine y seleccione un nuevo modelo!" + +#: app/templates/javascript.htm:583 app/templates/views/map-layer-manager.htm:132 +msgid "Layer Preview" +msgstr "Vista previa de la capa" + +#: app/templates/javascript.htm:584 +msgid "Layer Icon" +msgstr "Icono de capa" + +#: app/templates/javascript.htm:585 app/templates/views/graph-designer.htm:127 app/templates/views/graph-designer.htm:136 app/templates/views/graph/function-manager.htm:29 app/templates/views/map-layer-manager.htm:123 +msgid "Save Edits" +msgstr "Guardar ediciones" + +#: app/templates/javascript.htm:586 app/templates/views/graph-designer.htm:125 app/templates/views/graph-designer.htm:134 app/templates/views/graph/function-manager.htm:28 app/templates/views/map-layer-manager.htm:124 +msgid "Discard Edits" +msgstr "Descartar ediciones" + +#: app/templates/javascript.htm:587 +msgid "Activated" +msgstr "Activado" + +#: app/templates/javascript.htm:591 +msgid "Layer Name" +msgstr "Nombre de la capa" + +#: app/templates/javascript.htm:592 +msgid "Add to search map by default:" +msgstr "Agregar al mapa de búsqueda de forma predeterminada:" + +#: app/templates/javascript.htm:593 +msgid "Legend content" +msgstr "Contenido de leyenda" + +#: app/templates/javascript.htm:595 +msgid "Layer has no data - data on map is for preview purposes. This layer will not show up in map overlays until data is added." +msgstr "La capa no tiene datos: los datos en el mapa son para fines previos. Esta capa no aparecerá en superposiciones de mapas hasta que se agregan datos." + +#: app/templates/javascript.htm:596 +msgid "Point Style" +msgstr "Estilo de punto" + +#: app/templates/javascript.htm:597 +msgid "Line Style" +msgstr "Estilo de línea" + +#: app/templates/javascript.htm:598 +msgid "Polygon Style" +msgstr "Estilo polígono" + +#: app/templates/javascript.htm:600 +msgid "Halo color" +msgstr "Color de halo" + +#: app/templates/javascript.htm:601 +msgid "Fill color" +msgstr "Color de llenado" + +#: app/templates/javascript.htm:602 +msgid "Radius" +msgstr "Radio" + +#: app/templates/javascript.htm:603 +msgid "Halo radius" +msgstr "Radio de halo" + +#: app/templates/javascript.htm:604 +msgid "Weight" +msgstr "Peso" + +#: app/templates/javascript.htm:605 +msgid "Halo weight" +msgstr "Peso de halo" + +#: app/templates/javascript.htm:606 +msgid "Outline color" +msgstr "Color de esquema" + +#: app/templates/javascript.htm:607 +msgid "Outline weight" +msgstr "Peso de contenido" + +#: app/templates/javascript.htm:608 +msgid "Cluster Distance" +msgstr "Distancia de clúster" + +#: app/templates/javascript.htm:609 +msgid "Cluster Max Zoom" +msgstr "Clúster max zoom" + +#: app/templates/javascript.htm:610 +msgid "Cluster Min Points" +msgstr "Puntos mínimos de clúster" + +#: app/templates/javascript.htm:611 +msgid "Vector Simplification" +msgstr "Simplificación vectorial" + +#: app/templates/javascript.htm:612 +msgid "Changes to cluster settings will only be reflected after saving." +msgstr "Los cambios en la configuración del clúster solo se reflejarán después de guardar." + +#: app/templates/javascript.htm:613 +msgid "Preview map data do not use clustering algorithm. Add data for this resource model to see real clustered data." +msgstr "Vista previa Los datos del mapa no usan algoritmo de agrupación. Agregue datos para este modelo de recursos para ver datos agrupados reales." + +#: app/templates/javascript.htm:614 +msgid "The following users and groups can view this layer. If you wish to change who can access this layer, please update the permissions on the layer node." +msgstr "Los siguientes usuarios y grupos pueden ver esta capa. Si desea cambiar quién puede acceder a esta capa, actualice los permisos en el nodo de capa." + +#: app/templates/javascript.htm:615 +msgid "Users" +msgstr "Usuarios" + +#: app/templates/javascript.htm:616 +msgid "Groups" +msgstr "Grupos" + +#: app/templates/javascript.htm:617 +msgid "Related Resources Editor" +msgstr "Editor de recursos relacionados" + +#: app/templates/javascript.htm:618 +msgid "Add Related Resources" +msgstr "Agregar recursos relacionados" + +#: app/templates/javascript.htm:619 +msgid "Arches allows you to define relationships between resources so you can better understand the context and interplay between physical objects, events, activities, people and documents. Relating resources lets you build a network of relationships for your data objects." +msgstr "Arches le permite definir relaciones entre los recursos para que pueda comprender mejor el contexto e interactuar entre objetos físicos, eventos, actividades, personas y documentos. Relacionar los recursos le permite construir una red de relaciones para sus objetos de datos." + +#: app/templates/javascript.htm:621 +msgid "Table" +msgstr "Tabla" + +#: app/templates/javascript.htm:622 +msgid "Visualization" +msgstr "Visualización" + +#: app/templates/javascript.htm:623 +msgid "Show Me How" +msgstr "Muéstrame como" + +#: app/templates/javascript.htm:624 +msgid "Select resources and relate it to this one" +msgstr "Seleccione los recursos y relájelo con este" + +#: app/templates/javascript.htm:625 +msgid "e.g.: .txt" +msgstr "por ejemplo: .txt" + +#: app/templates/javascript.htm:626 +msgid "resource relations" +msgstr "relaciones de recursos" + +#: app/templates/javascript.htm:627 +msgid "'Select an Ontology Property'" +msgstr "'Seleccione una propiedad de ontología'" + +#: app/templates/javascript.htm:628 +msgid "This is a Node to Resource Instance relationship" +msgstr "Esta es una relación de Nodo a instancia de recurso" + +#: app/templates/javascript.htm:629 +msgid "'s relationship to " +msgstr "está relacionadoo con " + +#: app/templates/javascript.htm:630 app/templates/views/graph/graph-designer/node-form.htm:71 +msgid "Relationship to" +msgstr "Relación con" + +#: app/templates/javascript.htm:631 +msgid "Inverse Relationship to" +msgstr "Relación inversa con" + +#: app/templates/javascript.htm:632 +msgid "This is a Resource Instance to Resource Instance relationship" +msgstr "Esta es una relación de Instancia de recurso a Instancia de recurso" + +#: app/templates/javascript.htm:633 +msgid "Relationship" +msgstr "Relació" + +#: app/templates/javascript.htm:634 +msgid "From Date" +msgstr "Desde la fecha" + +#: app/templates/javascript.htm:635 +msgid "To Date" +msgstr "Hasta la fecha" + +#: app/templates/javascript.htm:637 +msgid "Delete this entry" +msgstr "Eliminar esta entrada" + +#: app/templates/javascript.htm:638 app/templates/javascript.htm:757 app/templates/views/components/plugins/workflow.htm:180 app/templates/views/components/plugins/workflow.htm:183 app/templates/views/graph/card-configuration/card-form-preview.htm:126 app/templates/views/rdm/modals/manage-parent-form.htm:58 +#: app/templates/views/rdm/modals/related-concept-form.htm:68 app/templates/views/rdm/modals/related-member-form.htm:67 app/templates/views/rdm/modals/value-form.htm:64 app/templates/views/rdm/modals/value-form.htm:143 app/templates/views/rdm/modals/value-form.htm:221 app/templates/views/user-profile-manager.htm:155 +msgid "Save" +msgstr "Guardar" + +#: app/templates/javascript.htm:639 +msgid "This resource is not related to any other resources" +msgstr "Este recurso no está relacionado con ningún otro recurso" + +#: app/templates/javascript.htm:640 +msgid "Service" +msgstr "Servicio" + +#: app/templates/javascript.htm:641 +msgid "Canvas" +msgstr "Lienzo" + +#: app/templates/javascript.htm:642 +msgid "Manage Image Service" +msgstr "Administrar el servicio de imagen" + +#: app/templates/javascript.htm:643 +msgid "Title" +msgstr "Título" + +#: app/templates/javascript.htm:645 +msgid "Attribution" +msgstr "Atribución" + +#: app/templates/javascript.htm:646 +msgid "Attribution Logo" +msgstr "Logotipo de atribución" + +#: app/templates/javascript.htm:647 +msgid "Metadata" +msgstr "Metadatos" + +#: app/templates/javascript.htm:649 +msgid "Manage Image Canvases" +msgstr "Administrar lienzos de imagen" + +#: app/templates/javascript.htm:650 app/templates/views/rdm/concept-report.htm:229 +msgid "Images" +msgstr "Imágenes" + +#: app/templates/javascript.htm:651 +msgid "Select image to delete from the image service" +msgstr "Seleccione la imagen para eliminar el servicio de imagen" + +#: app/templates/javascript.htm:652 app/templates/javascript.htm:750 +msgid "Select All" +msgstr "Seleccionar todo" + +#: app/templates/javascript.htm:653 app/templates/javascript.htm:751 +msgid "Clear All" +msgstr "Despejar todo" + +#: app/templates/javascript.htm:654 app/templates/javascript.htm:752 +msgid "Delete Selected" +msgstr "Borrar lo Seleccionado" + +#: app/templates/javascript.htm:655 +msgid "Drag or " +msgstr "Arrastrar o " + +#: app/templates/javascript.htm:656 +msgid "click here " +msgstr "haga clic aquí " + +#: app/templates/javascript.htm:657 +msgid "to upload photos" +msgstr "para subir fotos" + +#: app/templates/javascript.htm:658 +msgid "Selected Image Name" +msgstr "Nombre de imagen seleccionado" + +#: app/templates/javascript.htm:659 +msgid "Create New Service" +msgstr "Crear un nuevo servicio" + +#: app/templates/javascript.htm:660 +msgid "Edit a service" +msgstr "Editar un servicio" + +#: app/templates/javascript.htm:661 +msgid "Drag & Drop Your Images Here" +msgstr "Arrastre y suelte sus imágenes aquí" + +#: app/templates/javascript.htm:662 +msgid "Import digital images and create a new image service" +msgstr "Importar imágenes digitales y crear un nuevo servicio de imagen" + +#: app/templates/javascript.htm:663 +msgid "Select Images" +msgstr "Seleccionar imágenes" + +#: app/templates/javascript.htm:664 +msgid "Create a new service by uploading one or more images. Images will be uploaded and processes so that you can view, annotate, and share them with others" +msgstr "Cree un nuevo servicio cargando una o más imágenes. Las imágenes se cargarán y los procesos para que pueda verlos, anotarlas y compartirlas con otros" + +#: app/templates/javascript.htm:665 +msgid "Edit an existing Image Service" +msgstr "Editar un servicio de imagen existente" + +#: app/templates/javascript.htm:666 +msgid "Update the information and images related to an existing Image Service. Or copy and paste in the URL of a IIIF Manifest to add a service from an external service" +msgstr "Actualice la información y las imágenes relacionadas con un servicio de imagen existente. O copiar y pegar en la URL de un manifiesto IIIF para agregar un servicio desde un servicio externo" + +#: app/templates/javascript.htm:668 +msgid "Create Image Service" +msgstr "Crear servicio de imagen" + +#: app/templates/javascript.htm:670 +msgid "Service Title" +msgstr "Título de servicio" + +#: app/templates/javascript.htm:671 +msgid "Service Description" +msgstr "Descripción del servicio" + +#: app/templates/javascript.htm:672 +msgid "Metadata Label" +msgstr "Etiqueta de metadatos" + +#: app/templates/javascript.htm:673 +msgid "Metadata Value" +msgstr "Valor de metadatos" + +#: app/templates/javascript.htm:674 +msgid "Image Caption" +msgstr "Subtítulos" + +#: app/templates/javascript.htm:675 +msgid "Upload .csv or .zip File" +msgstr "Cargar el archivo .csv o .zip" + +#: app/templates/javascript.htm:676 +msgid "Drag & Drop your file onto this area to upload" +msgstr "Arrastre y deje caer su archivo en esta área para cargar" + +#: app/templates/javascript.htm:677 +msgid "Select File" +msgstr "Seleccionar archivo" + +#: app/templates/javascript.htm:678 app/templates/javascript.htm:693 +msgid "Cancel File Import" +msgstr "Cancelar la importación de archivos" + +#: app/templates/javascript.htm:679 +msgid "Use this workflow to upload a file with data that you want to use to create new data instances of a model." +msgstr "Use este flujo de trabajo para cargar un archivo con datos que desea utilizar para crear nuevas instancias de datos de un modelo." + +#: app/templates/javascript.htm:680 +msgid "Import Format: Single .csv file" +msgstr "Formato de importación: archivo .csv único" + +#: app/templates/javascript.htm:681 +msgid "File Summary" +msgstr "Resumen de archivo" + +#: app/templates/javascript.htm:682 +msgid "File name" +msgstr "Nombre del archivo" + +#: app/templates/javascript.htm:683 +msgid "File size" +msgstr "Tamaño de archivo" + +#: app/templates/javascript.htm:684 +msgid "Number of rows" +msgstr "Número de filas" + +#: app/templates/javascript.htm:685 +msgid "Target Model" +msgstr "Modelo objetivo" + +#: app/templates/javascript.htm:686 +msgid "Import Details" +msgstr "Detalles de importación" + +#: app/templates/javascript.htm:687 +msgid "Column names in the first row" +msgstr "Nombres de columnas en la primera fila" + +#: app/templates/javascript.htm:688 app/templates/javascript.htm:762 +msgid "Use as an id" +msgstr "Usar como ID" + +#: app/templates/javascript.htm:689 +msgid "Showing First" +msgstr "Mostrando primero" + +#: app/templates/javascript.htm:690 +msgid "Showing All" +msgstr "Mostrando todo" + +#: app/templates/javascript.htm:691 +msgid "Rows" +msgstr "Filas" + +#: app/templates/javascript.htm:692 +msgid "Import data" +msgstr "Importar datos" + +#: app/templates/javascript.htm:694 +msgid "Import Single CSV" +msgstr "Importar un solo CSV" + +#: app/templates/javascript.htm:695 +msgid "Target Resource" +msgstr "Recurso objetivo" + +#: app/templates/javascript.htm:696 +msgid "Target Fields" +msgstr "Campos objetivo" + +#: app/templates/javascript.htm:697 +msgid "Download Templates" +msgstr "Descargar plantillas" + +#: app/templates/javascript.htm:698 +msgid "Select Template" +msgstr "Seleccionar plantilla" + +#: app/templates/javascript.htm:699 +msgid "Upload .zip File" +msgstr "Cargar el archivo .zip" + +#: app/templates/javascript.htm:700 +msgid "Upload Your .zip File" +msgstr "Cargue su archivo .zip" + +#: app/templates/javascript.htm:701 +msgid "Branch Excel" +msgstr "Rama de Excel" + +#: app/templates/javascript.htm:702 +msgid "File Upload Summary" +msgstr "Resumen de carga de archivos" + +#: app/templates/javascript.htm:703 +msgid "File" +msgstr "Archivo" + +#: app/templates/javascript.htm:704 +msgid "Size" +msgstr "Tamaño" + +#: app/templates/javascript.htm:705 app/templates/two_factor_authentication_reset.htm:42 +msgid "Submit" +msgstr "Entregar" + +#: app/templates/javascript.htm:706 +msgid "File contents" +msgstr "Contenido del archivo" + +#: app/templates/javascript.htm:707 +msgid "Import Branch Excel Summary" +msgstr "Resumen de Excel de la rama de importación" + +#: app/templates/javascript.htm:708 +msgid "Excel File" +msgstr "Archivo de Excel" + +#: app/templates/javascript.htm:709 +msgid "Worksheets" +msgstr "Hojas de trabajo" + +#: app/templates/javascript.htm:710 +msgid "Tiles" +msgstr "Mosaicos" + +#: app/templates/javascript.htm:711 app/templates/views/rdm/modals/import-concept-form.htm:53 +msgid "Import" +msgstr "Importar" + +#: app/templates/javascript.htm:712 app/templates/views/rdm/modals/export-scheme-form.htm:27 +msgid "Export" +msgstr "Exportar" + +#: app/templates/javascript.htm:713 +msgid "Filter Tasks" +msgstr "Filtrar tareas" + +#: app/templates/javascript.htm:714 +msgid "Filter Modules" +msgstr "Filtrar módulos" + +#: app/templates/javascript.htm:715 +msgid "Start" +msgstr "Empezar" + +#: app/templates/javascript.htm:716 +msgid "Warning" +msgstr "Advertencia" + +#: app/templates/javascript.htm:717 +msgid "Are you sure you want to delete this load?" +msgstr "Estas seguro que quieres eliminar esta carga?" + +#: app/templates/javascript.htm:718 +msgid "undo import" +msgstr "deshacer la importación" + +#: app/templates/javascript.htm:719 +msgid "remove from history" +msgstr "eliminar de la historia" + +#: app/templates/javascript.htm:720 +msgid "indexing" +msgstr "indexación" + +#: app/templates/javascript.htm:721 +msgid "completed" +msgstr "completado" + +#: app/templates/javascript.htm:722 +msgid "failed" +msgstr "fallido" + +#: app/templates/javascript.htm:723 +msgid "running" +msgstr "corriendo" + +#: app/templates/javascript.htm:724 +msgid "unloading" +msgstr "descargando" + +#: app/templates/javascript.htm:725 +msgid "unloaded" +msgstr "descargado" + +#: app/templates/javascript.htm:726 +msgid "Validation Errors" +msgstr "Errores de validación" + +#: app/templates/javascript.htm:727 +msgid "No Error Found" +msgstr "No se encuentra ningún error" + +#: app/templates/javascript.htm:728 +msgid "Loading data" +msgstr "Carga de datos" + +#: app/templates/javascript.htm:729 +msgid "Loading status" +msgstr "Cargando estado" + +#: app/templates/javascript.htm:730 +msgid "Loading started" +msgstr "La carga comenzó" + +#: app/templates/javascript.htm:731 +msgid "Loading ended" +msgstr "La carga terminó" + +#: app/templates/javascript.htm:732 +msgid "Load duration" +msgstr "Duración de la carga" + +#: app/templates/javascript.htm:733 +msgid "Indexing ended" +msgstr "La indexación terminó" + +#: app/templates/javascript.htm:734 +msgid "Indexing duration" +msgstr "Duración de la indexación" + +#: app/templates/javascript.htm:736 +msgid "Unable to display the selected file" +msgstr "No se puede mostrar el archivo seleccionado" + +#: app/templates/javascript.htm:737 +msgid "This file can't be displayed." +msgstr "Este archivo no se puede mostrar." + +#: app/templates/javascript.htm:738 +msgid "It may be a proprietary format or there isn't a loader available yet" +msgstr "Puede ser un formato propietario o todavía no hay un cargador disponible" + +#: app/templates/javascript.htm:739 +msgid "to present it in this webpage." +msgstr "a presentarlo en esta página web." + +#: app/templates/javascript.htm:740 +msgid "Unable to parse your file with the " +msgstr "No es posible parchar el archivo con el " + +#: app/templates/javascript.htm:741 +msgid "loader" +msgstr "cargador" + +#: app/templates/javascript.htm:742 +msgid "Select File Loader" +msgstr "Seleccione el cargador de archivos" + +#: app/templates/javascript.htm:743 +msgid "Select the loader best suited for processing and visualizing the selected file" +msgstr "Seleccione el cargador más adecuado para procesar y visualizar el archivo seleccionado" + +#: app/templates/javascript.htm:744 +msgid "Upload Files" +msgstr "Cargar archivos" + +#: app/templates/javascript.htm:745 +msgid "You may upload as many files as you wish; check with the site admin on the maximum file size." +msgstr "Puede cargar tantos archivos como desee; Consulte con el administrador del sitio en el tamaño máximo del archivo." + +#: app/templates/javascript.htm:746 +msgid "optional" +msgstr "opcional" + +#: app/templates/javascript.htm:747 +msgid "Adding files to this record is" +msgstr "Agregar archivos a este registro es" + +#: app/templates/javascript.htm:748 +msgid "Images formatted as .jpg, .png files may be uploaded. Other formats may require a loader to view." +msgstr "Las imágenes formateadas como .jpg, .png Los archivos se pueden cargar. Otros formatos pueden requerir un cargador para ver." + +#: app/templates/javascript.htm:749 +msgid "File Filter" +msgstr "Filtro de archivo" + +#: app/templates/javascript.htm:753 +msgid "Download Selected" +msgstr "Descargar Seleccionado" + +#: app/templates/javascript.htm:754 +msgid "Loader" +msgstr "Cargador" + +#: app/templates/javascript.htm:755 +msgid "File Renderer" +msgstr "Renderizador de archivos" + +#: app/templates/javascript.htm:758 +msgid "files selected" +msgstr "archivos seleccionados" + +#: app/templates/javascript.htm:759 +msgid "add files" +msgstr "agregar archivos" + +#: app/templates/javascript.htm:760 +msgid "Apply to Selected Files" +msgstr "Aplicar a los archivos seleccionados" + +#: app/templates/javascript.htm:761 +msgid "Apply the same loader to all selected files in the dataset" +msgstr "Aplicar el mismo cargador a todos los archivos seleccionados en el conjunto de datos" + +#: app/templates/login.htm:38 app/templates/login.htm:68 +msgid "Sign In" +msgstr "Iniciar sesión" + +#: app/templates/login.htm:40 +msgid "Sign in to Arches to access your data modeling, editing, and registrovery tools." +msgstr "Inicie sesión en Arches para acceder a sus herramientas de modelado de datos, edición y descubrimiento." + +#: app/templates/login.htm:46 +msgid "Your account has been created. Please sign in." +msgstr "Su cuenta ha sido creada.Por favor, inicie sesión." + +#: app/templates/login.htm:74 +msgid "Login failed" +msgstr "Error de inicio de sesión" + +#: app/templates/login.htm:75 +msgid "Invalid username and/or password." +msgstr "Nombre de usuario y/o contraseña no válidos." + +#: app/templates/login.htm:80 app/templates/signup.htm:159 +msgid "Forgot password ?" +msgstr "Has olvidado tu contraseña ?" + +#: app/templates/login.htm:81 +msgid "Forgot password?" +msgstr "¿Has olvidado tu contraseña?" + +#: app/templates/login.htm:84 app/templates/signup.htm:160 +msgid "Create a new account" +msgstr "Crear una nueva cuenta" + +#: app/templates/login.htm:90 app/templates/signup.htm:153 +msgid "Learn more about Arches" +msgstr "Obtenga más información sobre arches " + +#: app/templates/navbar/function-manage-menu.htm:11 +msgid "Select a graph..." +msgstr "Seleccione un grafo ..." + +#: app/templates/navbar/function-manage-menu.htm:18 +msgid "Graphs/Semantics" +msgstr "Grafo/Semánticos" + +#: app/templates/navbar/function-manage-menu.htm:19 +msgid "Define graph" +msgstr "Definir grafo" + +#: app/templates/navbar/function-manage-menu.htm:28 app/templates/navbar/graph-designer-menu.htm:102 +msgid "Return to Arches Designer" +msgstr "Retornar al Diseñador de Arches" + +#: app/templates/navbar/function-manage-menu.htm:29 app/templates/navbar/graph-designer-menu.htm:103 +msgid "Create Arches Resource Models and Branches" +msgstr "Crear modelos y ramas de recursos de arches" + +#: app/templates/navbar/function-manage-menu.htm:37 app/templates/navbar/graph-designer-menu.htm:111 +msgid "footer" +msgstr "pie de página" + +#: app/templates/navbar/graph-designer-menu.htm:15 +msgid "New Model" +msgstr "Nuevo modelo" + +#: app/templates/navbar/graph-designer-menu.htm:16 +msgid "Create new Resource Model" +msgstr "Crear un nuevo modelo de recursos" + +#: app/templates/navbar/graph-designer-menu.htm:24 app/templates/views/graph.htm:75 app/views/graph.py:346 +msgid "New Branch" +msgstr "Nuevo rama" + +#: app/templates/navbar/graph-designer-menu.htm:25 +msgid "Create new Branch" +msgstr "Crear una nueva rama" + +#: app/templates/navbar/graph-designer-menu.htm:36 +msgid "Import Model" +msgstr "Importar Modelo" + +#: app/templates/navbar/graph-designer-menu.htm:37 +msgid "Import Model by uploading a json file" +msgstr "Importar modelo cargando un archivo JSON" + +#: app/templates/navbar/graph-designer-menu.htm:63 +msgid "Functions" +msgstr "Funciones" + +#: app/templates/navbar/graph-designer-menu.htm:64 +msgid "Configure functions attached to this Resource Model" +msgstr "Configurar funciones adjuntas a este modelo de recursos" + +#: app/templates/navbar/graph-designer-menu.htm:72 +msgid "Export Mapping File" +msgstr "Archivo de mapeo de exportación" + +#: app/templates/navbar/graph-designer-menu.htm:74 +msgid "Use a mapping file with import/export of business data" +msgstr "Utilice un archivo de mapeo con importación/exportación de datos comerciales" + +#: app/templates/navbar/graph-designer-menu.htm:83 +msgid "Delete Associated Instances" +msgstr "Eliminar instancias asociadas" + +#: app/templates/navbar/graph-designer-menu.htm:84 +msgid "Delete All Associated Instances with this Model" +msgstr "Eliminar todas las instancias asociadas con este modelo" + +#: app/templates/navbar/resource-manage-menu.htm:17 +msgid "Copy Resource" +msgstr "Recurso de copia" + +#: app/templates/navbar/resource-manage-menu.htm:18 +msgid "Make a copy and start editing" +msgstr "Hacer una copia y comenzar a editar" + +#: app/templates/navbar/resource-manage-menu.htm:28 +msgid "Delete Resource" +msgstr "Eliminar recursos" + +#: app/templates/navbar/resource-manage-menu.htm:29 +msgid "Permanently delete this resource" +msgstr "Eliminar permanentemente este recurso" + +#: app/templates/navbar/resource-manage-menu.htm:39 +msgid "Review Edit History" +msgstr "Revisión del historial de edición" + +#: app/templates/navbar/resource-manage-menu.htm:40 +msgid "View changes to this resource record" +msgstr "Ver cambios en este registro de recursos" + +#: app/templates/navbar/resource-manage-menu.htm:49 +msgid "Jump to Report" +msgstr "Saltar al informe" + +#: app/templates/navbar/resource-manage-menu.htm:50 +msgid "View the full resource report" +msgstr "Ver el informe completo de recursos" + +#: app/templates/navbar/resource-manage-menu.htm:58 +msgid "Print Report" +msgstr "Informe impreso" + +#: app/templates/navbar/resource-manage-menu.htm:59 +msgid "Print the full resource report" +msgstr "Imprima el informe completo de recursos" + +#: app/templates/rdm.htm:66 app/templates/views/rdm/concept-report.htm:28 app/templates/views/rdm/concept-report.htm:52 +msgid "Toggle Dropdown" +msgstr "Desplegable" + +#: app/templates/rdm.htm:69 +msgid "Add Thesauri" +msgstr "Agregar tesauros" + +#: app/templates/rdm.htm:70 +msgid "Import Thesauri" +msgstr "Importar Tesauro" + +#: app/templates/rdm.htm:71 +msgid "Export Thesauri" +msgstr "Exportar Tesauro" + +#: app/templates/rdm.htm:72 +msgid "Delete Thesauri" +msgstr "Eliminar Tesauro" + +#: app/templates/rdm.htm:74 app/templates/views/rdm/modals/add-collection-form.htm:7 +msgid "Add Collection" +msgstr "Agregar colección" + +#: app/templates/rdm.htm:75 app/templates/views/rdm/modals/delete-collection-form.htm:7 +msgid "Delete Collection" +msgstr "Eliminar colección" + +#: app/templates/rdm.htm:76 +msgid "Export All Collections" +msgstr "Exportar todas las colecciones" + +#: app/templates/rdm.htm:120 app/templates/views/rdm/concept-report.htm:3 app/templates/views/rdm/entitytype-report.htm:3 +msgid "Loading..." +msgstr "Cargando..." + +#: app/templates/signup.htm:31 +msgid "Create Account" +msgstr "Crear una cuenta" + +#: app/templates/signup.htm:33 +msgid "Register to access data modeling, editing, and registrovery tools." +msgstr "Regístrese para acceder a las herramientas de modelado de datos, edición y descubrimiento." + +#: app/templates/signup.htm:40 +msgid "Please correct the error below." +msgstr "Corrija el error a continuación." + +#: app/templates/signup.htm:40 +msgid "Please correct the errors below." +msgstr "Corrija los errores a continuación." + +#: app/templates/signup.htm:127 +msgid "Signup" +msgstr "Inscribirse" + +#: app/templates/two_factor_authentication_login.htm:19 app/templates/views/user-profile-manager.htm:127 app/templates/views/user-profile-manager.htm:238 +msgid "Two-Factor Authentication" +msgstr "Autenticación de dos factores" + +#: app/templates/two_factor_authentication_login.htm:24 +msgid "Please enter the code from your external authentication application below." +msgstr "Ingrese el código de su aplicación de autenticación externa a continuación." + +#: app/templates/two_factor_authentication_login.htm:63 +msgid "Authentication failed. Please try again." +msgstr "La autenticación falló. Por favor intente de nuevo." + +#: app/templates/two_factor_authentication_login.htm:71 +msgid "Need to reset two-factor authentication?" +msgstr "¿Necesita restablecer la autenticación de dos factores?" + +#: app/templates/two_factor_authentication_login.htm:81 +msgid "The administrator has required that all users enable two-factor authentication." +msgstr "El administrador ha requerido que todos los usuarios habiliten la autenticación de dos factores." + +#: app/templates/two_factor_authentication_login.htm:82 +msgid "Enable two-factor authentication via email" +msgstr "Habilitar la autenticación de dos factores por correo electrónico" + +#: app/templates/two_factor_authentication_reset.htm:19 +msgid "Update Two-Factor Authentication" +msgstr "Actualizar la autenticación de dos factores" + +#: app/templates/two_factor_authentication_reset.htm:24 +msgid "Please enter an email address below." +msgstr "Ingrese una dirección de correo electrónico a continuación." + +#: app/templates/two_factor_authentication_reset.htm:25 +msgid "If it is registered in our system it will receive instructions to update two-factor authentication." +msgstr "Si está registrado en nuestro sistema, recibirá instrucciones para actualizar la autenticación de dos factores." + +#: app/templates/two_factor_authentication_reset.htm:53 +msgid "Success!" +msgstr "¡Éxito!" + +#: app/templates/two_factor_authentication_reset.htm:57 +msgid "Email address:" +msgstr "Dirección de correo electrónico:" + +#: app/templates/two_factor_authentication_reset.htm:65 +msgid "If this email address is registered, an email has been sent to it containing instructions to enable two-factor authentication." +msgstr "Si esta dirección de correo electrónico está registrada, se le ha enviado un correo electrónico que contiene instrucciones para habilitar la autenticación de dos factores." + +#: app/templates/two_factor_authentication_reset.htm:72 app/templates/two_factor_authentication_settings.htm:161 +msgid "Click here to return to login page" +msgstr "Haga clic aquí para volver a la página de inicio de sesión" + +#: app/templates/two_factor_authentication_settings.htm:22 +msgid "Two-Factor Authentication Settings" +msgstr "Configuración de autenticación de dos factores" + +#: app/templates/two_factor_authentication_settings.htm:33 +msgid "This page will expire in 5 minutes." +msgstr "Esta página caducará en 5 minutos." + +#: app/templates/two_factor_authentication_settings.htm:46 +msgid "Two-Factor Authentication:" +msgstr "Autenticación de dos factores:" + +#: app/templates/two_factor_authentication_settings.htm:49 +msgid "ENABLED" +msgstr "HABILITADO" + +#: app/templates/two_factor_authentication_settings.htm:51 +msgid "DISABLED" +msgstr "DESHABILITADO" + +#: app/templates/two_factor_authentication_settings.htm:71 +msgid "Generate a new shared secret key" +msgstr "Generar una nueva clave secreta compartida" + +#: app/templates/two_factor_authentication_settings.htm:73 +msgid "Enable two-factor authentication" +msgstr "Habilitar la autenticación de dos factores" + +#: app/templates/two_factor_authentication_settings.htm:80 +msgid "Scan the QR code below with your external authentication application." +msgstr "Escanee el código QR a continuación con su aplicación de autenticación externa." + +#: app/templates/two_factor_authentication_settings.htm:91 +msgid "Click here to generate data for manual entry." +msgstr "Haga clic aquí para generar datos para la entrada manual." + +#: app/templates/two_factor_authentication_settings.htm:97 +msgid "Enter the data below into your external authentication application." +msgstr "Ingrese los datos a continuación en su aplicación de autenticación externa." + +#: app/templates/two_factor_authentication_settings.htm:105 +msgid "Issuer Name:" +msgstr "Nombre del emisor:" + +#: app/templates/two_factor_authentication_settings.htm:111 +msgid "Account Name:" +msgstr "Nombre de la cuenta:" + +#: app/templates/two_factor_authentication_settings.htm:117 +msgid "Secret Key:" +msgstr "Clave secreta:" + +#: app/templates/two_factor_authentication_settings.htm:123 +msgid "Algorithm Type:" +msgstr "Tipo de algoritmo:" + +#: app/templates/two_factor_authentication_settings.htm:126 +msgid "Time based" +msgstr "Basado en el tiempo" + +#: app/templates/two_factor_authentication_settings.htm:138 +msgid "Click here to generate QR code." +msgstr "Haga clic aquí para generar el código QR." + +#: app/templates/two_factor_authentication_settings.htm:152 +msgid "To disable two-factor authentication, please contact your administrator." +msgstr "Para deshabilitar la autenticación de dos factores, comuníquese con su administrador." + +#: app/templates/two_factor_authentication_settings.htm:156 +msgid "Disable two-factor authentication" +msgstr "Deshabilitar la autenticación de dos factores" + +#: app/templates/views/components/plugins/workflow.htm:10 +msgid "Insert Workflow Name" +msgstr "Insertar nombre de flujo de trabajo" + +#: app/templates/views/components/plugins/workflow.htm:21 +msgid "Save and Complete Workflow" +msgstr "Guardar y completar el flujo de trabajo" + +#: app/templates/views/components/plugins/workflow.htm:24 +msgid "Complete" +msgstr "Completado" + +#: app/templates/views/components/plugins/workflow.htm:146 +msgid "Previous Step" +msgstr "Paso anterior" + +#: app/templates/views/components/plugins/workflow.htm:149 +msgid "Previous" +msgstr "Previo" + +#: app/templates/views/components/plugins/workflow.htm:166 +msgid "Undo" +msgstr "Deshacer" + +#: app/templates/views/components/plugins/workflow.htm:196 +msgid "Save and Continue" +msgstr "Guardar y continuar" + +#: app/templates/views/components/plugins/workflow.htm:199 app/templates/views/components/plugins/workflow.htm:220 app/templates/views/components/plugins/workflow.htm:242 +msgid "Next" +msgstr "Siguiente" + +#: app/templates/views/components/plugins/workflow.htm:217 app/templates/views/components/plugins/workflow.htm:239 +msgid "Next Step" +msgstr "Siguiente paso" + +#: app/templates/views/concept-graph.htm:14 +msgid "Concept" +msgstr "Concepto" + +#: app/templates/views/concept-graph.htm:19 +msgid "Delete this concept" +msgstr "Eliminar este concepto" + +#: app/templates/views/concept-graph.htm:19 +msgid "Delete this concept and all of it's sub concepts." +msgstr "Elimine este concepto y todos sus subcepts." + +#: app/templates/views/concept-graph.htm:20 app/templates/views/rdm/concept-report.htm:138 app/templates/views/rdm/concept-report.htm:147 app/templates/views/rdm/concept-report.htm:187 +msgid "Jump to this concept" +msgstr "Saltar a este concepto" + +#: app/templates/views/concept-graph.htm:20 +msgid "More Child Concept" +msgstr "Más concepto hijo" + +#: app/templates/views/concept-search.htm:2 app/templates/views/rdm/modals/import-concept-form.htm:21 +msgid "Search for a concept..." +msgstr "Buscar un concepto ..." + +#: app/templates/views/edit-history.htm:11 +msgid "Recently Added Resources" +msgstr "Recursos recientemente agregados" + +#: app/templates/views/edit-history.htm:16 +msgid "Resource Id" +msgstr "ID de recursos" + +#: app/templates/views/edit-history.htm:17 +msgid "Resource Name" +msgstr "Nombre de recursos" + +#: app/templates/views/edit-history.htm:19 +msgid "Edited" +msgstr "Editado" + +#: app/templates/views/edit-history.htm:20 +msgid "Edit Type" +msgstr "Tipo de edición" + +#: app/templates/views/edit-history.htm:21 +msgid "Editor" +msgstr "Editor" + +#: app/templates/views/edit-history.htm:30 +msgid " (Resource Deleted)" +msgstr " (Recurso eliminado)" + +#: app/templates/views/edit-history.htm:45 app/templates/views/edit-history.htm:47 +msgid "View Report" +msgstr "Ver informe" + +#: app/templates/views/graph-designer.htm:26 +msgid "Graph Designer" +msgstr "Diseñador de grafos" + +#: app/templates/views/graph-designer.htm:34 +msgid "Branch" +msgstr "Rama" + +#: app/templates/views/graph-designer.htm:55 +msgid "Resource:" +msgstr "Recurso:" + +#: app/templates/views/graph-designer.htm:63 +msgid "Warning! This will save the graph in its current state and make the Resource accessible to permissioned users." +msgstr "¡Advertencia! Esto guardará el grafo en su estado actual y hará que el recurso sea accesible para los usuarios permisos." + +#: app/templates/views/graph-designer.htm:76 +msgid "Notes:" +msgstr "Notas:" + +#: app/templates/views/graph-designer.htm:93 +msgid "Publish" +msgstr "Publicar" + +#: app/templates/views/graph-designer.htm:112 app/templates/views/graph.htm:51 +msgid "Find a Resource Model/Branch..." +msgstr "Encuentra un modelo de recursos o rama..." + +#: app/templates/views/graph-designer.htm:145 app/templates/views/graph-designer.htm:157 +msgid "Discard Card Edits" +msgstr "Descartar ediciones de tarjeta" + +#: app/templates/views/graph-designer.htm:147 app/templates/views/graph-designer.htm:159 +msgid "Save Card Edits" +msgstr "Guardar ediciones de tarjetas" + +#: app/templates/views/graph-designer.htm:167 +msgid "Unpublish Graph" +msgstr "Anular publicación de Grafo" + +#: app/templates/views/graph-designer.htm:173 +msgid "Publish Graph" +msgstr "Publicar grafo" + +#: app/templates/views/graph-designer.htm:185 +msgid "Quit Designer" +msgstr "Dejar del diseñador" + +#: app/templates/views/graph-designer.htm:201 +msgid "Graph" +msgstr "Grafo" + +#: app/templates/views/graph-designer.htm:206 +msgid "Cards" +msgstr "Tarjetas" + +#: app/templates/views/graph-designer.htm:253 +msgid "Add a branch to your model from the library" +msgstr "Agregue una rama a su modelo desde la biblioteca" + +#: app/templates/views/graph-designer.htm:280 +msgid "Card Designer" +msgstr "Diseñador de Tarjetas" + +#: app/templates/views/graph.htm:25 +msgid "Graphs" +msgstr "Grafos" + +#: app/templates/views/graph.htm:74 app/views/graph.py:346 +msgid "New Resource Model" +msgstr "Nuevo modelo de recursos" + +#: app/templates/views/graph.htm:80 +msgid "Import Branch/Resource Model" +msgstr "Importar Modelo de rama/recurso" + +#: app/templates/views/graph.htm:112 +msgid "Manage Graph" +msgstr "Administrar grafo" + +#: app/templates/views/graph.htm:116 +msgid "Manage Functions" +msgstr "Administrar funciones" + +#: app/templates/views/graph.htm:119 +msgid "Create Mapping File" +msgstr "Crear archivo de asignación" + +#: app/templates/views/graph.htm:122 +msgid "Delete Instances" +msgstr "Eliminar instancias" + +#: app/templates/views/graph.htm:126 +msgid "Export Model" +msgstr "Exportar Modelo" + +#: app/templates/views/graph.htm:128 +msgid "Clone Model" +msgstr "Clonar Modelo" + +#: app/templates/views/graph.htm:130 +msgid "Delete Model" +msgstr "Eliminar modelo" + +#: app/templates/views/graph/card-configuration/card-components-tree.htm:58 +msgid "Widget" +msgstr "Widget" + +#: app/templates/views/graph/card-configuration/card-form-preview.htm:125 +msgid "Discard" +msgstr "Descartar" + +#: app/templates/views/graph/function-manager.htm:23 +msgid "Function Manager" +msgstr "Administrador de funciones" + +#: app/templates/views/graph/function-manager.htm:41 +msgid "Selected Functions" +msgstr "Funciones seleccionadas" + +#: app/templates/views/graph/function-manager.htm:47 +msgid "You haven't added any functions yet." +msgstr "Todavía no has agregado ninguna función." + +#: app/templates/views/graph/function-manager.htm:49 +msgid "Select functions from the library to add new capabilities to your resource." +msgstr "Seleccione funciones de la biblioteca para agregar nuevas capacidades a su recurso." + +#: app/templates/views/graph/function-manager.htm:56 +msgid "Close Function Library" +msgstr "Biblioteca de funciones cercanas" + +#: app/templates/views/graph/function-manager.htm:57 +msgid "Show Function Library" +msgstr "Mostrar biblioteca de funciones" + +#: app/templates/views/graph/function-manager.htm:88 +msgid "Library filter goes here" +msgstr "El filtro de la biblioteca va aquí" + +#: app/templates/views/graph/function-manager.htm:96 +msgid "Function Library" +msgstr "Biblioteca de funciones" + +#: app/templates/views/graph/function-manager.htm:119 app/templates/views/graph/function-manager/function-list.htm:21 +msgid "Function Name" +msgstr "Nombre de función" + +#: app/templates/views/graph/function-manager.htm:137 +msgid "This Function doesn't require any configuration." +msgstr "Esta función no requiere ninguna configuración." + +#: app/templates/views/graph/function-manager/function-list.htm:26 +msgid "Function Description" +msgstr "Descripción de la función" + +#: app/templates/views/graph/function-manager/function-list.htm:37 +msgid "Select Function" +msgstr "Función Seleccionar" + +#: app/templates/views/graph/graph-base.htm:24 +msgid "Graph Manager" +msgstr "Administrador de grafos" + +#: app/templates/views/graph/graph-designer/branch-list.htm:17 +msgid "Because of ontology rules, there are no branches that can be appended." +msgstr "Debido a las reglas de ontología, no hay ramas que puedan agregarse." + +#: app/templates/views/graph/graph-designer/card-configuration.htm:31 +msgid "Card name" +msgstr "Nombre de la tarjeta" + +#: app/templates/views/graph/graph-designer/card-configuration.htm:40 app/templates/views/graph/graph-designer/card-configuration.htm:49 +msgid " " +msgstr " " + +#: app/templates/views/graph/graph-designer/card-configuration.htm:46 +msgid "CSS Classes (Optional)" +msgstr "Clases CSS (opcional)" + +#: app/templates/views/graph/graph-designer/card-configuration.htm:95 +msgid "Help Panel Title" +msgstr "Título del panel de ayuda" + +#: app/templates/views/graph/graph-designer/card-configuration.htm:98 +msgid "Help title" +msgstr "Título de ayuda" + +#: app/templates/views/graph/graph-designer/card-configuration.htm:105 +msgid "Content" +msgstr "Contenido" + +#: app/templates/views/graph/graph-designer/card-configuration.htm:118 +msgid "Unique Values" +msgstr "Valores únicos" + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:9 app/templates/views/graph/graph-designer/card-tree.htm:9 app/templates/views/resource/editor.htm:46 +msgid "Find a card..." +msgstr "Encuentra una tarjeta ..." + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:15 app/templates/views/graph/graph-designer/card-tree.htm:15 app/templates/views/graph/graph-designer/graph-tree.htm:18 app/templates/views/resource/editor.htm:52 +msgid " Expand" +msgstr " Expandir" + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:16 app/templates/views/graph/graph-designer/card-tree.htm:16 app/templates/views/graph/graph-designer/graph-tree.htm:19 app/templates/views/resource/editor.htm:53 +msgid " Collapse" +msgstr " Colapsar" + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:17 app/templates/views/graph/graph-designer/card-tree.htm:17 app/templates/views/graph/graph-designer/graph-tree.htm:20 app/templates/views/resource/editor.htm:54 +msgid " Grid" +msgstr " Cuadrícula" + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:18 +msgid " Select All" +msgstr " Seleccionar todo" + +#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:19 +msgid " Clear All" +msgstr " Despejar todo" + +#: app/templates/views/graph/graph-designer/card-tree.htm:19 app/templates/views/graph/graph-designer/graph-tree.htm:22 +msgid " Show IDs" +msgstr " Mostrar identificaciones" + +#: app/templates/views/graph/graph-designer/card-tree.htm:22 app/templates/views/graph/graph-designer/graph-tree.htm:25 +msgid " Hide IDs" +msgstr " Ocultar identificaciones" + +#: app/templates/views/graph/graph-designer/card-tree.htm:40 +msgid "(edit report)" +msgstr "(Editar informe)" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:121 +msgid "Make card" +msgstr "Hacer una tarjeta" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:124 app/templates/views/graph/graph-designer/node-form.htm:252 +msgid "Data from nodes not collected in other cards will be collected in the root card's form section" +msgstr "Los datos de los nodos no recopilados en otras tarjetas se recopilarán en la sección de formulario de la tarjeta de la raíz" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:134 +msgid "Resource models that may be related:" +msgstr "Modelos de recursos que pueden estar relacionados:" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:169 +msgid "Author name" +msgstr "Nombre del autor" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:181 +msgid "Abstract/description" +msgstr "Resumen/Descripción" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:193 +msgid "URI to a JSON-LD Context Object or a Raw Context Object or Array of Context Objects" +msgstr "URI a un objeto de contexto JSON-LD o un objeto de contexto bruto o una matriz de objetos de contexto" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:200 +msgid "URI Slug for API Access" +msgstr "Slug Uri para el acceso a la API" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:204 +msgid "Slug" +msgstr "Slug" + +#: app/templates/views/graph/graph-designer/graph-settings.htm:225 +msgid " Map Feature Color " +msgstr " Color de la característica del mapa " + +#: app/templates/views/graph/graph-designer/graph-tree.htm:12 +msgid "Find a node, datatype, card..." +msgstr "Encuentra un nodo, tipo de datos, tarjeta ..." + +#: app/templates/views/graph/graph-designer/graph-tree.htm:49 +msgid "Node is exportable in search" +msgstr "El nodo se puede exportar en la búsqueda" + +#: app/templates/views/graph/graph-designer/graph-tree.htm:57 +msgid "Add Child Node" +msgstr "Agregar nodo hijo" + +#: app/templates/views/graph/graph-designer/graph-tree.htm:58 +msgid "Add Branch" +msgstr "Agregar rama" + +#: app/templates/views/graph/graph-designer/graph-tree.htm:61 +msgid "Export Branch" +msgstr "Exportar Rama" + +#: app/templates/views/graph/graph-designer/graph-tree.htm:64 +msgid "Delete Node" +msgstr "Eliminar nodo" + +#: app/templates/views/graph/graph-designer/identity-list.htm:5 +msgid "Groups/Accounts" +msgstr "Grupos/cuentas" + +#: app/templates/views/graph/graph-designer/node-form.htm:45 +msgid "Enter node name here..." +msgstr "Ingrese el nombre del nodo aquí ..." + +#: app/templates/views/graph/graph-designer/node-form.htm:45 +msgid "node name" +msgstr "nombre de nodo" + +#: app/templates/views/graph/graph-designer/node-form.htm:54 +msgid "Node Name Alias" +msgstr "Alias de nombre de nodo" + +#: app/templates/views/graph/graph-designer/node-form.htm:59 +msgid "Unique alias generated from this node\\" +msgstr "Alias ​únicos generado a partir de este nodo \\" + +#: app/templates/views/graph/graph-designer/node-form.htm:60 +msgid "Use a custom node alias" +msgstr "Use un alias de nodo personalizado" + +#: app/templates/views/graph/graph-designer/node-form.htm:71 +msgid "parent" +msgstr "padre" + +#: app/templates/views/graph/graph-designer/node-form.htm:100 +msgid "Semantics" +msgstr "Semánticas" + +#: app/templates/views/graph/graph-designer/node-form.htm:129 +msgid "description" +msgstr "descripción" + +#: app/templates/views/graph/graph-designer/node-form.htm:137 +msgid "Node Data Type and Configuration" +msgstr "Tipo de datos de nodo y configuración" + +#: app/templates/views/graph/graph-designer/node-form.htm:169 +msgid "Node Settings" +msgstr "Configuración de nodo" + +#: app/templates/views/graph/graph-designer/node-form.htm:186 +msgid "Activate to use this node in Advanced Search." +msgstr "Active para usar este nodo en búsqueda avanzada." + +#: app/templates/views/graph/graph-designer/node-form.htm:206 app/templates/views/graph/graph-designer/widget-configuration.htm:66 +msgid "Activate to require that data be collected for this node when a card value is edited" +msgstr "Activarse para exigir que se recopilen los datos para este nodo cuando se edita un valor de la tarjeta" + +#: app/templates/views/graph/graph-designer/node-form.htm:224 +msgid "Export via Search Results" +msgstr "Exportar a través de resultados de búsqueda" + +#: app/templates/views/graph/graph-designer/node-form.htm:227 +msgid "Provide a field name for shapefiles. " +msgstr "Proporcione un nombre de campo para los archivos de forma. " + +#: app/templates/views/graph/graph-designer/node-form.htm:227 +msgid "Limited to 10 characters to meet shapefile requirements." +msgstr "Limitado a 10 caracteres para cumplir con los requisitos de archivo de forma." + +#: app/templates/views/graph/graph-designer/node-form.htm:230 +msgid "shapefile fieldname" +msgstr "nombre de campo del archivo de formas (shapefile)" + +#: app/templates/views/graph/graph-designer/node-form.htm:255 +msgid "Data from this node and downstream nodes will be collected in a single form section" +msgstr "Los datos de este nodo y los nodos aguas abajo se recopilarán en una sola sección de formulario" + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:21 +msgid "To set permissions: " +msgstr "Para establecer permisos: " + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:23 +msgid " 1. Select one or more cards from the card tree." +msgstr " 1. Seleccione una o más tarjetas del árbol de la tarjeta." + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:26 +msgid " 2. Select a Group or User Account from the dropdown below." +msgstr " 2. Seleccione un grupo o cuenta de usuario en el menú desplegable a continuación." + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:29 +msgid " 3. Apply Permissions to set your changes. You'll see your selections reflected by the icons in the card tree." +msgstr " 3. Aplicar permisos para establecer sus cambios. Verá sus selecciones reflejadas por los íconos en el árbol de la tarjeta." + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:36 +msgid "Set permissions for:" +msgstr "Establecer permisos para:" + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:43 +msgid "Select a Group/Account..." +msgstr "Seleccione un grupo/cuenta ..." + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:77 +msgid "Revert Permissions" +msgstr "Revertir permisos" + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:79 +msgid "Apply Permissions" +msgstr "Aplicar permisos" + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:88 +msgid "Selected Cards" +msgstr "Tarjetas seleccionadas" + +#: app/templates/views/graph/graph-designer/permission-settings-form.htm:91 +msgid "No cards selected" +msgstr "No hay tarjetas seleccionadas" + +#: app/templates/views/graph/graph-designer/widget-configuration.htm:7 +msgid "Widget Manager" +msgstr "Administrador de Widgets" + +#: app/templates/views/graph/graph-designer/widget-configuration.htm:36 +msgid "Visibility" +msgstr "Visibilidad" + +#: app/templates/views/map-layer-manager.htm:72 +msgid "Overlay" +msgstr "Superposición" + +#: app/templates/views/map-layer-manager.htm:97 +msgid "No overlays available" +msgstr "No hay superposiciones disponibles" + +#: app/templates/views/map-layer-manager.htm:120 +msgid "Delete Layer" +msgstr "Eliminar la capa" + +#: app/templates/views/map-layer-manager.htm:136 +msgid "Activated:" +msgstr "Activado:" + +#: app/templates/views/map-layer-manager.htm:197 +msgid "Layer Name:" +msgstr "Nombre de la capa:" + +#: app/templates/views/map-layer-manager.htm:218 +msgid "Only show on search map:" +msgstr "Solo se muestra en el mapa de búsqueda:" + +#: app/templates/views/map-layer-manager.htm:249 +msgid "Legend content:" +msgstr "Contenido de leyenda:" + +#: app/templates/views/notifications-list.htm:10 +msgid "Dismiss All" +msgstr "Descartar a todos" + +#: app/templates/views/notifications-list.htm:26 +msgid "You're up-to-date and do not have any notifications. When you trigger a notification (for example, when you request a large download) it will display here." +msgstr "Estás actualizado y no tienes ninguna notificación.Cuando active una notificación (por ejemplo, cuando solicita una descarga grande) se mostrará aquí." + +#: app/templates/views/provisional-history-list.htm:17 +msgid "Last 7 days" +msgstr "Últimos 7 días" + +#: app/templates/views/provisional-history-list.htm:18 +msgid "Last 30 days" +msgstr "Últimos 30 días" + +#: app/templates/views/provisional-history-list.htm:49 +msgid "You have not yet edited any data within the specified time period. Once you edit a resource, your edit history will display here." +msgstr "Todavía no ha editado ningún dato dentro del período de tiempo especificado.Una vez que edite un recurso, su historial de edición se mostrará aquí." + +#: app/templates/views/provisional-history-list.htm:71 +msgid "Card: " +msgstr "Tarjeta: " + +#: app/templates/views/provisional-history-list.htm:76 +msgid "Edited: " +msgstr "Editado: " + +#: app/templates/views/provisional-history-list.htm:82 +msgid "pending review" +msgstr "pendiente de revisión" + +#: app/templates/views/rdm/concept-report.htm:32 +msgid "Add Top Concept" +msgstr "Agregar concepto superior" + +#: app/templates/views/rdm/concept-report.htm:33 +msgid "Import Top Concept from SPARQL" +msgstr "Importar el concepto superior de SPARQL" + +#: app/templates/views/rdm/concept-report.htm:36 app/templates/views/rdm/concept-report.htm:55 +msgid "Add Child" +msgstr "Agregar hijo" + +#: app/templates/views/rdm/concept-report.htm:37 +msgid "Import Child from SPARQL" +msgstr "Importar Hijo desde SPARQL" + +#: app/templates/views/rdm/concept-report.htm:39 app/templates/views/rdm/concept-report.htm:57 +msgid "Manage Parents" +msgstr "Manegar a los padres" + +#: app/templates/views/rdm/concept-report.htm:40 +msgid "Make Collection" +msgstr "Hacer colección" + +#: app/templates/views/rdm/concept-report.htm:56 +msgid "Import Child from AAT" +msgstr "Importar hijo desde AAT" + +#: app/templates/views/rdm/concept-report.htm:70 app/templates/views/rdm/entitytype-report.htm:78 +msgid "Labels" +msgstr "Etiquetas" + +#: app/templates/views/rdm/concept-report.htm:72 app/templates/views/rdm/entitytype-report.htm:81 +msgid "Add label" +msgstr "Agregar etiqueta" + +#: app/templates/views/rdm/concept-report.htm:78 app/templates/views/rdm/entitytype-report.htm:87 +msgid "Delete this label?" +msgstr "Eliminar esta etiqueta?" + +#: app/templates/views/rdm/concept-report.htm:81 +msgid "preferred" +msgstr "preferido" + +#: app/templates/views/rdm/concept-report.htm:81 +msgid "alternate" +msgstr "alternar" + +#: app/templates/views/rdm/concept-report.htm:81 +msgid "hidden" +msgstr "oculto" + +#: app/templates/views/rdm/concept-report.htm:94 app/templates/views/rdm/entitytype-report.htm:103 +msgid "Notes" +msgstr "Notas" + +#: app/templates/views/rdm/concept-report.htm:96 app/templates/views/rdm/entitytype-report.htm:106 +msgid "Add note" +msgstr "Agregar nota" + +#: app/templates/views/rdm/concept-report.htm:102 app/templates/views/rdm/entitytype-report.htm:112 +msgid "Delete this note?" +msgstr "Eliminar esta nota?" + +#: app/templates/views/rdm/concept-report.htm:123 +msgid "Broader/Narrower Concepts" +msgstr "Conceptos más amplios/más estrechos" + +#: app/templates/views/rdm/concept-report.htm:146 +msgid "Delete this concept?" +msgstr "Eliminar este concepto?" + +#: app/templates/views/rdm/concept-report.htm:146 +msgid "By deleting this concept, you will also be deleting the following concepts as well. This operation cannot be undone." +msgstr "Al eliminar este concepto, también eliminará los siguientes conceptos. Esta operación no se puede deshacer." + +#: app/templates/views/rdm/concept-report.htm:178 +msgid "Related Concepts" +msgstr "Conceptos relacionados" + +#: app/templates/views/rdm/concept-report.htm:180 +msgid "Add related concept" +msgstr "Agregar concepto relacionado" + +#: app/templates/views/rdm/concept-report.htm:186 +msgid "Remove the relationship to this concept?" +msgstr "¿Eliminar la relación con este concepto?" + +#: app/templates/views/rdm/concept-report.htm:203 app/templates/views/rdm/entitytype-report.htm:132 +msgid "Values" +msgstr "Valores" + +#: app/templates/views/rdm/concept-report.htm:205 app/templates/views/rdm/entitytype-report.htm:135 +msgid "Add value" +msgstr "Agregar valor" + +#: app/templates/views/rdm/concept-report.htm:211 app/templates/views/rdm/entitytype-report.htm:141 +msgid "Delete this value?" +msgstr "Eliminar este valor?" + +#: app/templates/views/rdm/concept-report.htm:212 app/templates/views/rdm/entitytype-report.htm:142 +msgid "Edit this value" +msgstr "Editar este valor" + +#: app/templates/views/rdm/concept-report.htm:231 +msgid "Add images" +msgstr "Agregar imágenes" + +#: app/templates/views/rdm/concept-report.htm:246 +msgid "Delete Image" +msgstr "Eliminar imagen" + +#: app/templates/views/rdm/concept-report.htm:274 app/templates/views/rdm/entitytype-report.htm:165 +msgid "Arches ID:" +msgstr "ID de arches:" + +#: app/templates/views/rdm/concept-report.htm:294 app/templates/views/rdm/entitytype-report.htm:179 +msgid "Are you ready to delete this item?" +msgstr "¿Estás listo para eliminar este artículo?" + +#: app/templates/views/rdm/concept-report.htm:304 app/templates/views/rdm/entitytype-report.htm:189 +msgid "No" +msgstr "No" + +#: app/templates/views/rdm/concept-report.htm:305 app/templates/views/rdm/entitytype-report.htm:190 +msgid "Yes" +msgstr "Sí" + +#: app/templates/views/rdm/concept-report.htm:339 +msgid "Arches Reference Data Manager" +msgstr "Administrador de datos de referencia de Arches" + +#: app/templates/views/rdm/concept-report.htm:348 +msgid "Schemes" +msgstr "Esquemas" + +#: app/templates/views/rdm/concept-report.htm:352 +msgid "Entity Types" +msgstr "Tipos de entidad" + +#: app/templates/views/rdm/entitytype-report.htm:29 +msgid "Member Hierarchy" +msgstr "Jerarquía de miembros" + +#: app/templates/views/rdm/entitytype-report.htm:32 +msgid "Add dropdown entry" +msgstr "Agregar entrada desplegable" + +#: app/templates/views/rdm/entitytype-report.htm:46 app/templates/views/rdm/entitytype-report.htm:55 +msgid "Expand this entry" +msgstr "Expandir esta entrada" + +#: app/templates/views/rdm/entitytype-report.htm:54 +msgid "Remove this entry from the dropdown" +msgstr "Eliminar esta entrada del menú desplegable" + +#: app/templates/views/rdm/entitytype-report.htm:89 +msgid "Edit this label" +msgstr "Editar esta etiqueta" + +#: app/templates/views/rdm/entitytype-report.htm:113 +msgid "Edit this note" +msgstr "Editar esta nota" + +#: app/templates/views/rdm/modals/add-child-form.htm:7 +msgid "Add Concept" +msgstr "Agregar concepto" + +#: app/templates/views/rdm/modals/add-child-form.htm:13 +msgid "Label" +msgstr "Etiqueta" + +#: app/templates/views/rdm/modals/add-child-form.htm:19 +msgid "Note" +msgstr "Nota" + +#: app/templates/views/rdm/modals/add-child-form.htm:36 +msgid "Relation from Parent" +msgstr "Relación con el Padre" + +#: app/templates/views/rdm/modals/add-child-form.htm:50 app/templates/views/rdm/modals/add-collection-form.htm:32 app/templates/views/rdm/modals/add-scheme-form.htm:38 +msgid "Save changes" +msgstr "Guardar cambios" + +#: app/templates/views/rdm/modals/add-collection-form.htm:13 app/templates/views/rdm/modals/add-scheme-form.htm:13 +msgid "ConceptScheme Name" +msgstr "Nombre de concepto de esquema" + +#: app/templates/views/rdm/modals/add-image-form.htm:9 +msgid "Import Images" +msgstr "Importar imágenes" + +#: app/templates/views/rdm/modals/add-image-form.htm:9 +msgid "(Click on panel or drag and drop files onto panel to upload)" +msgstr "(Haga clic en el panel o arrastre y suelte los archivos en el panel para cargar)" + +#: app/templates/views/rdm/modals/add-scheme-form.htm:7 +msgid "Add Concept Scheme" +msgstr "Agregar esquema conceptual" + +#: app/templates/views/rdm/modals/add-scheme-form.htm:19 +msgid "Scope Note" +msgstr "Nota de alcance" + +#: app/templates/views/rdm/modals/delete-collection-form.htm:13 +msgid "Select collection to delete" +msgstr "Seleccione la colección para eliminar" + +#: app/templates/views/rdm/modals/delete-collection-form.htm:33 +msgid "You won't be able to undo this operation!  Are you sure you want to permanently delete this entire collection from Arches?" +msgstr "¡No podrá deshacer esta operación!&Nbsp;¿Estás seguro de que quieres eliminar permanentemente esta colección de Arches?" + +#: app/templates/views/rdm/modals/delete-scheme-form.htm:7 +msgid "Delete Scheme" +msgstr "Eliminar Esquema" + +#: app/templates/views/rdm/modals/delete-scheme-form.htm:13 +msgid "Select scheme to delete" +msgstr "Seleccionar esquema para eliminar" + +#: app/templates/views/rdm/modals/delete-scheme-form.htm:33 +msgid "You won't be able to undo this operation!  Are you sure you want to permanently delete this entire scheme from Arches?" +msgstr "¡No podrá deshacer esta operación! & Nbsp;¿Estás seguro de que quieres eliminar permanentemente este esquema de Arches?" + +#: app/templates/views/rdm/modals/export-scheme-form.htm:7 +msgid "Export Scheme" +msgstr "Exportar Esquema" + +#: app/templates/views/rdm/modals/export-scheme-form.htm:13 +msgid "Select scheme to export" +msgstr "Seleccionar esquema para exportar" + +#: app/templates/views/rdm/modals/import-concept-form.htm:9 +msgid "Import Concept" +msgstr "Importar Concepto" + +#: app/templates/views/rdm/modals/import-concept-form.htm:24 +msgid "Organization" +msgstr "Organización" + +#: app/templates/views/rdm/modals/import-concept-form.htm:33 +msgid "Concept Indentifiers" +msgstr "Identificadores de concepto" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:9 +msgid "Import New Concept Scheme" +msgstr "Importar un nuevo esquema conceptual" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:20 +msgid "SKOS File" +msgstr "Archivo SKOS" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:30 +msgid "When concept ids match" +msgstr "Cuando las identificaciones de concepto coinciden" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:32 +msgid "overwrite system concept" +msgstr "concepto de sistema de sobrescribir" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:33 +msgid "use system concept" +msgstr "utilice el concepto del sistema" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:41 +msgid "When inserting new concepts" +msgstr "Al insertar nuevos conceptos" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:43 +msgid "keep within scheme" +msgstr "mantener dentro del esquema" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:44 +msgid "stage in candidates" +msgstr "etapa en candidatos" + +#: app/templates/views/rdm/modals/import-scheme-form.htm:54 +msgid "Upload File" +msgstr "Subir archivo" + +#: app/templates/views/rdm/modals/manage-parent-form.htm:9 +msgid "New Parent Concept" +msgstr "Nuevo concepto de padres" + +#: app/templates/views/rdm/modals/manage-parent-form.htm:24 +msgid "Relation to Parent" +msgstr "Relación con el padre" + +#: app/templates/views/rdm/modals/manage-parent-form.htm:31 +msgid "Current Parents" +msgstr "Padres actuales" + +#: app/templates/views/rdm/modals/manage-parent-form.htm:37 +msgid "Remove the relationship to this parent concept" +msgstr "Eliminar la relación con este concepto principal" + +#: app/templates/views/rdm/modals/manage-parent-form.htm:37 +msgid "Remove the relationship to this parent concept." +msgstr "Eliminar la relación con este concepto principal." + +#: app/templates/views/rdm/modals/manage-parent-form.htm:53 +msgid "Deleting reference to parent:" +msgstr "Eliminar referencia al padre:" + +#: app/templates/views/rdm/modals/related-concept-form.htm:9 +msgid "Manage Related Concepts" +msgstr "Gestionar conceptos relacionados" + +#: app/templates/views/rdm/modals/related-concept-form.htm:27 app/templates/views/rdm/modals/related-member-form.htm:27 +msgid "Select a concept" +msgstr "Seleccione un concepto" + +#: app/templates/views/rdm/modals/related-concept-form.htm:34 app/templates/views/rdm/modals/related-member-form.htm:34 +msgid "Relation type" +msgstr "Tipo de relación" + +#: app/templates/views/rdm/modals/related-concept-form.htm:35 app/templates/views/rdm/modals/related-member-form.htm:35 +msgid "Relation to Concept" +msgstr "Relación con el concepto" + +#: app/templates/views/rdm/modals/related-concept-form.htm:52 +msgid "Use the search tool to select the concept that you want to relate." +msgstr "Use la herramienta de búsqueda para seleccionar el concepto que desea relacionar." + +#: app/templates/views/rdm/modals/related-member-form.htm:9 +msgid "Select Concept Values for Dropdowns" +msgstr "Seleccionar valores de concepto para desplegables" + +#: app/templates/views/rdm/modals/related-member-form.htm:51 +msgid "Selecting a concept will select that concept and all it's children." +msgstr "Seleccionar un concepto seleccionará ese concepto y todos sus hijos." + +#: app/templates/views/rdm/modals/value-form.htm:9 +msgid "Edit Concept Label" +msgstr "Editar etiqueta conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:9 +msgid "Add Concept Label" +msgstr "Agregar etiqueta conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:9 +msgid "Manage Concept Label" +msgstr "Gestionar la etiqueta conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:24 +msgid "Label Information" +msgstr "Información de etiqueta" + +#: app/templates/views/rdm/modals/value-form.htm:35 +msgid "Label type" +msgstr "Tipo de etiqueta" + +#: app/templates/views/rdm/modals/value-form.htm:70 +msgid "Only one preferred label may exist for each language." +msgstr "Solo puede existir una etiqueta preferida para cada idioma." + +#: app/templates/views/rdm/modals/value-form.htm:83 +msgid "Add Concept Note" +msgstr "Agregar nota conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:83 +msgid "Manage Concept Note" +msgstr "Gestionar la nota conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:98 +msgid "Note Editor" +msgstr "Editor de notas" + +#: app/templates/views/rdm/modals/value-form.htm:151 +msgid "Only one note of each type may exist for each language." +msgstr "Solo puede existir una nota de cada tipo para cada idioma." + +#: app/templates/views/rdm/modals/value-form.htm:164 +msgid "Add Concept Value" +msgstr "Agregar valor conceptual" + +#: app/templates/views/rdm/modals/value-form.htm:164 +msgid "Manage Concept Values" +msgstr "Gestionar los valores conceptuales" + +#: app/templates/views/rdm/modals/value-form.htm:179 +msgid "Define a value" +msgstr "Definir un valor" + +#: app/templates/views/rdm/modals/value-form.htm:192 +msgid "Value type" +msgstr "Tipo de valor" + +#: app/templates/views/rdm/modals/value-form.htm:230 +msgid "Only one sort order value can be assigned to a concept." +msgstr "Solo se puede asignar un valor de orden de tipo a un concepto." + +#: app/templates/views/resource.htm:25 app/templates/views/resource/resource-base.htm:24 app/views/resource.py:90 +msgid "Resource Manager" +msgstr "Administrador de recursos" + +#: app/templates/views/resource.htm:53 +msgid "Resources" +msgstr "Recursos" + +#: app/templates/views/resource.htm:93 +msgid "Create Resource" +msgstr "Crear recursos" + +#: app/templates/views/resource/edit-log.htm:7 +msgid "Resource History" +msgstr "Historia de recursos" + +#: app/templates/views/resource/edit-log.htm:30 +msgid "Now" +msgstr "Ahora" + +#: app/templates/views/resource/edit-log.htm:34 +msgid "Most recent" +msgstr "El más reciente" + +#: app/templates/views/resource/edit-log.htm:35 +msgid "Oldest" +msgstr "Mayor" + +#: app/templates/views/resource/edit-log.htm:36 +msgid "By editor" +msgstr "Por editor" + +#: app/templates/views/resource/edit-log.htm:37 +msgid "By edit type" +msgstr "Por tipo de edición" + +#: app/templates/views/resource/edit-log.htm:50 +msgid "Resource Record Created" +msgstr "Registro de recursos creado" + +#: app/templates/views/resource/edit-log.htm:52 +msgid "Record created by Arches with unique identifer" +msgstr "Registro creado por Arches con identificador único" + +#: app/templates/views/resource/edit-log.htm:57 app/templates/views/resource/edit-log.htm:60 +msgid "Created" +msgstr "Creado" + +#: app/templates/views/resource/edit-log.htm:66 app/templates/views/resource/edit-log.htm:169 +msgid "Tile Data" +msgstr "Datos de mosaico" + +#: app/templates/views/resource/edit-log.htm:78 app/templates/views/resource/edit-log.htm:114 +msgid "Provisional Tile Data" +msgstr "Datos de mosaico provisionales" + +#: app/templates/views/resource/edit-log.htm:102 +msgid "New Tile Data" +msgstr "Nuevos datos de mosaico" + +#: app/templates/views/resource/edit-log.htm:132 +msgid "Previous Tile Data" +msgstr "Datos de mosaicos anteriores" + +#: app/templates/views/resource/edit-log.htm:146 +msgid "Previous Provisional Tile Data" +msgstr "Datos de mosaicos provisionales anteriores" + +#: app/templates/views/resource/edit-log.htm:162 app/templates/views/resource/edit-log.htm:165 +msgid "Deleted" +msgstr "Borrado" + +#: app/templates/views/resource/edit-log.htm:184 +msgid "edited by" +msgstr "editado por" + +#: app/templates/views/resource/editor.htm:25 +msgid "Resource Editor" +msgstr "Editor de recursos" + +#: app/templates/views/resource/editor.htm:102 +msgid "Manage Permissions" +msgstr "Gestionar los permisos" + +#: app/templates/views/resource/editor.htm:166 +msgid "Welcome to Arches' Resource Editor" +msgstr "Bienvenido al editor de recursos de Arches" + +#: app/templates/views/resource/editor.htm:169 +msgid "You are about to create a new resource record. Select any data card from the list on the left and start entering information." +msgstr "Estás a punto de crear un nuevo registro de recursos.Seleccione cualquier tarjeta de datos de la lista a la izquierda y comience a ingresar información." + +#: app/templates/views/resource/editor.htm:170 +msgid "Don't worry if you decide not to enter any data just yet." +msgstr "No se preocupe si decide no ingresar ningún dato todavía." + +#: app/templates/views/resource/editor.htm:171 +msgid "Arches will create your new resource record once you've saved a data entry card." +msgstr "Arches creará su nuevo registro de recursos una vez que haya guardado una tarjeta de entrada de datos." + +#: app/templates/views/resource/editor.htm:177 +msgid "No cards are available for this model." +msgstr "No hay tarjetas disponibles para este modelo." + +#: app/templates/views/resource/editor.htm:243 +msgid "Add new" +msgstr "Agregar nuevo" + +#: app/templates/views/resource/editor.htm:270 +msgid "You do not have permission to edit this card." +msgstr "No tiene permiso para editar esta tarjeta." + +#: app/templates/views/resource/editor/provisional-tile-manager.htm:15 +msgid "User: " +msgstr "Usuario: " + +#: app/templates/views/resource/editor/provisional-tile-manager.htm:18 +msgid "Created: " +msgstr "Creado: " + +#: app/templates/views/resource/editor/provisional-tile-manager.htm:37 +msgid "Accept" +msgstr "Aceptar" + +#: app/templates/views/resource/editor/provisional-tile-manager.htm:40 +msgid "Decline" +msgstr "Rechazar" + +#: app/templates/views/resource/report.htm:24 +msgid "Resource Report" +msgstr "Informe de recursos" + +#: app/templates/views/search.htm:60 +msgid "Clear Filters" +msgstr "Limpiar Filtros" + +#: app/templates/views/user-profile-manager.htm:25 +msgid "Account Settings" +msgstr "Configuración de la cuenta" + +#: app/templates/views/user-profile-manager.htm:48 +msgid "User name:" +msgstr "Nombre de usuario:" + +#: app/templates/views/user-profile-manager.htm:64 +msgid "Account" +msgstr "Cuenta" + +#: app/templates/views/user-profile-manager.htm:74 +msgid "User name" +msgstr "Nombre de usuario" + +#: app/templates/views/user-profile-manager.htm:81 +msgid "Change password" +msgstr "Cambiar la contraseña" + +#: app/templates/views/user-profile-manager.htm:100 +msgid "Contact email" +msgstr "Correo electrónico de contacto" + +#: app/templates/views/user-profile-manager.htm:113 +msgid "Phone" +msgstr "Teléfono" + +#: app/templates/views/user-profile-manager.htm:141 +msgid "Arches user name" +msgstr "Nombre de usuario de arches" + +#: app/templates/views/user-profile-manager.htm:149 +msgid "This is the unique email or name that you use to log on to Arches." +msgstr "Este es el correo electrónico o nombre único que utiliza para iniciar sesión en Arches." + +#: app/templates/views/user-profile-manager.htm:165 app/templates/views/user-profile-manager.htm:166 +msgid "First name" +msgstr "Nombre de pila" + +#: app/templates/views/user-profile-manager.htm:176 +msgid "Arches uses your name and phone number to make it easier for other users to find and work with you." +msgstr "Arches usa su nombre y número de teléfono para facilitar que otros usuarios encuentren y trabajen con usted." + +#: app/templates/views/user-profile-manager.htm:186 app/templates/views/user-profile-manager.htm:187 +msgid "Last name" +msgstr "Apellido" + +#: app/templates/views/user-profile-manager.htm:202 +msgid "Phone Number (optional)" +msgstr "Número de teléfono (opcional)" + +#: app/templates/views/user-profile-manager.htm:215 +msgid "Contact Email" +msgstr "Correo electrónico de contacto" + +#: app/templates/views/user-profile-manager.htm:226 +msgid "Arches uses your e-maill to alert you to projects and tasks assigned to you." +msgstr "Arches usa su correo electrónico para alertarlo sobre proyectos y tareas que se le asignan." + +#: app/templates/views/user-profile-manager.htm:256 +msgid "Click here to update Two-Factor Authentication settings via email" +msgstr "Haga clic aquí para actualizar la configuración de autenticación de dos factores por correo electrónico" + +#: app/templates/views/user-profile-manager.htm:346 +msgid "Notification Settings" +msgstr "Configuración de notificación" + +#: app/templates/views/user-profile-manager.htm:354 +msgid "Trigger" +msgstr "Disparador" + +#: app/templates/views/user-profile-manager.htm:355 +msgid "Email Notification" +msgstr "Notificación por correo electrónico" + +#: app/templates/views/user-profile-manager.htm:356 +msgid "Web Notification" +msgstr "Notificación web" + +#: app/templates/views/user-profile-manager.htm:365 app/templates/views/user-profile-manager.htm:370 +msgid "Enable" +msgstr "Habilitar" + +#: app/templates/views/user-profile-manager.htm:375 +msgid "Exporting Search Results" +msgstr "Exportación de resultados de búsqueda" + +#: app/utils/data_management/resources/formats/csvfile.py:825 +#, python-brace-format +msgid "No datatype detected for {0}" +msgstr "No se detectó el tipo de datos para {0}" + +#: app/utils/data_management/resources/formats/csvfile.py:1132 +#, python-brace-format +msgid "Total resources saved: {save_count}" +msgstr "Recursos totales guardados: {save_count}" + +#: app/utils/data_management/resources/formats/format.py:47 +#, python-brace-format +msgid "{0} of {1} resources saved" +msgstr "{0} de {1} recursos guardados" + +#: app/utils/data_management/resources/formats/format.py:57 +#, python-brace-format +msgid "{0} of {1} relations saved" +msgstr "{0} de {1} Relaciones guardadas" + +#: app/utils/data_management/resources/formats/format.py:182 +msgid "No import errors" +msgstr "Sin errores de importación" + +#: app/utils/data_management/resources/formats/format.py:186 +msgid "***** Errors occured during import. Some data may not have been imported. For more information, check resource import error log: " +msgstr "***** Los errores ocurrieron durante la importación.Es posible que algunos datos no hayan sido importados.Para obtener más información, verifique el registro de errores de importación de recursos: " + +#: app/utils/data_management/resources/formats/format.py:217 +#, python-brace-format +msgid " {0}: {1}\n" +msgstr " {0}: {1}\n" + +#: app/utils/data_management/resources/formats/format.py:269 +msgid "Must supply either a graph id or a list of resource instance ids to export" +msgstr "Debe proporcionar una identificación gráfica o una lista de ID de instancia de recursos para exportar" + +#: app/utils/data_management/sparql_providers/aat_provider.py:34 +msgid "Getty AAT" +msgstr "Getty AAT" + +#: app/utils/data_management/sparql_providers/aat_provider.py:90 +#, python-format +msgid "" +"Error in SPARQL query:
Test this query directly by pasting the query below into the Getty's own SPARQL endpoint at http://vocab.getty.edu/sparql
%s
Query returned 0 results, please check the " +"query for errors. You may need to add the appropriate languages into the database for this query to work

" +msgstr "" +" Error en la consulta Sparql:
Pruebe esta consulta directamente pegando la consulta a continuación en el punto final SPARQL de Getty en http://vocab.getty.edu/sparql
%s 
Consulta devuelto 0 " +"resultados, verifique la consulta en busca de errores. Es posible que deba agregar los idiomas apropiados a la base de datos para que esta consulta funcione

" + +#: app/utils/forms.py:64 +msgid "This email address has already been registered with the system. If you forgot your password, click the 'exit' link below and go to the login page to reset your password." +msgstr "Esta dirección de correo electrónico ya se ha registrado en el sistema. Si olvidó su contraseña, haga clic en el enlace 'Salir' a continuación y vaya a la página de inicio de sesión para restablecer su contraseña." + +#: app/utils/forms.py:109 +msgid "Email" +msgstr "Correo electrónico" + +#: app/utils/forms.py:113 +msgid "New password" +msgstr "Nueva contraseña" + +#: app/utils/forms.py:115 +msgid "Re-enter new password" +msgstr "Vuelva a ingresar una nueva contraseña" + +#: app/utils/password_validation.py:12 +#, python-brace-format +msgid "Be longer than {0} characters" +msgstr "Ser más largo de {0} caracteres" + +#: app/utils/password_validation.py:20 +msgid "Have at least 1 letter" +msgstr "Tener al menos 1 letra" + +#: app/utils/password_validation.py:37 +msgid "Your password must contain at least one special character" +msgstr "Su contraseña debe contener al menos un personaje especial" + +#: app/utils/password_validation.py:43 +msgid "Have at least 1 special character" +msgstr "Tener al menos 1 personaje especial" + +#: app/utils/password_validation.py:56 +msgid "Your password must contain at least one number" +msgstr "Su contraseña debe contener al menos un número" + +#: app/utils/password_validation.py:60 +msgid "Have at least 1 number" +msgstr "Tener al menos 1 número" + +#: app/utils/password_validation.py:74 +msgid "Your password must contain both upper and lower case letters" +msgstr "Su contraseña debe contener letras MAYÚSCULAS y minúsculas" + +#: app/utils/password_validation.py:78 +msgid "Have least 1 upper and lower case character" +msgstr "Tener al menos 1 carácter MAYÚSCULA y minúscula" + +#: app/utils/response.py:56 +msgid "Could not return JSON Response" +msgstr "No pudo devolver la respuesta JSON" + +#: app/utils/task_management.py:28 +msgid "Celery worker connection failed. Reattempting" +msgstr "La conexión del trabajador de Celery falló. Reconectando" + +#: app/utils/task_management.py:30 +msgid "Failed to connect to celery due to a BrokenPipeError/ConnectionResetError" +msgstr "No se pudo conectar al apio debido a un BrokenPipeError/ConnectionResetError" + +#: app/utils/task_management.py:33 +msgid "A celery broker is running, but a celery worker is not available" +msgstr "Un broker de Celery está funcionando, pero un trabajador de Celery no está disponible" + +#: app/utils/task_management.py:37 +msgid "Unable to connect to a celery broker" +msgstr "No se puede conectar a un corredor de Celery" + +#: app/views/api.py:79 +msgid "Failed to dispatch Kibana proxy" +msgstr "No se pudo despachar a Kibana Proxy" + +#: app/views/api.py:81 +msgid "KibanaProxy failed" +msgstr "El kibana proxy falló" + +#: app/views/api.py:105 +msgid "Failed to create API request" +msgstr "No se pudo crear una solicitud API" + +#: app/views/api.py:121 app/views/api.py:797 app/views/resource.py:236 app/views/resource.py:603 +msgid "Unnamed Resource" +msgstr "Recurso sin nombre" + +#: app/views/api.py:483 +#, python-brace-format +msgid "The specified resource '{0}' does not exist. JSON-LD export failed." +msgstr "El recurso especificado '{0}' no existe. La exportación de JSON-LD falló." + +#: app/views/api.py:793 app/views/resource.py:232 +msgid "New Resource" +msgstr "Nuevo recurso" + +#: app/views/api.py:1275 +msgid "Tile not found." +msgstr "Mosaico no encontrado." + +#: app/views/api.py:1307 +msgid "No nodegroup matching query parameters found." +msgstr "No se encontraron parámetros de consulta de coincidencia de NodeGroup." + +#: app/views/api.py:1356 +msgid "No nodes matching query parameters found." +msgstr "No se encontraron nodos de consulta coincidentes." + +#: app/views/api.py:1364 +#, python-format +msgid "No graph found for graphid %s" +msgstr "No se encuentra grafo para Graphid %s" + +#: app/views/api.py:1424 +msgid "User does not have permission to edit this node." +msgstr "El usuario no tiene permiso para editar este nodo." + +#: app/views/auth.py:132 app/views/auth.py:155 app/views/auth.py:212 +msgid "User signup has been disabled. Please contact your administrator." +msgstr "El registro del usuario ha sido deshabilitado. Póngase en contacto con su administrador." + +#: app/views/auth.py:169 +msgid "Signup for Arches" +msgstr "Registrarse para arches" + +#: app/views/auth.py:172 +msgid "Thanks for your interest in Arches. Click on link below to confirm your email address! Use your email address to login." +msgstr "Gracias por tu interés en los arches.¡Haga clic en el enlace a continuación para confirmar su dirección de correo electrónico! Use su dirección de correo electrónico para iniciar sesión." + +#: app/views/auth.py:176 +msgid "This link expires in 24 hours. If you can't get to it before then, don't worry, you can always try again with the same email address." +msgstr "Este enlace expira en 24 horas. Si no puede llegar a él antes, no se preocupe, siempre puede intentarlo nuevamente con la misma dirección de correo electrónico." + +#: app/views/auth.py:185 +msgid "Welcome to Arches!" +msgstr "¡Bienvenido a Arches!" + +#: app/views/auth.py:190 +#, python-format +msgid "An email has been sent to
%s
with a link to activate your account" +msgstr "Se ha enviado un correo electrónico a
%s
con un enlace para activar su cuenta" + +#: app/views/auth.py:232 +msgid "The signup link has expired, please try signing up again. Thanks!" +msgstr "El enlace de registro ha expirado, intente registrarse nuevamente. Gracias!" + +#: app/views/auth.py:255 +msgid "Invalid password" +msgstr "Contraseña no válida" + +#: app/views/auth.py:257 +msgid "New password and confirmation must match" +msgstr "La nueva contraseña y la confirmación deben coincidir" + +#: app/views/auth.py:268 +msgid "Password successfully updated" +msgstr "Contraseña actualizada correctamente" + +#: app/views/auth.py:308 app/views/auth.py:326 +msgid "Make sure to set your OAUTH_CLIENT_ID in settings.py" +msgstr "Asegúrese de configurar su OAUTH_CLIENT_ID en settings.py" + +#: app/views/auth.py:372 +msgid "Update Two-Factor Authentication Settings" +msgstr "Actualizar la configuración de autenticación de dos factores" + +#: app/views/auth.py:374 +msgid "Click on link below to update your two-factor authentication settings." +msgstr "Haga clic en el enlace a continuación para actualizar su configuración de autenticación de dos factores." + +#: app/views/auth.py:376 +msgid "This link expires in 15 minutes. If you did not request this change, contact your Administrator immediately." +msgstr "Este enlace expira en 15 minutos. Si no solicitó este cambio, comuníquese con su administrador de inmediato." + +#: app/views/auth.py:385 +msgid "Arches Two-Factor Authentication" +msgstr "Arches Autenticación de dos factores" + +#: app/views/auth.py:390 +msgid "There has been error sending an email to this address. Please contact your system administrator." +msgstr "Ha habido un error de enviar un correo electrónico a esta dirección. Póngase en contacto con el administrador de su sistema." + +#: app/views/concept.py:68 +msgid "Using the RDM" +msgstr "Usando el RDM" + +#: app/views/concept.py:238 +msgid "Unable to Load SKOS File" +msgstr "No se puede cargar el archivo SKOS" + +#: app/views/concept.py:238 +msgid "There was an issue saving the contents of the file to Arches. " +msgstr "Hubo un problema para guardar el contenido del archivo en Arches. " + +#: app/views/concept.py:274 +msgid "Unable to Delete" +msgstr "No se puede eliminar" + +#: app/views/concept.py:274 +msgid "This concept or one of it's subconcepts is already in use by an existing resource." +msgstr "Este concepto o uno de sus subconceptos ya está en uso por un recurso existente." + +#: app/views/concept.py:327 +msgid "Success" +msgstr "Éxito" + +#: app/views/concept.py:327 +msgid "Collection successfully created from the selected concept" +msgstr "Colección creada con éxito a partir del concepto seleccionado" + +#: app/views/concept.py:329 +msgid "Unable to Make Collection" +msgstr "No se puede hacer una colección" + +#: app/views/concept.py:329 +msgid "Unable to make a collection from the selected concept." +msgstr "No se puede hacer una colección del concepto seleccionado." + +#: app/views/graph.py:154 +msgid "Using the Arches Designer" +msgstr "Usando el diseñador de arches" + +#: app/views/graph.py:171 +#, python-brace-format +msgid "No namespaces appear to be associated with {ontology.ontologyid} in the ontologies table. This is not a problem as long as all necessary namespaces are included in the ONTOLOGY_NAMESPACES setting." +msgstr "No parece haber ningún espacio de nombres asociado a {ontology.ontologyid} en la tabla de ontologías. Esto no es un problema siempre que se incluyan todos los espacios de nombres necesarios en el ajuste ONTOLOGY_NAMESPACES." + +#: app/views/graph.py:215 +msgid "Branch Library" +msgstr "Biblioteca de rama" + +#: app/views/graph.py:215 +msgid "Find a graph branch" +msgstr "Encuentra una rama gráfica" + +#: app/views/graph.py:261 +msgid "Designing a Resource Model" +msgstr "Diseño de un modelo de recursos" + +#: app/views/graph.py:263 +msgid "Designing a Branch" +msgstr "Diseñando una rama" + +#: app/views/graph.py:425 +msgid "Elasticsearch indexing error" +msgstr "Error de indexación de ElasticSearch" + +#: app/views/graph.py:427 +msgid "" +"If you want to change the datatype of an existing node.\n" +" Delete and then re-create the node, or export the branch then edit the datatype and re-import the branch." +msgstr "" +"Si desea cambiar el tipo de datos de un nodo existente.\n" +"Elimine y luego vuelva a crear el nodo, o exporte la rama, edite el tipo de datos y vuelva a importar la rama." + +#: app/views/graph.py:546 +msgid "Managing Functions" +msgstr "Gestión de funciones" + +#: app/views/manifest_manager.py:300 +msgid "IIIF server proxy not configured" +msgstr "IIIF Proxy no configurado" + +#: app/views/manifest_manager.py:306 +msgid "Manifest Validation Error" +msgstr "Error de validación manifiesto" + +#: app/views/map.py:134 +msgid "Tileserver proxy not configured" +msgstr "Proxy de mando de mando no configurado" + +#: app/views/resource.py:92 +msgid "Creating Resources" +msgstr "Creación de recursos" + +#: app/views/resource.py:350 +msgid "Managing System Settings" +msgstr "Administración de la configuración del sistema" + +#: app/views/resource.py:352 +msgid "Using the Resource Editor" +msgstr "Usando el editor de recursos" + +#: app/views/resource.py:357 +msgid "Unable to Delete Resource" +msgstr "No se puede eliminar el recurso" + +#: app/views/resource.py:358 +msgid "User does not have permissions to delete this instance because the instance or its data is restricted" +msgstr "El usuario no tiene permisos para eliminar esta instancia porque la instancia o sus datos están restringidos" + +#: app/views/resource.py:367 +msgid "Unable to delete. Please verify the model is not currently published." +msgstr "Incapaz de eliminar. Por favor, verifique que el modelo no se publique actualmente." + +#: app/views/resource.py:547 app/views/resource.py:553 +msgid "Resource Created" +msgstr "Recurso creado" + +#: app/views/resource.py:548 +msgid "Resource Deleted" +msgstr "Recursos eliminados" + +#: app/views/resource.py:549 +msgid "Tile Deleted" +msgstr "Mosaicos eliminado" + +#: app/views/resource.py:550 +msgid "Tile Created" +msgstr "Mosaicos creados" + +#: app/views/resource.py:551 +msgid "Tile Updated" +msgstr "Mosaico actualizados" + +#: app/views/resource.py:552 +msgid "Edit Deleted" +msgstr "Editar Eliminado" + +#: app/views/resource.py:771 +msgid "Failed to fetch resource instance descriptors" +msgstr "No se pudo obtener descriptores de instancias de recursos" + +#: app/views/resource.py:788 +msgid "No active report template is available for this resource." +msgstr "No hay plantilla de informe activo disponible para este recurso." + +#: app/views/resource.py:903 +msgid "Unable to delete. Relationship does not exist" +msgstr "No se puede eliminar. La relación no existe" + +#: app/views/resource.py:966 app/views/resource.py:980 app/views/tile.py:151 +msgid "Unable to save. Please verify the model is not currently published." +msgstr "No se puede guardar. Por favor, verifique que el modelo no se publique actualmente." + +#: app/views/search.py:109 +msgid "Searching the Database" +msgstr "Buscando la base de datos" + +#: app/views/search.py:228 +#, python-brace-format +msgid "Your search exceeds the {download_limit} instance download limit. Anonymous users cannot run an export exceeding this limit. Please sign in with your {app_name} account or refine your search" +msgstr "Su búsqueda supera el límite de descarga de instancias {download_limit}. Los usuarios anónimos no pueden realizar una exportación que supere este límite. Inicie sesión con su cuenta {app_name} o redefina su búsqueda" + +#: app/views/search.py:244 +#, python-brace-format +msgid "{total} instances have been submitted for export. Click the Bell icon to check for a link to download your data" +msgstr "se han enviado {total} instancias para su exportación. Haga clic en el icono de la campana para comprobar si hay un enlace para descargar sus datos" + +#: app/views/search.py:249 +#, python-brace-format +msgid "Your search exceeds the {download_limit} instance download limit. Please refine your search" +msgstr "Su búsqueda excede el límite de descarga de instancia {download_limit}.Refina su búsqueda" + +#: app/views/search.py:270 +msgid "Either no instances were identified for export or no resources have exportable geometry nodes Please confirm that the models of instances you would like to export have geometry nodes and that those nodes are set as exportable" +msgstr "O no se identificaron instancias para la exportación o ningún recurso tiene nodos de geometría exportable, confirme que los modelos de instancias que desea exportar tienen nodos de geometría y que esos nodos se establecen como exportables" + +#: app/views/search.py:401 +msgid "There was an error retrieving the search results" +msgstr "Hubo un error para recuperar los resultados de la búsqueda" + +#: app/views/search.py:500 +msgid "Downloading" +msgstr "Descargando" + +#: app/views/search.py:502 +msgid "The requested file is no longer available" +msgstr "El archivo solicitado ya no está disponible" + +#: app/views/tile.py:72 +msgid "Saving tile failed" +msgstr "Fallo al querer guardar el Mosaico" + +#: app/views/tile.py:124 +msgid "Unable to save. Please verify the model is currently unpublished." +msgstr "No se puede guardar. Verifique que el modelo esté actualmente inédito." + +#: app/views/tile.py:133 app/views/tile.py:235 +msgid "This tile is no longer available" +msgstr "Este mosaico ya no está disponible" + +#: app/views/tile.py:133 +msgid "It was likely deleted by another user" +msgstr "Probablemente fue eliminado por otro usuario" + +#: app/views/tile.py:148 +msgid "Unable to save. Please verify your input is valid" +msgstr "No se puede guardar. Verifique que su entrada sea válida" + +#: app/views/tile.py:154 +msgid "Unable to save." +msgstr "No se puede guardar." + +#: app/views/tile.py:181 app/views/tile.py:184 app/views/tile.py:259 app/views/tile.py:261 app/views/tile.py:265 app/views/tile.py:286 +msgid "Request Failed" +msgstr "Solicitud fallida" + +#: app/views/tile.py:181 +msgid "Unable to Save. Verify model status is active" +msgstr "No se puede guardar. Verificar el estado del modelo está activo" + +#: app/views/tile.py:184 app/views/tile.py:259 +msgid "Permission Denied" +msgstr "Permiso denegado" + +#: app/views/tile.py:235 +msgid "It was likely already deleted by another user" +msgstr "Probablemente ya fue eliminado por otro usuario" + +#: app/views/tile.py:261 +msgid "Unable to delete. Verify model status is active" +msgstr "No se puede eliminar. Verificar el estado del modelo está activo" + +#: app/views/tile.py:265 +msgid "You do not have permissions to delete a tile with authoritative data." +msgstr "No tiene permisos para eliminar un mosaico con datos autorizados." + +#: app/views/user.py:47 +msgid "Not yet logged in" +msgstr "Aún no ha iniciado sesión" + +#: app/views/user.py:110 app/views/user.py:145 +msgid "Profile Editing" +msgstr "Edición de perfil" + +#: app/views/user.py:167 +msgid "Your " +msgstr "Su " + +#: management/commands/load_ontology.py:84 +msgid "You must supply an ontology_config.json within your ontology source directory." +msgstr "Debe suministrar una ontology_config.json dentro de su directorio fuente de ontología." + +#: management/commands/load_ontology.py:85 +#, python-brace-format +msgid "'{config_file}' was not found." +msgstr "'{config_file}' no se encontró." + +#: management/commands/load_ontology.py:89 +msgid "You must supply a version number using the -vn/--version argument." +msgstr "Debe proporcionar un número de versión usando el argumento de versión -vn/-." + +#: app/templates/javascript.htm:436 +msgid "Results: ${shown} of ${total}" +msgstr "Resultados: ${shown} de ${total}" diff --git a/arches/gunicorn_config.py b/arches/gunicorn_config.py new file mode 100644 index 0000000..40edeaf --- /dev/null +++ b/arches/gunicorn_config.py @@ -0,0 +1,242 @@ +# Copied from: +# https://github.com/archesproject/arches/blob/dev/7.6.x/docker/gunicorn_config.py +# +# NOTE: This does NOT work and will throw errors with urls.py if used as is. +# Edit this to customize Gunicorn settings + + +import os +from django.core.exceptions import ImproperlyConfigured + + +def get_optional_env_variable(var_name): + try: + return os.environ[var_name] + except KeyError: + return None + + +# +# Server socket +# +# bind - The socket to bind. +# +# A string of the form: 'HOST', 'HOST:PORT', 'unix:PATH'. +# An IP is a valid HOST. +# +# backlog - The number of pending connections. This refers +# to the number of clients that can be waiting to be +# served. Exceeding this number results in the client +# getting an error when attempting to connect. It should +# only affect servers under significant load. +# +# Must be a positive integer. Generally set in the 64-2048 +# range. +# + +django_port = get_optional_env_variable("DJANGO_PORT") +listen_port = django_port or "8000" +bind = "0.0.0.0:" + listen_port + +backlog = get_optional_env_variable("GUNICORN_BACKLOG") or 2048 + +# +# Worker processes +# +# workers - The number of worker processes that this server +# should keep alive for handling requests. +# +# A positive integer generally in the 2-4 x $(NUM_CORES) +# range. You'll want to vary this a bit to find the best +# for your particular application's work load. +# +# worker_class - The type of workers to use. The default +# sync class should handle most 'normal' types of work +# loads. You'll want to read +# http://docs.gunicorn.org/en/latest/design.html#choosing-a-worker-type +# for information on when you might want to choose one +# of the other worker classes. +# +# A string referring to a Python path to a subclass of +# gunicorn.workers.base.Worker. The default provided values +# can be seen at +# http://docs.gunicorn.org/en/latest/settings.html#worker-class +# +# worker_connections - For the eventlet and gevent worker classes +# this limits the maximum number of simultaneous clients that +# a single process can handle. +# +# A positive integer generally set to around 1000. +# +# timeout - If a worker does not notify the master process in this +# number of seconds it is killed and a new worker is spawned +# to replace it. +# +# Generally set to thirty seconds. Only set this noticeably +# higher if you're sure of the repercussions for sync workers. +# For the non sync workers it just means that the worker +# process is still communicating and is not tied to the length +# of time required to handle a single request. +# +# keepalive - The number of seconds to wait for the next request +# on a Keep-Alive HTTP connection. +# +# A positive integer. Generally set in the 1-5 seconds range. +# + +workers = get_optional_env_variable("GUNICORN_WORKERS") or 2 +worker_class = get_optional_env_variable("GUNICORN_WORKER_CLASS") or "sync" +worker_connections = get_optional_env_variable("GUNICORN_WORKER_CONNECTIONS") or 1000 +timeout = get_optional_env_variable("GUNICORN_WORKER_TIMEOUT") or 30 +keepalive = get_optional_env_variable("GUNICORN_KEEPALIVE") or 2 + +# +# spew - Install a trace function that spews every line of Python +# that is executed when running the server. This is the +# nuclear option. +# +# True or False +# + +spew = get_optional_env_variable("GUNICORN_SPEW") or False + +# +# Server mechanics +# +# daemon - Detach the main Gunicorn process from the controlling +# terminal with a standard fork/fork sequence. +# +# True or False +# +# raw_env - Pass environment variables to the execution environment. +# +# pidfile - The path to a pid file to write +# +# A path string or None to not write a pid file. +# +# user - Switch worker processes to run as this user. +# +# A valid user id (as an integer) or the name of a user that +# can be retrieved with a call to pwd.getpwnam(value) or None +# to not change the worker process user. +# +# group - Switch worker process to run as this group. +# +# A valid group id (as an integer) or the name of a user that +# can be retrieved with a call to pwd.getgrnam(value) or None +# to change the worker processes group. +# +# umask - A mask for file permissions written by Gunicorn. Note that +# this affects unix socket permissions. +# +# A valid value for the os.umask(mode) call or a string +# compatible with int(value, 0) (0 means Python guesses +# the base, so values like "0", "0xFF", "0022" are valid +# for decimal, hex, and octal representations) +# +# tmp_upload_dir - A directory to store temporary request data when +# requests are read. This will most likely be disappearing soon. +# +# A path to a directory where the process owner can write. Or +# None to signal that Python should choose one on its own. +# + +daemon = get_optional_env_variable("GUNICORN_DAEMON") or False +raw_env = get_optional_env_variable("GUNICORN_RAW_ENV") or [] +pidfile = get_optional_env_variable("GUNICORN_PIDFILE") or None +umask = get_optional_env_variable("GUNICORN_UMASK") or 0 +user = get_optional_env_variable("GUNICORN_USER") or None +group = get_optional_env_variable("GUNICORN_GROUP") or None +tmp_upload_dir = get_optional_env_variable("GUNICORN_TMP_UPLOAD_DIR") or None + +# +# Logging +# +# logfile - The path to a log file to write to. +# +# A path string. "-" means log to stdout. +# +# loglevel - The granularity of log output +# +# A string of "debug", "info", "warning", "error", "critical" +# + +errorlog = get_optional_env_variable("GUNICORN_ERRORLOG") or "-" +loglevel = get_optional_env_variable("GUNICORN_LOGLEVEL") or "info" +accesslog = get_optional_env_variable("GUNICORN_ACCESSLOG") or "-" +access_log_format = ( + get_optional_env_variable("GUNICORN_ACCESS_LOG_FORMAT") + or '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' +) + +# +# Process naming +# +# proc_name - A base to use with setproctitle to change the way +# that Gunicorn processes are reported in the system process +# table. This affects things like 'ps' and 'top'. If you're +# going to be running more than one instance of Gunicorn you'll +# probably want to set a name to tell them apart. This requires +# that you install the setproctitle module. +# +# A string or None to choose a default of something like 'gunicorn'. +# + +proc_name = get_optional_env_variable("GUNICORN_PROC_NAME") or None + +# +# Server hooks +# +# post_fork - Called just after a worker has been forked. +# +# A callable that takes a server and worker instance +# as arguments. +# +# pre_fork - Called just prior to forking the worker subprocess. +# +# A callable that accepts the same arguments as after_fork +# +# pre_exec - Called just prior to forking off a secondary +# master process during things like config reloading. +# +# A callable that takes a server instance as the sole argument. +# + + +def post_fork(server, worker): + server.log.info("Worker spawned (pid: %s)", worker.pid) + + +def pre_fork(server, worker): + pass + + +def pre_exec(server): + server.log.info("Forked child, re-executing.") + + +def when_ready(server): + server.log.info("Server is ready. Spawning workers") + + +def worker_int(worker): + worker.log.info("worker received INT or QUIT signal") + + # get traceback info + import threading + import sys + import traceback + + id2name = {th.ident: th.name for th in threading.enumerate()} + code = [] + for threadId, stack in list(sys._current_frames().items()): + code.append("\n# Thread: %s(%d)" % (id2name.get(threadId, ""), threadId)) + for filename, lineno, name, line in traceback.extract_stack(stack): + code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) + if line: + code.append(" %s" % (line.strip())) + worker.log.debug("\n".join(code)) + + +def worker_abort(worker): + worker.log.info("worker received SIGABRT signal") \ No newline at end of file diff --git a/arches/settings_local.py b/arches/settings_local.py new file mode 100644 index 0000000..489cdb0 --- /dev/null +++ b/arches/settings_local.py @@ -0,0 +1,118 @@ +import os +from django.core.exceptions import ImproperlyConfigured +import ast + + +def get_env_variable(var_name): + msg = "Set the %s environment variable" + try: + return os.environ[var_name] + except KeyError: + error_msg = msg % var_name + raise ImproperlyConfigured(error_msg) + + +def get_optional_env_variable(var_name): + try: + return os.environ[var_name] + except KeyError: + return None + + +# options are either "PROD" or "DEV" +# (installing with Dev mode set gets you extra dependencies) +MODE = get_env_variable("DJANGO_MODE") + +DEBUG = ast.literal_eval(get_env_variable("DJANGO_DEBUG")) + +if not DEBUG: + # Some extra security settings for production deployments + + SESSION_COOKIE_SECURE = True + # We could use the DOMAINS envinronment variable here, but + # since we're only supporting one domain and that's the same + # has DEPLOY_HOST that is used for the SSL CERT_PATH. + DEPLOY_HOST = get_env_variable("DEPLOY_HOST") + CSRF_TRUSTED_ORIGINS = [ + f"https://{DEPLOY_HOST}", + ] + +# Set the APP_NAME here too, it may be useful for making the URLs +# work correctly when running gunicorn. +APP_NAME = get_env_variable("ARCHES_PROJECT") + + +DATABASES = { + "default": { + "ENGINE": "django.contrib.gis.db.backends.postgis", + "NAME": get_env_variable("PGDBNAME"), + "USER": get_env_variable("PGUSERNAME"), + "PASSWORD": get_env_variable("PGPASSWORD"), + "HOST": get_env_variable("PGHOST"), + "PORT": get_env_variable("PGPORT"), + "POSTGIS_TEMPLATE": "template_postgis", + } +} + +ARCHES_NAMESPACE_FOR_DATA_EXPORT = get_env_variable("ARCHES_NAMESPACE") + +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.redis.RedisCache", + "LOCATION": "redis://arches_redis:6379/1", + }, + "user_permission": { + "BACKEND": "django.core.cache.backends.db.DatabaseCache", + "LOCATION": "user_permission_cache", + }, +} + +""" +Since we're using Docker, we can use Redis (even on a Windows OS). So, we +will comment out the RabbitMQ connection in favor of a Redis connection. + +CELERY_BROKER_URL = "amqp://{}:{}@arches_rabbitmq:5672".format( + get_env_variable("RABBITMQ_USER"), get_env_variable("RABBITMQ_PASS") +) +""" + +CELERY_BROKER_URL = "redis://@arches_redis:6379/0" + +# NOTE: If you want to disable celery and workers, leave a blank string fo +# the CELERY_BROKER_URL as follows: +# +# CELERY_BROKER_URL = "" + +# CANTALOUPE_HTTP_ENDPOINT = "http://{}:{}".format(get_env_variable("CANTALOUPE_HOST"), get_env_variable("CANTALOUPE_PORT")) +ELASTICSEARCH_HTTP_PORT = get_env_variable("ESPORT") +ELASTICSEARCH_HOSTS = [ + { + "scheme": "http", + "host": get_env_variable("ESHOST"), + "port": int(ELASTICSEARCH_HTTP_PORT), + } +] + +USER_ELASTICSEARCH_PREFIX = get_optional_env_variable("ELASTICSEARCH_PREFIX") +if USER_ELASTICSEARCH_PREFIX: + ELASTICSEARCH_PREFIX = USER_ELASTICSEARCH_PREFIX + +ALLOWED_HOSTS = get_env_variable("DOMAIN_NAMES").split() + ['*'] + +USER_SECRET_KEY = get_optional_env_variable("DJANGO_SECRET_KEY") +if USER_SECRET_KEY: + # Make this unique, and don't share it with anybody. + SECRET_KEY = USER_SECRET_KEY + +STATIC_ROOT = "/static_root" + +LANGUAGE_CODE = 'es' +# Added for v7 internationalization demo +# Change these to match the languages you want to support +LANGUAGES = [ + ('es', ('Spanish')), + ('en', ('English')), +] +# This does not work when using gunicorn +# SHOW_LANGUAGE_SWITCH = len(LANGUAGES) > 1 +SHOW_LANGUAGE_SWITCH = False diff --git a/arches/urls.py b/arches/urls.py new file mode 100644 index 0000000..20a4d1d --- /dev/null +++ b/arches/urls.py @@ -0,0 +1,22 @@ +from django.conf import settings +from django.conf.urls.static import static +from django.conf.urls.i18n import i18n_patterns +from django.urls import include, path + +urlpatterns = [ + # project-level urls +] + +# Ensure Arches core urls are superseded by project-level urls +urlpatterns.append(path('', include('arches.urls'))) + +# Adds URL pattern to serve media files during development +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + +# Only handle i18n routing in active project. This will still handle the routes provided by Arches core and Arches applications, +# but handling i18n routes in multiple places causes application errors. +if settings.ROOT_URLCONF == __name__: + if settings.SHOW_LANGUAGE_SWITCH is True: + urlpatterns = i18n_patterns(*urlpatterns) + + urlpatterns.append(path("i18n/", include("django.conf.urls.i18n"))) \ No newline at end of file diff --git a/certbot/Dockerfile b/certbot/Dockerfile new file mode 100644 index 0000000..2d89aa4 --- /dev/null +++ b/certbot/Dockerfile @@ -0,0 +1,9 @@ +FROM certbot/certbot + +RUN apk add --no-cache bash + +COPY certbot.sh /opt/ + +RUN chmod +x /opt/certbot.sh + +ENTRYPOINT ["/opt/certbot.sh"] \ No newline at end of file diff --git a/certbot/certbot.sh b/certbot/certbot.sh new file mode 100644 index 0000000..903c076 --- /dev/null +++ b/certbot/certbot.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -e + +trap exit INT TERM + +if [ -z "$DOMAINS" ]; then + echo "DOMAINS environment variable is not set" + exit 1; +fi + +until nc -z nginx 80; do + echo "Waiting for nginx to start..." + sleep 5s & wait ${!} +done + +if [ "$CERTBOT_TEST_CERT" != "0" ]; then + test_cert_arg="--test-cert" +fi + +domains_fixed=$(echo "$DOMAINS" | tr -d \") +domain_list=($domains_fixed) +emails_fixed=$(echo "$CERTBOT_EMAILS" | tr -d \") +emails_list=($emails_fixed) +for i in "${!domain_list[@]}"; do + domain="${domain_list[i]}" + + echo "Make cerbot directory for $domain"; + mkdir -p /var/www/certbot/$domain; + echo "Make the $domain deep directory for acme-challenges"; + mkdir -p /var/www/certbot/$domain/.well-known/acme-challenge; + + if [ -d "/etc/letsencrypt/live/$domain" ]; then + echo "Let's Encrypt certificate for $domain already exists" + continue + fi + + email="${emails_list[i]}" + if [ -z "$email" ]; then + email_arg="--register-unsafely-without-email" + echo "Obtaining the certificate for $domain without email" + else + email_arg="--email $email" + echo "Obtaining the certificate for $domain with email $email" + fi + + certbot certonly \ + --webroot \ + -w "/var/www/certbot/$domain" \ + -d "$domain" \ + $test_cert_arg \ + $email_arg \ + --rsa-key-size "${CERTBOT_RSA_KEY_SIZE:-4096}" \ + --agree-tos \ + --noninteractive \ + --verbose || true +done \ No newline at end of file diff --git a/code_of_conduct.md b/code_of_conduct.md new file mode 100644 index 0000000..e80031c --- /dev/null +++ b/code_of_conduct.md @@ -0,0 +1,20 @@ +# Code of Conduct + +## Our Pledge + +We welcome collaboration to improve this software repository. + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Expectations + +We expect contributors to conduct themselves according to the +expectations of the Arches Community code of conduct (see: https://www.archesproject.org/code-of-conduct/). Please carefully review the Arches code of conduct and use it to make positive contributions to this and other Arches related projects. diff --git a/cron/Dockerfile b/cron/Dockerfile new file mode 100644 index 0000000..7c0e6b0 --- /dev/null +++ b/cron/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine:3.16 + +RUN apk update && \ + apk add --no-cache docker-cli docker-cli-compose + +COPY renew_certs.sh /etc/periodic/daily/renew_certs + +RUN chmod +x /etc/periodic/daily/renew_certs + +WORKDIR /workdir + +CMD ["crond", "-f", "-l", "0"] \ No newline at end of file diff --git a/cron/renew_certs.sh b/cron/renew_certs.sh new file mode 100644 index 0000000..267dd93 --- /dev/null +++ b/cron/renew_certs.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +cd /workdir +echo "Renewing Let's Encrypt Certificates... (`date`)" +docker compose run --rm --no-TTY --entrypoint certbot certbot renew --no-random-sleep-on-renew +echo "Reloading Nginx configuration" +docker compose exec --no-TTY nginx nginx -s reload diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6bbd2a8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,219 @@ +services: + + arches_db: + container_name: arches_db + image: postgis/postgis:14-3.2 + env_file: + - ./.env + environment: + - PGUSER=postgres + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgis + - POSTGRES_MULTIPLE_EXTENSIONS=postgis,postgis_topology + restart: always + volumes: + - postgres-data:/var/lib/postgresql/data/ + - postgres-log:/var/log/postgresql + - ./init-unix.sql:/docker-entrypoint-initdb.d/init.sql # to set up the DB template + - ../arches_data/:/arches_data + ports: + - '5434:5432' + logging: + driver: "json-file" + options: + max-size: "10k" + max-file: "10" + networks: + - arches_net + + arches_elasticsearch: + container_name: arches_elasticsearch + image: elasticsearch:8.5.3 + restart: always + env_file: + - ./.env + environment: + - TZ="${TZ}" + - xpack.security.enabled=false + - discovery.type=single-node + - "ES_JAVA_OPTS=-Xms400m -Xmx400m" + volumes: + - elasticsearch-data:/usr/share/elasticsearch/data + ports: + - "9202:9200" + - "9302:9300" + logging: + driver: "json-file" + options: + max-size: "10k" + max-file: "10" + networks: + - arches_net + + arches_redis: + container_name: arches_redis + image: "redis:6-alpine" + restart: always + ports: + - "6379:6379" + volumes: + - "redisdata:/data" + command: "redis-server" + logging: + driver: "json-file" + options: + max-size: "10k" + max-file: "10" + networks: + - arches_net + + pg_tilesrv: + container_name: pg_tilesrv + image: pramsey/pg_tileserv:latest-amd64 + restart: always + tty: true + environment: + - DATABASE_URL=${DATABASE_URL} + ports: + - 7800:7800 + expose: + - 7800:7800 + networks: + - arches_net + + arches: + container_name: arches + image: arches + env_file: + - ./.env + build: + context: . + dockerfile: arches/Dockerfile + args: + ARCHES_PROJECT: ${ARCHES_PROJECT} + ARCHES_ROOT: ${ARCHES_ROOT} + APP_ROOT: ${APP_ROOT} + APP_COMP_FOLDER: ${APP_COMP_FOLDER} + environment: + - DEBUG="${DJANGO_DEBUG}" + - ARCHES_PROJECT=${ARCHES_PROJECT} + stdin_open: true # docker run -i + tty: true # docker run -t + ports: + - "5432:5432" + - 8004:8000 + - 5678:5678 + - 5984:5984 + depends_on: + - arches_db + - arches_elasticsearch + - arches_redis + command: + - run_arches + expose: + - 8004:8000 + volumes: + - arches-log:/web_root/logs + - arches-static:/static_root + - arches-app:/arches_app + - ../arches_data/:/arches_data + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "10" + networks: + - arches_net + + nginx: + container_name: nginx + build: ./nginx + image: arches_via_docker/nginx + env_file: + - ./.env + environment: + - DOMAINS="${DOMAINS}" + - DEPLOY_HOST="${DEPLOY_HOST}" + - CERT_PATH="${CERT_PATH}" + - DJANGO_PORT="${DJANGO_PORT}" + volumes: + - logs_nginx:/logs/nginx + - nginx_ssl:/etc/nginx/ssl + - certbot_certs:/etc/letsencrypt + - arches_certbot:$CERT_PATH + - arches-static:/static_root + - ./html:$NGINX_HTML_PATH + ports: + - "80:80" + - "443:443" + restart: always + depends_on: + - arches + - pg_tilesrv + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "10" + networks: + - arches_net + + certbot: + container_name: certbot + build: ./certbot + image: arches_oc/certbot + env_file: + - ./.env + volumes: + - certbot_certs:/etc/letsencrypt + - arches_certbot:$CERT_PATH + logging: + driver: "json-file" + options: + max-size: "1k" + max-file: "3" + networks: + - arches_net + + cron: + container_name: cron + build: ./cron + image: arches_via_docker/cron + environment: + COMPOSE_PROJECT_NAME: "${COMPOSE_PROJECT_NAME}" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./:/workdir:ro + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "1k" + max-file: "3" + networks: + - arches_net + +networks: + arches_net: + #driver: bridge + #name: arches_net + external: true + name: sprpcb_net + +volumes: + nginx_ssl: + external: true + certbot_certs: + external: true + arches_certbot: + external: true + redisdata: + couchdb-data: + couchdb-log: + postgres-data: + postgres-log: + elasticsearch-data: + arches-log: + arches-static: + arches-app: + logs_nginx: diff --git a/edit_dot_env b/edit_dot_env new file mode 100644 index 0000000..74ad09b --- /dev/null +++ b/edit_dot_env @@ -0,0 +1,71 @@ +# Edit this file and save as ".env" for use. + +COMPOSE_PROJECT_NAME=arches_proy + +# Not supporting multiple domains yet, so just make sure there's only +# one here. +DOMAINS=pmoxos.patrimonio.org.bo +DEPLOY_HOST=$DOMAINS +NGINX_HTML_PATH=/var/www/html/$DEPLOY_HOST +CERT_PATH=/var/www/certbot/$DEPLOY_HOST +CERTBOT_EMAILS=sysadmin@patrimonio.org.bo +CERTBOT_TEST_CERT=0 +CERTBOT_RSA_KEY_SIZE=4096 +TZ="America/La_Paz" + +#arches project and paths +ARCHES_PIP_VERSION="7.6.19" +ARCHES_PROJECT=arches_proy +ARCHES_ROOT=/arches_app +APP_ROOT=$ARCHES_ROOT/$ARCHES_PROJECT +APP_COMP_FOLDER=$APP_ROOT/$ARCHES_PROJECT + +# for file uploads +UPLOADED_FILES_FOLDER=$APP_COMP_FOLDER/uploadedfiles + +#Arches configs +# NOTE: the ARCHES_NAMESPACE needs to look like a URL, ending in a '/', +# with the same port as used by the Arches Django APP. +ARCHES_NAMESPACE=http://$ARCHES_PROJECT:8000/ +# This will hopefully make the yarn build not fail. +NODE_OPTIONS='--max-old-space-size=1024' +INSTALL_DEFAULT_GRAPHS=True +INSTALL_DEFAULT_CONCEPTS=True +# Don't change these, because I can't figure out how dynamically pass +# a new database password to Postgres via docker compose. If you change +# something like the PGPASSWORD, be sure to change it in the corresponding +# value in the docker-compse.yml for the Postgres container. +PGUSERNAME=postgres +PGPASSWORD=postgis +PGDBNAME=$ARCHES_PROJECT +PGHOST=arches_db +PGPORT=5432 +ESHOST=arches_elasticsearch +ESPORT=9200 +DJANGO_MODE=DEV +DJANGO_DEBUG=False +# Don't change the port, since it's pretty hard-coded. +DJANGO_PORT=8000 +DOMAIN_NAMES=$DOMAINS localhost 0.0.0.0 127.0.0.1 +# NOTE: Only set BUILD_PRODUCTION=True if you have well over +# 8GB of system RAM. Otherwise, yarn will likely error out. +BUILD_PRODUCTION=False +PYTHONUNBUFFERED=0 +ELASTICSEARCH_PREFIX=$ARCHES_PROJECT + +# RabbitMQ credentials. We're currently using Redis as a task +# broker, not RabbitMQ, so these are commented out. +# RABBITMQ_USER=guest +# RABBITMQ_PASS=guest + +# couchdb for arches. Not needed for V7+, but config exists incase it +# reappears. +COUCHDB_HOST=arches +COUCHDB_PORT=5984 +COUCHDB_USER=admin +COUCHDB_PASS=password +COUCHDB_URL=http://$COUCHDB_USER:$COUCHDB_PASS@$COUCHDB_HOST:$COUCHDB_PORT + +# The DATABASE_URL is a convenience consolidated way help connect to Postgresql +# pg_featureserv and tileserv +DATABASE_URL=postgresql://$PGUSERNAME:$PGPASSWORD@$PGHOST/$PGDBNAME diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..4700f49 --- /dev/null +++ b/html/index.html @@ -0,0 +1,24 @@ + + + + + + Hello + + + + +
+
+

+ Hello from the Arches via Docker NGINX Server +

+

+

+
+
+ + + \ No newline at end of file diff --git a/init-unix.sql b/init-unix.sql new file mode 100644 index 0000000..a9c0d25 --- /dev/null +++ b/init-unix.sql @@ -0,0 +1,13 @@ +UPDATE pg_database SET datistemplate='false' WHERE datname='template_postgis'; +DROP DATABASE IF EXISTS template_postgis; +CREATE DATABASE template_postgis WITH ENCODING 'UTF8'; +UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis'; + +\c template_postgis + +CREATE EXTENSION IF NOT EXISTS postgis; +GRANT ALL ON geometry_columns TO PUBLIC; +GRANT ALL ON geography_columns TO PUBLIC; +GRANT ALL ON spatial_ref_sys TO PUBLIC; + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; \ No newline at end of file diff --git a/logs/README.md b/logs/README.md new file mode 100644 index 0000000..ab11019 --- /dev/null +++ b/logs/README.md @@ -0,0 +1,3 @@ +# Logs Directory +------------------------------------------------------- +These will provide a unified place to output logs diff --git a/logs/arches/README.md b/logs/arches/README.md new file mode 100644 index 0000000..ab11019 --- /dev/null +++ b/logs/arches/README.md @@ -0,0 +1,3 @@ +# Logs Directory +------------------------------------------------------- +These will provide a unified place to output logs diff --git a/logs/nginx/README.md b/logs/nginx/README.md new file mode 100644 index 0000000..ab11019 --- /dev/null +++ b/logs/nginx/README.md @@ -0,0 +1,3 @@ +# Logs Directory +------------------------------------------------------- +These will provide a unified place to output logs diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..5123688 --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,18 @@ +FROM nginx:1.18-alpine-perl + +RUN apk add --no-cache nginx-mod-http-perl +RUN apk add --no-cache openssl + +COPY nginx.conf /etc/nginx/nginx.conf +COPY default.conf /etc/nginx/conf.d/default.conf +COPY options-ssl-nginx.conf /etc/nginx/ +COPY hsts.conf /etc/nginx/ +RUN mkdir -p /customization +COPY blacklist.conf /customization/blacklist.conf +RUN mkdir -p /etc/symb_link_ssl +RUN mkdir -p /logs/nginx +COPY nginx.sh /customization/nginx.sh +RUN chmod +x /customization/nginx.sh + +EXPOSE 80 +CMD ["/customization/nginx.sh"] \ No newline at end of file diff --git a/nginx/blacklist.conf b/nginx/blacklist.conf new file mode 100644 index 0000000..b500ad4 --- /dev/null +++ b/nginx/blacklist.conf @@ -0,0 +1,132 @@ +### This file implements a blacklist for certain user agents and +### referrers. It's a first line of defense. It must be included +### inside an http block. +### +### Author: mariusv +### +### Contributors: mitchellkrogza https://github.com/mitchellkrogza/nginx-badbot-blocker +### +### Last Updated: 2017-01-11 +### +### Bad URL Referer lists extracted from: +### https://perishablepress.com/blacklist/ultimate-referrer-blacklist.txt +### +### Tested on: version: nginx/1.10.0 (Ubuntu) +### +### Modifications: - Added to bad_bot list +### +### - Added to bad_referer list (excuse the nasty words) +### +### - Added bad_urls1 bad_urls2 bad_urls3 and bad_urls4 +### (Broken up into 4 sections for ease of maintenance) +### +### - Added validate_client (allowing all except Cyveillance IP's) +### (originally from https://github.com/oohnoitz/nginx-blacklist) +### +### I have this set up on my server as /etc/nginx/conf.d/blacklist.conf +### This is loaded and available for any vhost to use in its config +### +### Need I say, please don't just copy and paste this without reviewing what bots and +### referers are being blocked, you may want to exclude certain of them +### Also make SURE to whitelist your own IP's in the geo $bad_referer section. +### +### Note that: 0 = allow 1 = deny +### +### To enable it in a host file the following will go in the server block +### You can use all or just pick the one's you want on a host configuration +### You may also want to {return 444;} which is an Nginx feature that drops the +### connection immediately without even sending headers. +### +### # Block Bad Bots +### # Send 403 Forbidden or 444 Drop Connection +### if ($bad_bot) { return 444; } +### # Block Bad Referers +### # Send 403 Forbidden or 444 Drop Connection +### if ($bad_referer) { return 403; } +### if ($bad_urls1) { return 403; } +### if ($bad_urls2) { return 403; } +### if ($bad_urls3) { return 403; } +### if ($bad_urls4) { return 403; } +### if ($bad_urls5) { return 403; } +### if ($bad_urls6) { return 403; } +### # Block Snoopers +### # Send 444 Connection Closed Without Response +### if ($validate_client) { return 444;} +### +### NOTE: You need to change the hash max values or add them if they are not specified in your nginx.conf file +### This is because the defaults are too small and loading a big file like this into Nginx can cause errors +### Add the following into your nginx.conf file +### server_names_hash_bucket_size 64; +### server_names_hash_max_size 4096; +### +### Make sure to "sudo nginx -t" to check the config + + +map $http_user_agent $bad_bot { + default 0; + ~*^Lynx 0; # Let Lynx go through + libwww-perl 1; + ~*(?i)(80legs|360Spider|Aboundex|Abonti|Acunetix|^AIBOT|^Alexibot|Alligator|AllSubmitter|Apexoo|^asterias|^attach|^BackDoorBot|^BackStreet|^BackWeb|Badass|Bandit|Baid|Baiduspider|^BatchFTP|^Bigfoot|^Black.Hole|^BlackWidow|BlackWidow|^BlowFish|Blow|^BotALot|Buddy|^BuiltBotTough|^Bullseye|^BunnySlippers|BBBike|^Cegbfeieh|^CheeseBot|^CherryPicker|^ChinaClaw|^Cogentbot|CPython|Collector|cognitiveseo|Copier|^CopyRightCheck|^cosmos|^Crescent|CSHttp|^Custo|^Demon|^Devil|^DISCo|^DIIbot|discobot|^DittoSpyder|Download.Demon|Download.Devil|Download.Wonder|^dragonfly|^Drip|^eCatch|^EasyDL|^ebingbong|^EirGrabber|^EmailCollector|^EmailSiphon|^EmailWolf|^EroCrawler|^Exabot|^Express|Extractor|^EyeNetIE|FHscan|^FHscan|^flunky|^Foobot|^FrontPage|GalaxyBot|^gotit|Grabber|^GrabNet|^Grafula|^Harvest|^HEADMasterSEO|^hloader|^HMView|^HTTrack|httrack|HTTrack|htmlparser|^humanlinks|^IlseBot|Image.Stripper|Image.Sucker|imagefetch|^InfoNaviRobot|^InfoTekies|^Intelliseek|^InterGET|^Iria|^Jakarta|^JennyBot|^JetCar|JikeSpider|^JOC|^JustView|^Jyxobot|^Kenjin.Spider|^Keyword.Density|libwww|^larbin|LeechFTP|LeechGet|^LexiBot|^lftp|^libWeb|^likse|^LinkextractorPro|^LinkScan|^LNSpiderguy|^LinkWalker|msnbot|MSIECrawler|MJ12bot|MegaIndex|^Magnet|^Mag-Net|^MarkWatch|Mass.Downloader|masscan|^Mata.Hari|^Memo|^MIIxpc|^NAMEPROTECT|^Navroad|^NearSite|^NetAnts|^Netcraft|^NetMechanic|^NetSpider|^NetZIP|^NextGenSearchBot|^NICErsPRO|^niki-bot|^NimbleCrawler|^Nimbostratus-Bot|^Ninja|^Nmap|nmap|^NPbot|Offline.Explorer|Offline.Navigator|OpenLinkProfiler|^Octopus|^Openfind|^OutfoxBot|Pixray|probethenet|proximic|^PageGrabber|^pavuk|^pcBrowser|^Pockey|^ProPowerBot|^ProWebWalker|^psbot|^Pump|python-requests|^QueryN.Metasearch|^RealDownload|Reaper|^Reaper|^Ripper|Ripper|Recorder|^ReGet|^RepoMonkey|^RMA|scanbot|SEOkicks-Robot|seoscanners|^Stripper|^Sucker|Siphon|Siteimprove|^SiteSnagger|SiteSucker|^SlySearch|^SmartDownload|^Snake|^Snapbot|^Snoopy|Sosospider|^sogou|spbot|^SpaceBison|^spanner|^SpankBot|Spinn4r|^Sqworm|Sqworm|Stripper|Sucker|^SuperBot|SuperHTTP|^SuperHTTP|^Surfbot|^suzuran|^Szukacz|^tAkeOut|^Teleport|^Telesoft|^TurnitinBot|^The.Intraformant|^TheNomad|^TightTwatBot|^Titan|^True_Robot|^turingos|^TurnitinBot|^URLy.Warning|^Vacuum|^VCI|VidibleScraper|^VoidEYE|^WebAuto|^WebBandit|^WebCopier|^WebEnhancer|^WebFetch|^Web.Image.Collector|^WebLeacher|^WebmasterWorldForumBot|WebPix|^WebReaper|^WebSauger|Website.eXtractor|^Webster|WebShag|^WebStripper|WebSucker|^WebWhacker|^WebZIP|Whack|Whacker|^Widow|Widow|WinHTTrack|^WISENutbot|WWWOFFLE|^WWWOFFLE|^WWW-Collector-E|^Xaldon|^Xenu|^Zade|^Zeus|ZmEu|^Zyborg|SemrushBot|^WebFuck|^MJ12bot|^majestic12|^WallpapersHD) 1; +} + +## Add here all referrers that are to blocked. +map $http_referer $bad_referer_block { + default 0; +~(?i)(adcash|advair|allegra|ambien|amoxicillin|adult|anal|asshole|babes|baccarat|betting|bithack|blackjack|cash|casino|celeb|cheap|cialis|craps|credit|click|cunt|deal|debt|drug|diamond|effexor|equity|faxo|finance|fisting|forsale|gambling|gaysex|girl|hardcore|hold-em|holdem|iconsurf|ilovevitaly|insurance|interest|internetsupervision|jewelry|keno|levitra|lipitor|loan|loans|love|makemoneyonline|make-money-online|meds|money|mortgage|myftpupload|nudit|omaha|organic|paxil|pharmacy|pharmacies|phentermine|pheromone|pills|piss|poker|porn|poweroversoftware|refinance|replica|rimming|roulette|screentoolkit|seoexperimenty|sex|snuff|scout|seventwentyfour|slot|slots|syntryx|teen|texas|t0phackteam|tournament|tramadol|tramidol|valtrex|vvakhrin-ws1|viagra|vicodin|webcam|xanax|xnxx|xxxrus|zanax|zippo|zoloft) 1; +} + +## Add here all bad referer domains to be blocked - broken up into sections +## Alphabetical A - E (incl numbers) +map $http_referer $bad_urls1 { + default 0; + ~(?i)(^http://(www\.)?38ha(-|.).*$|^http://(www\.)?4free(-|.).*$|^http://(www\.)?4hs8(-|.).*$|^http://(www\.)?4t(-|.).*$|^http://(www\.)?4u(-|.).*$|^http://(www\.)?6q(-|.).*$|^http://(www\.)?7makemoneyonline(-|.).*$|^http://(www\.)?8gold(-|.).*$|^http://(www\.)?911(-|.).*$|^http://(www\.)?adcash(-|.).*$|^http://(www\.)?.*(-|.)?adult(-|.).*$|^http://(www\.)?.*(-|.)?acunetix-referrer(-|.).*$|^http://(www\.)?abalone(-|.).*$|^http://(www\.)?adminshop(-|.).*$|^http://(www\.)?adultactioncam(-|.).*$|^http://(www\.)?aizzo(-|.).*$|^http://(www\.)?alphacarolinas(-|.).*$|^http://(www\.)?amateur(-|.).*$|^http://(www\.)?amateurxpass(-|.).*$|^http://(www\.)?.*(-|.)?anal(-|.).*$|^http://(www\.)?ansar-u-deen(-|.).*$|^http://(www\.)?atelebanon(-|.).*$|^http://(www\.)?beastiality(-|.).*$|^http://(www\.)?bestiality(-|.).*$|^http://(www\.)?belize(-|.).*$|^http://(www\.)?best-deals(-|.).*$|^http://(www\.)?bithack(-|.).*$|^http://(www\.)?blogincome(-|.).*$|^http://(www\.)?bontril(-|.).*$|^http://(www\.)?bruce-holdeman(-|.).*$|^http://(www\.)?.*(-|.)?blow.?job(-|.).*$|^http://(www\.)?buttons-for-website(-|.).*$|^http://(www\.)?ca-america(-|.).*$|^http://(www\.)?chatt-net(-|.).*$|^http://(www\.)?cenokos(-|.).*$|^http://(www\.)?cenoval(-|.).*$|^http://(www\.)?cityadspix(-|.).*$|^http://(www\.)?commerce(-|.).*$|^http://(www\.)?condo(-|.).*$|^http://(www\.)?conjuratia(-|.).*$|^http://(www\.)?consolidate(-|.).*$|^http://(www\.)?coswap(-|.).*$|^http://(www\.)?crescentarian(-|.).*$|^http://(www\.)?crepesuzette(-|.).*$|^http://(www\.)?darodar(-|.).*$|^http://(www\.)?dating(-|.).*$|^http://(www\.)?devaddict(-|.).*$|^http://(www\.)?discount(-|.).*$|^http://(www\.)?doobu(-|.).*$|^http://(www\.)?domainsatcost(-|.).*$|^http://(www\.)?econom.co(-|.).*$|^http://(www\.)?edakgfvwql(-|.).*$|^http://(www\.)?.*(-|.)?sex(-|.).*$|^http://(www\.)?e-site(-|.).*$|^http://(www\.)?egygift(-|.).*$|^http://(www\.)?empathica(-|.).*$|^http://(www\.)?empirepoker(-|.).*$|^http://(www\.)?e-poker-2005(-|.).*$|^http://(www\.)?escal8(-|.).*$|^http://(www\.)?eurip(-|.).*$|^http://(www\.)?exitq(-|.).*$|^http://(www\.)?eyemagination(-|.).*$) 1; +} +## F - I +map $http_referer $bad_urls2 { + default 0; + ~(?i)(^http://(www\.)?fastcrawl(-|.).*$|^http://(www\.)?fearcrow(-|.).*$|^http://(www\.)?ferretsoft(-|.).*$|^http://(www\.)?fick(-|.).*$|^http://(www\.)?finance(-|.).*$|^http://(www\.)?flafeber(-|.).*$|^http://(www\.)?fidelityfunding(-|.).*$|^http://(www\.)?freakycheats(-|.).*$|^http://(www\.)?freeality(-|.).*$|^http://(www\.)?fuck(-|.).*$|^http://(www\.)?future-2000(-|.).*$|^http://(www\.)?.*(-|.)?gay(-|.).*$|^http://(www\.)?gobongo.info(-|.).*$|^http://(www\.)?gabriola(-|.).*$|^http://(www\.)?gallerylisting(-|.).*$|^http://(www\.)?gb.com(-|.).*$|^http://(www\.)?ghostvisitor(-|.).*$|^http://(www\.)?globusy(-|.).*$|^http://(www\.)?golf-e-course(-|.).*$|^http://(www\.)?gospelcom(-|.).*$|^http://(www\.)?gradfinder(-|.).*$|^http://(www\.)?hasfun(-|.).*$|^http://(www\.)?herbal(-|.).*$|^http://(www\.)?hermosa(-|.).*$|^http://(www\.)?highprofitclub(-|.).*$|^http://(www\.)?hilton(-|.).*$|^http://(www\.)?teaminspection(-|.).*$|^http://(www\.)?hotel(-|.).*$|^http://(www\.)?houseofseven(-|.).*$|^http://(www\.)?hurricane(-|.).*$|^http://(www\.)?.*(-|.)?incest(-|.).*$|^http://(www\.)?iaea(-|.).*$|^http://(www\.)?ilovevitality(-|.).*$|^http://(www\.)?ime(-|.).*$|^http://(www\.)?info(-|.).*$|^http://(www\.)?ingyensms(-|.).*$|^http://(www\.)?inkjet-toner(-|.).*$|^http://(www\.)?isacommie(-|.).*$|^http://(www\.)?istarthere(-|.).*$|^http://(www\.)?it.tt(-|.).*$|^http://(www\.)?italiancharms(-|.).*$|^http://(www\.)?iwantu(-|.).*$|^http://(www\.)?ilovevitality(-|.).*$|^http://(www\.)?iskalko.ru(-|.).*$) 1; +} +## J - P +map $http_referer $bad_urls3 { + default 0; + ~(?i)(^http://(www\.)?jfcadvocacy(-|.).*$|^http://(www\.)?jmhic(-|.).*$|^http://(www\.)?juris(-|.).*$|^http://(www\.)?kylos(-|.).*$|^http://(www\.)?laser-eye(-|.).*$|^http://(www\.)?leathertree(-|.).*$|^http://(www\.)?lillystar(-|.).*$|^http://(www\.)?linkerdome(-|.).*$|^http://(www\.)?livenet(-|.).*$|^http://(www\.)?low-limit(-|.).*$|^http://(www\.)?lowest-price(-|.).*$|^http://(www\.)?luxup.ru(-|.).*$|^http://(www\.)?macsurfer(-|.).*$|^http://(www\.)?mall.uk(-|.).*$|^http://(www\.)?maloylawn(-|.).*$|^http://(www\.)?marketing(-|.).*$|^http://(www\.)?.*(-|.)?mature(-|.).*$|^http://(www\.)?mcdortaklar(-|.).*$|^http://(www\.)?mediavisor(-|.).*$|^http://(www\.)?medications(-|.).*$|^http://(www\.)?mirror.sytes(-|.).*$|^http://(www\.)?mp3(-|.).*$|^http://(www\.)?(-|.)musicbox1(-|.).*$|^http://(www\.)?myftpupload(-|.).*$|^http://(www\.)?naked(-|.).*$|^http://(www\.)?netdisaster(-|.).*$|^http://(www\.)?netfirms(-|.).*$|^http://(www\.)?newtruths(-|.).*$|^http://(www\.)?no-limit(-|.).*$|^http://(www\.)?nude(-|.).*$|^http://(www\.)?nudeceleb(-|.).*$|^http://(www\.)?nutzu(-|.).*$|^http://(www\.)?odge(-|.).*$|^http://(www\.)?oiline(-|.).*$|^http://(www\.)?onlinegamingassoc(-|.).*$|^http://(www\.)?outpersonals(-|.).*$|^http://(www\.)?o-o-6-o-o.ru(-|.).*$|^http://(www\.)?o-o-8-o-o.ru(-|.).*$|^http://(www\.)?pagetwo(-|.).*$|^http://(www\.)?paris(-|.).*$|^http://(www\.)?passions(-|.).*$|^http://(www\.)?peblog(-|.).*$|^http://(www\.)?peng(-|.).*$|^http://(www\.)?perfume-cologne(-|.).*$|^http://(www\.)?personal(-|.).*$|^http://(www\.)?php-soft(-|.).*$|^http://(www\.)?pisoc(-|.).*$|^http://(www\.)?pisx(-|.).*$|^http://(www\.)?popwow(-|.).*$|^http://(www\.)?porn(-|.).*$|^http://(www\.)?prescriptions(-|.).*$|^http://(www\.)?priceg(-|.).*$|^http://(www\.)?.*(-|.)?pus*y(-|.).*$|^http://(www\.)?printdirectforless(-|.).*$|^http://(www\.)?ps2cool(-|.).*$|^http://(www\.)?psnarones(-|.).*$|^http://(www\.)?psxtreme(-|.).*$) 1; +} +## Q - Z +map $http_referer $bad_urls4 { + default 0; + ~(?i)(^http://(www\.)?quality-traffic(-|.).*$|^http://(www\.)?registrarprice(-|.).*$|^http://(www\.)?reliableresults(-|.).*$|^http://(www\.)?rimpim(-|.).*$|^http://(www\.)?ro7kalbe(-|.).*$|^http://(www\.)?rohkalby(-|.).*$|^http://(www\.)?ronnieazza(-|.).*$|^http://(www\.)?rulo.biz(-|.).*$|^http://(www\.)?responsinator(-|.).*$|^http://(www\.)?s5(-|.).*$|^http://(www\.)?samiuls(-|.).*$|^http://(www\.)?savefrom(-|.).*$|^http://(www\.)?savetubevideo.com(-|.).*$|^http://(www\.)?screentoolkit.com(-|.).*$|^http://(www\.)?searchedu(-|.).*$|^http://(www\.)?semalt.com(-|.).*$|^http://(www\.)?seoexperimenty(-|.).*$|^http://(www\.)?seventwentyfour(-|.).*$|^http://(www\.)?seventwentyfour.*$|^http://(www\.)?sex(-|.).*$|^http://(www\.)?sexsearch(-|.).*$|^http://(www\.)?sexsq(-|.).*$|^http://(www\.)?shoesdiscount(-|.).*$|^http://(www\.)?site-4u(-|.).*$|^http://(www\.)?site5(-|.).*$|^http://(www\.)?slatersdvds(-|.).*$|^http://(www\.)?slftsdybbg.ru(-|.).*$|^http://(www\.)?sml338(-|.).*$|^http://(www\.)?sms(-|.).*$|^http://(www\.)?smsportali(-|.).*$|^http://(www\.)?socialseet.ru(-|.).*$|^http://(www\.)?software(-|.).*$|^http://(www\.)?sortthemesitesby(-|.).*$|^http://(www\.)?spears(-|.).*$|^http://(www\.)?spoodles(-|.).*$|^http://(www\.)?sportsparent(-|.).*$|^http://(www\.)?srecorder(-|.).*$|^http://(www\.)?stmaryonline(-|.).*$|^http://(www\.)?superiends.org(-|.).*$|^http://(www\.)?strip(-|.).*$|^http://(www\.)?suttonjames(-|.).*$|^http://(www\.)?talk.uk-yankee(-|.).*$|^http://(www\.)?tecrep-inc(-|.).*$|^http://(www\.)?teen(-|.).*$|^http://(www\.)?terashells(-|.).*$|^http://(www\.)?thatwhichis(-|.).*$|^http://(www\.)?thorcarlson(-|.).*$|^http://(www\.)?.*(-|.)?tits(-|.).*$|^http://(www\.)?.*(-|.)?titten(-|.).*$|^http://(www\.)?tmsathai(-|.).*$|^http://(www\.)?traffixer(-|.).*$|^http://(www\.)?tranny(-|.).*$|^http://(www\.)?valeof(-|.).*$|^http://(www\.)?video(-|.).*$|^http://(www\.)?vinhas(-|.).*$|^http://(www\.)?vixen1(-|.).*$|^http://(www\.)?vpshs(-|.).*$|^http://(www\.)?vrajitor(-|.).*$|^http://(www\.)?vodkoved.ru(-|.).*$|^http://(www\.)?w3md(-|.).*$|^http://(www\.)?websocial.me(-|.).*$|^http://(www\.)?webdevsquare(-|.).*$|^http://(www\.)?whois(-|.).*$|^http://(www\.)?withdrawal(-|.).*$|^http://(www\.)?worldemail(-|.).*$|^http://(www\.)?wslp24(-|.).*$|^http://(www\.)?ws-op(-|.).*$|^http://(www\.)?xnxx(-|.).*$|^http://(www\.)?xopy(-|.).*$|^http://(www\.)?xxx(-|.).*$|^http://(www\.)?yelucie(-|.).*$|^http://(www\.)?youradulthosting(-|.).*$|^http://(www\.)?ykecwqlixx.ru(-|.).*$|^http://(www\.)?yougetsignal.com(-|.).*$|^http://(www\.)?(-|.)zindagi(-|.).*$) 1; +} +## Domains Linked to Yontoo Browser Malware and a Few Other New Ones +## Have split this into it's own section to keep lines shorter NOTE: changes to instructions +## adding if ($bad_urls5) and if ($bad_urls6) to your site(s) config. +map $http_referer $bad_urls5 { + default 0; + ~(?i)(^http://(www\.)?101raccoon.ru(-|.).*$|^http://(www\.)?28n2gl3wfyb0.ru(-|.).*$|^http://(www\.)?627ad6438b58439cad1fc8cf6d67a92e.com(-|.).*$|^http://(www\.)?6ab9743d0152486387559b4abaa02ada.com(-|.).*$|^http://(www\.)?a342ae9750004b14b55f7310eff0ab65.com(-|.).*$|^http://(www\.)?aa08daf7e13b6345e09e92f771507fa5f4.com(-|.).*$|^http://(www\.)?aa14ab57a3339c4064bd9ae6fad7495b5f.com(-|.).*$|^http://(www\.)?aa625d84f1587749c1ab011d6f269f7d64.com(-|.).*$|^http://(www\.)?aa81bf391151884adfa3dd677e41f94be1.com(-|.).*$|^http://(www\.)?aa8780bb28a1de4eb5bff33c28a218a930.com(-|.).*$|^http://(www\.)?aa8b68101d388c446389283820863176e7.com(-|.).*$|^http://(www\.)?aa9bd78f328a6a41279d0fad0a88df1901.com(-|.).*$|^http://(www\.)?aa9d046aab36af4ff182f097f840430d51.com(-|.).*$|^http://(www\.)?aaa38852e886ac4af1a3cff9b47cab6272.com(-|.).*$|^http://(www\.)?aab94f698f36684c5a852a2ef272e031bb.com(-|.).*$|^http://(www\.)?aac500b7a15b2646968f6bd8c6305869d7.com(-|.).*$|^http://(www\.)?aac52006ec82a24e08b665f4db2b5013f7.com(-|.).*$|^http://(www\.)?aad1f4acb0a373420d9b0c4202d38d94fa.com(-|.).*$|^http://(www\.)?asrv-a.akamoihd.net(-|.).*$|^http://(www\.)?asrvrep-a.akamaihd.net(-|.).*$|^http://(www\.)?bestpriceninja.com(-|.).*$|^http://(www\.)?bronzeaid-a.akamaihd.net(-|.).*$|^http://(www\.)?browsepulse-a.akamaihd.net(-|.).*$|^http://(www\.)?cashkitten-a.akamaihd.net(-|.).*$|^http://(www\.)?coolbar.pro(-|.).*$) 1; + } +map $http_referer $bad_urls6 { + default 0; + ~(?i)(^http://(www\.)?davebestdeals.com(-|.).*$|^http://(www\.)?discovertreasure-a.akamaihd.net(-|.).*$|^http://(www\.)?discovertreasurenow.com(-|.).*$|^http://(www\.)?foxydeal.com(-|.).*$|^http://(www\.)?gameonasia.com(-|.).*$|^http://(www\.)?gameplexcity.com(-|.).*$|^http://(www\.)?gamerextra.com(-|.).*$|^http://(www\.)?gamerscorps.com(-|.).*$|^http://(www\.)?gamewrath.com(-|.).*$|^http://(www\.)?generousdeal-a.akamaihd.net(-|.).*$|^http://(www\.)?girlgamerdaily.com(-|.).*$|^http://(www\.)?hdapp1008-a.akamaihd.net(-|.).*$|^http://(www\.)?highstairs-a.akamaihd.net(-|.).*$|^http://(www\.)?hotshoppymac.com(-|.).*$|^http://(www\.)?matchpal-a.akamaihd.net(-|.).*$|^http://(www\.)?mecash.ru(-|.).*$|^http://(www\.)?monarchfind-a.akamaihd.net(-|.).*$|^http://(www\.)?myshopmatemac.com(-|.).*$|^http://(www\.)?nottyu.xyz(-|.).*$|^http://(www\.)?onlinemegax.com(-|.).*$|^http://(www\.)?outrageousdeal-a.akamaihd.net(-|.).*$|^http://(www\.)?pijoto.net(-|.).*$|^http://(www\.)?recordpage-a.akamaihd.net(-|.).*$|^http://(www\.)?resultshub-a.akamaihd.net(-|.).*$|^http://(www\.)?rvzr-a.akamaihd.net(-|.).*$|^http://(www\.)?savingsslider-a.akamaihd.net(-|.).*$|^http://(www\.)?searchinterneat-a.akamaihd.net(-|.).*$|^http://(www\.)?searchwebknow-a.akamaihd.net(-|.).*$|^http://(www\.)?seeresultshub-a.akamaihd.net(-|.).*$|^http://(www\.)?shoppytoolmac.com(-|.).*$|^http://(www\.)?skytraf.xyz(-|.).*$|^http://(www\.)?splendorsearch-a.akamaihd.net(-|.).*$|^http://(www\.)?strongsignal-a.akamaihd.net(-|.).*$|^http://(www\.)?surfbuyermac.com(-|.).*$|^http://(www\.)?treasuretrack-a.akamaihd.net(-|.).*$|^http://(www\.)?webshoppermac.com(-|.).*$|^http://(www\.)?pospr.waw.pl(-|.).*$|^http://(www\.)?abclauncher.com(-|.).*$|^http://(www\.)?alert-fjg.xyz(-|.).*$|^http://(www\.)?analytics-ads.xyz(-|.).*$|^http://(www\.)?bamo.xsl.pt(-|.).*$|^http://(www\.)?compliance-olga.top(-|.).*$|^http://(www\.)?digital-video-processing.com(-|.).*$|^http://(www\.)?eu-cookie-law.info(-|.).*$|^http://(www\.)?findpik.com(-|.).*$|^http://(www\.)?forum20.smailik.org(-|.).*$|^http://(www\.)?free-share-buttons.top(-|.).*$|^http://(www\.)?free-social-buttons2.xyz(-|.).*$|^http://(www\.)?free-social-buttons3.xyz(-|.).*$|^http://(www\.)?free-social-buttons4.xyz(-|.).*$|^http://(www\.)?free-social-buttons5.xyz(-|.).*$|^http://(www\.)?front.to(-|.).*$|^http://(www\.)?infokonkurs.ru(-|.).*$|^http://(www\.)?mapquestz.us(-|.).*$|^http://(www\.)?quick-offer.com(-|.).*$|^http://(www\.)?rank-checker.online(-|.).*$|^http://(www\.)?rankchecker.online(-|.).*$|^http://(www\.)?rapidokbrain.com(-|.).*$|^http://(www\.)?real-time-analytics.com(-|.).*$|^http://(www\.)?sharebutton.net(-|.).*$|^http://(www\.)?sharebutton.org(-|.).*$|^http://(www\.)?shemale-sex.net(-|.).*$|^http://(www\.)?site-speed-check.site(-|.).*$|^http://(www\.)?site-speed-checker.site(-|.).*$|^http://(www\.)?trafficmania.com(-|.).*$|^http://(www\.)?website-speed-up.site(-|.).*$|^http://(www\.)?website-speed-up.top(-|.).*$|^http://(www\.)?xn--80aagddcgkbcqbad7amllnejg6dya.xn--p1ai(-|.).*$|^http://(www\.)?xn--80aikhbrhr.net(-|.).*$|^http://(www\.)?pila.pl(-|.).*$|^http://(www\.)?dytohqka.su(-|.).*$|^http://(www\.)?fqvjhqciw.net.ru(-|.).*$|^http://(www\.)?wycjrqzy.ua(-|.).*$|^http://(www\.)?0ca29773681c7e82.com(-|.).*$|^http://(www\.)?intervsem.ru(-|.).*$|^http://(www\.)?candy-glam-hp.com(-|.).*$|^http://(www\.)?thecoolimages.net(-|.).*$|^http://(www\.)?rebuildermedical.com(-|.).*$|^http://(www\.)?gaygalls.net(-|.).*$|^http://(www\.)?keywordteam.net(-|.).*$|^http://(www\.)?netfacet.net(-|.).*$|^http://(www\.)?pattersonsweb.com(-|.).*$|^http://(www\.)?trapit.com.gg(-|.).*$) 1; + } +## Add here all hosts that should be spared any referrer checking. +## Whitelist all your own IPs in this section, each IP followed by a 0; +geo $bad_referer { + 127.0.0.1 0; + 111.111.111.111 0; +} + +# Geo directive to deny certain ip addresses +geo $validate_client { + default 0; + + # Cyveillance + 38.100.19.8/29 1; + 38.100.21.0/24 1; + 38.100.41.64/26 1; + 38.105.71.0/25 1; + 38.105.83.0/27 1; + 38.112.21.140/30 1; + 38.118.42.32/29 1; + 65.213.208.128/27 1; + 65.222.176.96/27 1; + 65.222.185.72/29 1; +} \ No newline at end of file diff --git a/nginx/default.conf b/nginx/default.conf new file mode 100644 index 0000000..67b4255 --- /dev/null +++ b/nginx/default.conf @@ -0,0 +1,209 @@ +server_names_hash_bucket_size 64; +proxy_headers_hash_bucket_size 512; +server_names_hash_max_size 512; +large_client_header_buffers 8 64k; +proxy_read_timeout 3600; +proxy_connect_timeout 3600; + + +# include configs for spamers, bad bots to reject +include /customization/blacklist.conf; + + +# Rate limit configurations +limit_req_zone $binary_remote_addr zone=all:10m rate=20r/s; + +map $http_user_agent $limit_bots { + default ''; + ~*(google|bing|yandex|msnbot|baidu|crawler|robot) $binary_remote_addr; +} +limit_req_zone $limit_bots zone=bots:10m rate=2r/m; + +# Connect to the Arches Django app running with +# Gunicorn. Note, you need to match more than the port +# number, you need match the Docker container NAME where +# we've launched the Arches Djagno app. +upstream django { + server arches:8000; +} + +upstream mapas { + server pg_tilesrv:7800; +} + +server { + listen 80; + charset utf-8; + server_name ${DEPLOY_HOST} www.${DEPLOY_HOST}; + + location ^~ /.well-known/acme-challenge/ { + default_type "text/plain"; + autoindex on; + allow all; + root /var/www/certbot/$host; + } + + access_log /logs/nginx/access.log; + error_log /logs/nginx/error.log; + + proxy_read_timeout 3600; + + proxy_set_header X-Forwarded-Protocol $scheme; + gzip on; + gzip_disable "msie6"; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css application/json application/ld+json +application/geo+json text/xml application/xml application/xml+rss +text/javascript application/javascript text/html; + + # block the evil spammers and bad bots + if ($bad_bot) { + return 444; + } + if ($bad_referer_block) { + return 444; + } + if ($bad_urls1) { + return 403; + } + if ($bad_urls2) { + return 403; + } + if ($bad_urls3) { + return 403; + } + if ($bad_urls4) { + return 403; + } + if ($bad_urls5) { + return 403; + } + if ($bad_urls6) { + return 403; + } + + location /.nginx { + alias /var/www/html/${DEPLOY_HOST}; + } + + location / { + return 301 https://$host$request_uri; + } + +} + + +server { + listen 443 ssl; + + server_name ${DEPLOY_HOST} www.${DEPLOY_HOST}; + access_log /logs/nginx/ssl_access.log; + error_log /logs/nginx/ssl_error.log; + + proxy_set_header X-Forwarded-Protocol $scheme; + proxy_read_timeout 3600; + + ssl_certificate /etc/symb_link_ssl/fullchain.pem; + ssl_certificate_key /etc/symb_link_ssl/privkey.pem; + + include /etc/nginx/options-ssl-nginx.conf; + + ssl_dhparam /etc/nginx/sites/ssl/ssl-dhparams.pem; + + include /etc/nginx/hsts.conf; + + # Allows upload of up to a 100MB file + client_max_body_size 100M; + + gzip on; + gzip_disable "msie6"; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css application/json application/ld+json +application/geo+json text/xml application/xml application/xml+rss +text/javascript application/javascript text/html; + + # block the evil spammers and bad bots + if ($bad_bot) { + return 444; + } + if ($bad_referer_block) { + return 444; + } + if ($bad_urls1) { + return 403; + } + if ($bad_urls2) { + return 403; + } + if ($bad_urls3) { + return 403; + } + if ($bad_urls4) { + return 403; + } + if ($bad_urls5) { + return 403; + } + if ($bad_urls6) { + return 403; + } + + location /pgtileserv/ { + proxy_pass http://mapas/; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $remote_addr; + } + + location /.nginx { + autoindex on; + alias /var/www/html/${DEPLOY_HOST}; + } + + location ^~ /.well-known/acme-challenge/ { + default_type "text/plain"; + autoindex on; + allow all; + root /var/www/certbot/$host; + } + + # See the nginx docker-compose.yml where we + # provide this volume mapping to "static" + location /static/ { + # Note: No rate limit + autoindex on; + allow all; + alias /static_root/; + include /etc/nginx/mime.types; + } + + location / { + # rate limit + limit_req zone=all burst=30; + limit_req zone=bots burst=10; + try_files $uri @proxy_to_django; + } + + location @proxy_to_django { + proxy_pass http://django; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + + } + +} diff --git a/nginx/hsts.conf b/nginx/hsts.conf new file mode 100644 index 0000000..a74dca5 --- /dev/null +++ b/nginx/hsts.conf @@ -0,0 +1 @@ +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..132c573 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,29 @@ +worker_processes 1; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; +load_module "modules/ngx_http_perl_module.so"; +env ENV; +env DOMAINS; +env FRONTEND; +env DJANGO_PORT; +env CERT_PATH; +events { + worker_connections 1024; +} +http { + include mime.types; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + + sendfile on; + keepalive_timeout 65; + perl_set $ENV 'sub { return $ENV{"ENV"}; }'; + perl_set $DOMAINS 'sub { return $ENV{"DOMAINS"}; }'; + perl_set $DEPLOY_HOST 'sub { return $ENV{"DEPLOY_HOST"}; }'; + perl_set $DJANGO_PORT 'sub { return $ENV{"DJANGO_PORT"}; }'; + perl_set $CERT_PATH 'sub { return $ENV{"CERT_PATH"}; }'; + + include /etc/nginx/conf.d/*.conf; +} \ No newline at end of file diff --git a/nginx/nginx.sh b/nginx/nginx.sh new file mode 100644 index 0000000..2d84938 --- /dev/null +++ b/nginx/nginx.sh @@ -0,0 +1,106 @@ +#!/bin/sh + +set -e + +if [ -z "$DOMAINS" ]; then + echo "DOMAINS environment variable is not set" + exit 1; +fi + +use_dummy_certificate() { + # Switch sympolic links to reference the apprpriate SSL keys + mkdir -p /etc/symb_link_ssl; + + if [ -f "/etc/letsencrypt/live/$1/fullchain.pem" ]; then + echo "Nginx to use Let's Encrypt certificate for $1"; + ln -sfn "/etc/letsencrypt/live/$1/fullchain.pem" /etc/symb_link_ssl/fullchain.pem; + ln -sfn "/etc/letsencrypt/live/$1/privkey.pem" /etc/symb_link_ssl/privkey.pem; + else + echo "Nginx to use dummy (testing) SSL certificate for $1" + ln -sfn "/etc/nginx/sites/ssl/dummy/$1/fullchain.pem" /etc/symb_link_ssl/fullchain.pem; + ln -sfn "/etc/nginx/sites/ssl/dummy/$1/privkey.pem" /etc/symb_link_ssl/privkey.pem; + fi +} + +use_lets_encrypt_certificate() { + # Switch sympolic links to reference the apprpriate SSL keys + mkdir -p /etc/symb_link_ssl; + + if [ -f "/etc/letsencrypt/live/$1/fullchain.pem" ]; then + echo "Nginx to use Let's Encrypt certificate for $1"; + ln -sfn "/etc/letsencrypt/live/$1/fullchain.pem" /etc/symb_link_ssl/fullchain.pem; + ln -sfn "/etc/letsencrypt/live/$1/privkey.pem" /etc/symb_link_ssl/privkey.pem; + else + echo "Nginx to use dummy (testing) SSL certificate for $1" + ln -sfn "/etc/nginx/sites/ssl/dummy/$1/fullchain.pem" /etc/symb_link_ssl/fullchain.pem; + ln -sfn "/etc/nginx/sites/ssl/dummy/$1/privkey.pem" /etc/symb_link_ssl/privkey.pem; + fi +} + +reload_nginx() { + echo "Reloading Nginx configuration" + nginx -s reload; +} + +wait_for_lets_encrypt() { + certpath_fixed=$(echo "$CERT_PATH" | tr -d \"); + until [ -d "/etc/letsencrypt/live/$1" ]; do + echo "CERT_PATH is apparently $certpath_fixed, with contents: "; + ls $certpath_fixed; + echo "Waiting for Let's Encrypt certificates for $1"; + sleep 10s & wait ${!} + done + use_lets_encrypt_certificate "$1" + reload_nginx +} + +if [ ! -f /etc/nginx/sites/ssl/ssl-dhparams.pem ]; then + mkdir -p "/etc/nginx/sites/ssl" + openssl dhparam -out /etc/nginx/sites/ssl/ssl-dhparams.pem 2048 +fi + +domains_fixed=$(echo "$DOMAINS" | tr -d \") +for domain in $domains_fixed; do + echo "Checking configuration for $domain" + + echo "Make sure we have a cerbot directory for $domain"; + mkdir -p /var/www/certbot/$domain; + + echo "Prepping cerbot acme-challenge folder for: $domain" + mkdir -p /var/www/certbot/$domain/.well-known/acme-challenge + echo "look here for $domain cert dir (deep)!" > /var/www/certbot/$domain/.well-known/acme-challenge/hello.txt; + chmod 644 /var/www/certbot/$domain/.well-known/acme-challenge/hello.txt; + echo "look here for $domain cert dir (shallow)!" > /var/www/certbot/$domain/hello.txt; + chmod 644 /var/www/certbot/$domain/hello.txt; + + if [ ! -f "/etc/nginx/sites/$domain.conf" ]; then + echo "Skip creating Nginx configuration file /etc/nginx/sites/$domain.conf" + # sed "s/\${domain}/$domain/g" /customization/site.conf.tpl > "/etc/nginx/sites/$domain.conf" + fi + + if [ ! -f "/etc/nginx/sites/ssl/dummy/$domain/fullchain.pem" ]; then + + echo "Generating dummy ceritificate for $domain" + mkdir -p /etc/nginx/sites/ssl/dummy/$domain + printf "[dn]\nCN=${domain}\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:$domain, DNS:www.$domain\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth" > openssl.cnf + openssl req -x509 -out "/etc/nginx/sites/ssl/dummy/$domain/fullchain.pem" -keyout "/etc/nginx/sites/ssl/dummy/$domain/privkey.pem" \ + -newkey rsa:2048 -nodes -sha256 \ + -subj "/CN=${domain}" -extensions EXT -config openssl.cnf + rm -f openssl.cnf + + fi + + if [ ! -d "/etc/letsencrypt/live/$domain" ]; then + use_dummy_certificate "$domain" + wait_for_lets_encrypt "$domain" & + else + use_lets_encrypt_certificate "$domain" + fi + + echo "-----------------------------------------------"; + echo "Check out the contents of /static_root/"; + ls /static_root; + echo "-----------------------------------------------"; +done + +exec nginx -g "daemon off;" \ No newline at end of file diff --git a/nginx/options-ssl-nginx.conf b/nginx/options-ssl-nginx.conf new file mode 100644 index 0000000..825b37c --- /dev/null +++ b/nginx/options-ssl-nginx.conf @@ -0,0 +1,8 @@ +ssl_session_cache shared:le_nginx_SSL:10m; +ssl_session_timeout 1440m; +ssl_session_tickets off; + +ssl_protocols TLSv1.2 TLSv1.3; +ssl_prefer_server_ciphers off; + +ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";