diff options
286 files changed, 26460 insertions, 7663 deletions
diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000000..30d80990a6 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,37 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. +# Owners can be @users, @org/teams or emails + +core/* @reduz + +doc/* @godotengine/documentation + +drivers/gles2/* @karroffel +drivers/gles3/* @reduz + +editor/icons/* @djrm + +main/* @reduz + +misc/* @akien-mga + +modules/bullet/* @AndreaCatania +modules/enet/* @godotengine/network +modules/gnative/* @karroffel +modules/gdscript/* @reduz @vnen @bojidar-bg +modules/mbedtls/* @godotengine/network +modules/mobile_vr/* @BastiaanOlij +modules/mono/* @neikeq +modules/regex/* @LeeZH +modules/upnp/* @godotengine/network +modules/websocket/* @godotengine/network + +platform/javascript/* @eska014 +platform/uwp/* @vnen + +scene/main/* @reduz + +server/physics* @reduz @AndreaCatania +server/visual* @reduz @karroffel + +thirdparty/* @akien-mga diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 6b6ee4c509..164f07df51 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -218,11 +218,21 @@ Comment: WebP codec Copyright: 2010, Google Inc. License: BSD-3-clause +Files: ./thirdparty/libwebsockets/ +Comment: libwebsockets +Copyright: 2010-2017, Andy Green +License: LGPL-2.1+SLE (lws) + Files: ./thirdparty/mbedtls/ Comment: Mbed TLS Copyright: 2006-2015, ARM Limited License: Apache-2.0 +Files: ./thirdparty/miniupnpc/ +Comment: MiniUPnPc +Copyright: 2005-2016, Thomas Bernard +License: BSD-3-clause + Files: ./thirdparty/minizip/ Comment: MiniZip Copyright: 1998-2010, Gilles Vollant @@ -244,6 +254,12 @@ Comment: BASE64 conversion methods Copyright: Ari Edelkind License: public-domain +Files: ./thirdparty/misc/clipper.cpp + ./thirdparty/misc/clipper.hpp +Comment: Clipper +Copyright: 2010-2017, Angus Johnson +License: BSL-1.0 + Files: ./thirdparty/misc/curl_hostcheck.c ./thirdparty/misc/curl_hostcheck.h Comment: curl @@ -378,30 +394,6 @@ License: Apache-2.0 See the License for the specific language governing permissions and limitations under the License. -License: BSD-2-clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - . - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - . - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. Neither the name of the author - nor the names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - License: Bitstream Vera Fonts Copyright Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. @@ -444,6 +436,28 @@ License: Bitstream Vera Fonts Copyright authorization from the GNOME Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -472,6 +486,31 @@ License: BSD-3-clause OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +License: BSL-1.0 + Boost Software License - Version 1.0 - August 17th, 2003 + . + Permission is hereby granted, free of charge, to any person or organization + obtaining a copy of the software and accompanying documentation covered by + this license (the "Software") to use, reproduce, display, distribute, + execute, and transmit the Software, and to prepare derivative works of the + Software, and to permit third-parties to whom the Software is furnished to + do so, all subject to the following: + . + The copyright notices in the Software and this entire statement, including + the above license grant, this restriction and the following disclaimer, + must be included in all copies of the Software, in whole or in part, and + all derivative works of the Software, unless such copies or derivative + works are solely in the form of machine-executable object code generated by + a source language processor. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT + SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE + FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + License: CC-BY-3.0 Creative Commons Attribution 3.0 Unported . @@ -1022,6 +1061,562 @@ License: ISC ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +License: LGPL-2.1+SLE (lws) + Libwebsockets and included programs are provided under the terms of the GNU + Library General Public License (LGPL) 2.1, with the following exceptions: + . + 1) Any reference, whether in these modifications or in the GNU + Library General Public License 2.1, to this License, these terms, the + GNU Lesser Public License, GNU Library General Public License, LGPL, or + any similar reference shall refer to the GNU Library General Public + License 2.1 as modified by these paragraphs 1) through 4). + . + 2) Static linking of programs with the libwebsockets library does not + constitute a derivative work and does not require the author to provide + source code for the program, use the shared libwebsockets libraries, or + link their program against a user-supplied version of libwebsockets. + . + If you link the program to a modified version of libwebsockets, then the + changes to libwebsockets must be provided under the terms of the LGPL in + sections 1, 2, and 4. + . + 3) You do not have to provide a copy of the libwebsockets license with + programs that are linked to the libwebsockets library, nor do you have to + identify the libwebsockets license in your program or documentation as + required by section 6 of the LGPL. + . + However, programs must still identify their use of libwebsockets. The + following example statement can be included in user documentation to + satisfy this requirement: + . + "[program] is based in part on the work of the libwebsockets project + (https://libwebsockets.org)" + . + 4) Some sources included have their own, more liberal licenses, or options + to get original sources with the liberal terms. + . + Original liberal license retained + . + - lib/sha-1.c - 3-clause BSD license retained, link to original + - win32port/zlib - ZLIB license (see zlib.h) + . + Relicensed to libwebsocket license + . + - lib/base64-decode.c - relicensed to LGPL2.1+SLE, link to original + - lib/daemonize.c - relicensed from Public Domain to LGPL2.1+SLE, + link to original Public Domain version + . + Public Domain (CC-zero) to simplify reuse + . + - test-server/*.c + - test-server/*.h + - lwsws/* + . + ------ end of exceptions + . + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + . + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + . + [This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + . + Preamble + . + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public + Licenses are intended to guarantee your freedom to share and change + free software--to make sure the software is free for all its users. + . + This license, the Lesser General Public License, applies to some + specially designated software packages--typically libraries--of the + Free Software Foundation and other authors who decide to use it. You + can use it too, but we suggest you first think carefully about whether + this license or the ordinary General Public License is the better + strategy to use in any particular case, based on the explanations below. + . + When we speak of free software, we are referring to freedom of use, + 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 this service if you wish); that you receive source code or can get + it if you want it; that you can change the software and use pieces of + it in new free programs; and that you are informed that you can do + these things. + . + To protect your rights, we need to make restrictions that forbid + distributors to deny you these rights or to ask you to surrender these + rights. These restrictions translate to certain responsibilities for + you if you distribute copies of the library or if you modify it. + . + For example, if you distribute copies of the library, whether gratis + or for a fee, you must give the recipients all the rights that we gave + you. You must make sure that they, too, receive or can get the source + code. If you link other code with the library, you must provide + complete object files to the recipients, so that they can relink them + with the library after making changes to the library and recompiling + it. And you must show them these terms so they know their rights. + . + We protect your rights with a two-step method: (1) we copyright the + library, and (2) we offer you this license, which gives you legal + permission to copy, distribute and/or modify the library. + . + To protect each distributor, we want to make it very clear that + there is no warranty for the free library. Also, if the library is + modified by someone else and passed on, the recipients should know + that what they have is not the original version, so that the original + author's reputation will not be affected by problems that might be + introduced by others. + . + Finally, software patents pose a constant threat to the existence of + any free program. We wish to make sure that a company cannot + effectively restrict the users of a free program by obtaining a + restrictive license from a patent holder. Therefore, we insist that + any patent license obtained for a version of the library must be + consistent with the full freedom of use specified in this license. + . + Most GNU software, including some libraries, is covered by the + ordinary GNU General Public License. This license, the GNU Lesser + General Public License, applies to certain designated libraries, and + is quite different from the ordinary General Public License. We use + this license for certain libraries in order to permit linking those + libraries into non-free programs. + . + When a program is linked with a library, whether statically or using + a shared library, the combination of the two is legally speaking a + combined work, a derivative of the original library. The ordinary + General Public License therefore permits such linking only if the + entire combination fits its criteria of freedom. The Lesser General + Public License permits more lax criteria for linking other code with + the library. + . + We call this license the "Lesser" General Public License because it + does Less to protect the user's freedom than the ordinary General + Public License. It also provides other free software developers Less + of an advantage over competing non-free programs. These disadvantages + are the reason we use the ordinary General Public License for many + libraries. However, the Lesser license provides advantages in certain + special circumstances. + . + For example, on rare occasions, there may be a special need to + encourage the widest possible use of a certain library, so that it becomes + a de-facto standard. To achieve this, non-free programs must be + allowed to use the library. A more frequent case is that a free + library does the same job as widely used non-free libraries. In this + case, there is little to gain by limiting the free library to free + software only, so we use the Lesser General Public License. + . + In other cases, permission to use a particular library in non-free + programs enables a greater number of people to use a large body of + free software. For example, permission to use the GNU C Library in + non-free programs enables many more people to use the whole GNU + operating system, as well as its variant, the GNU/Linux operating + system. + . + Although the Lesser General Public License is Less protective of the + users' freedom, it does ensure that the user of a program that is + linked with the Library has the freedom and the wherewithal to run + that program using a modified version of the Library. + . + The precise terms and conditions for copying, distribution and + modification follow. Pay close attention to the difference between a + "work based on the library" and a "work that uses the library". The + former contains code derived from the library, whereas the latter must + be combined with the library in order to run. + . + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + . + 0. This License Agreement applies to any software library or other + program which contains a notice placed by the copyright holder or + other authorized party saying it may be distributed under the terms of + this Lesser General Public License (also called "this License"). + Each licensee is addressed as "you". + . + A "library" means a collection of software functions and/or data + prepared so as to be conveniently linked with application programs + (which use some of those functions and data) to form executables. + . + The "Library", below, refers to any such software library or work + which has been distributed under these terms. A "work based on the + Library" means either the Library or any derivative work under + copyright law: that is to say, a work containing the Library or a + portion of it, either verbatim or with modifications and/or translated + straightforwardly into another language. (Hereinafter, translation is + included without limitation in the term "modification".) + . + "Source code" for a work means the preferred form of the work for + making modifications to it. For a library, complete source code means + all the source code for all modules it contains, plus any associated + interface definition files, plus the scripts used to control compilation + and installation of the library. + . + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of + running a program using the Library is not restricted, and output from + such a program is covered only if its contents constitute a work based + on the Library (independent of the use of the Library in a tool for + writing it). Whether that is true depends on what the Library does + and what the program that uses the Library does. + . + 1. You may copy and distribute verbatim copies of the Library's + complete source code as you receive it, in any medium, provided that + you conspicuously and appropriately publish on each copy an + appropriate copyright notice and disclaimer of warranty; keep intact + all the notices that refer to this License and to the absence of any + warranty; and distribute a copy of this License along with the + Library. + . + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange for a + fee. + . + 2. You may modify your copy or copies of the Library or any portion + of it, thus forming a work based on the Library, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + . + a) The modified work must itself be a software library. + . + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + . + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + . + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + . + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + . + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Library, + and can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based + on the Library, the distribution of the whole must be on the terms of + this License, whose permissions for other licensees extend to the + entire whole, and thus to each and every part regardless of who wrote + it. + . + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Library. + . + In addition, mere aggregation of another work not based on the Library + with the Library (or with a work based on the Library) on a volume of + a storage or distribution medium does not bring the other work under + the scope of this License. + . + 3. You may opt to apply the terms of the ordinary GNU General Public + License instead of this License to a given copy of the Library. To do + this, you must alter all the notices that refer to this License, so + that they refer to the ordinary GNU General Public License, version 2, + instead of to this License. (If a newer version than version 2 of the + ordinary GNU General Public License has appeared, then you can specify + that version instead if you wish.) Do not make any other change in + these notices. + . + Once this change is made in a given copy, it is irreversible for + that copy, so the ordinary GNU General Public License applies to all + subsequent copies and derivative works made from that copy. + . + This option is useful when you wish to copy part of the code of + the Library into a program that is not a library. + . + 4. You may copy and distribute the Library (or a portion or + derivative of it, under Section 2) in object code or executable form + under the terms of Sections 1 and 2 above provided that you accompany + it with the complete corresponding machine-readable source code, which + must be distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange. + . + If distribution of object code is made by offering access to copy + from a designated place, then offering equivalent access to copy the + source code from the same place satisfies the requirement to + distribute the source code, even though third parties are not + compelled to copy the source along with the object code. + . + 5. A program that contains no derivative of any portion of the + Library, but is designed to work with the Library by being compiled or + linked with it, is called a "work that uses the Library". Such a + work, in isolation, is not a derivative work of the Library, and + therefore falls outside the scope of this License. + . + However, linking a "work that uses the Library" with the Library + creates an executable that is a derivative of the Library (because it + contains portions of the Library), rather than a "work that uses the + library". The executable is therefore covered by this License. + Section 6 states terms for distribution of such executables. + . + When a "work that uses the Library" uses material from a header file + that is part of the Library, the object code for the work may be a + derivative work of the Library even though the source code is not. + Whether this is true is especially significant if the work can be + linked without the Library, or if the work is itself a library. The + threshold for this to be true is not precisely defined by law. + . + If such an object file uses only numerical parameters, data + structure layouts and accessors, and small macros and small inline + functions (ten lines or less in length), then the use of the object + file is unrestricted, regardless of whether it is legally a derivative + work. (Executables containing this object code plus portions of the + Library will still fall under Section 6.) + . + Otherwise, if the work is a derivative of the Library, you may + distribute the object code for the work under the terms of Section 6. + Any executables containing that work also fall under Section 6, + whether or not they are linked directly with the Library itself. + . + 6. As an exception to the Sections above, you may also combine or + link a "work that uses the Library" with the Library to produce a + work containing portions of the Library, and distribute that work + under terms of your choice, provided that the terms permit + modification of the work for the customer's own use and reverse + engineering for debugging such modifications. + . + You must give prominent notice with each copy of the work that the + Library is used in it and that the Library and its use are covered by + this License. You must supply a copy of this License. If the work + during execution displays copyright notices, you must include the + copyright notice for the Library among them, as well as a reference + directing the user to the copy of this License. Also, you must do one + of these things: + . + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + . + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + . + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + . + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + . + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + . + For an executable, the required form of the "work that uses the + Library" must include any data and utility programs needed for + reproducing the executable from it. However, as a special exception, + the materials to be distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies + the executable. + . + It may happen that this requirement contradicts the license + restrictions of other proprietary libraries that do not normally + accompany the operating system. Such a contradiction means you cannot + use both them and the Library together in an executable that you + distribute. + . + 7. You may place library facilities that are a work based on the + Library side-by-side in a single library together with other library + facilities not covered by this License, and distribute such a combined + library, provided that the separate distribution of the work based on + the Library and of the other library facilities is otherwise + permitted, and provided that you do these two things: + . + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + . + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + . + 8. You may not copy, modify, sublicense, link with, or distribute + the Library except as expressly provided under this License. Any + attempt otherwise to copy, modify, sublicense, link with, or + distribute the Library is void, and will automatically terminate your + rights under this License. However, parties who have received copies, + or rights, from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + . + 9. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Library or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Library (or any work based on the + Library), you indicate your acceptance of this License to do so, and + all its terms and conditions for copying, distributing or modifying + the Library or works based on it. + . + 10. Each time you redistribute the Library (or any work based on the + Library), the recipient automatically receives a license from the + original licensor to copy, distribute, link with or modify the Library + subject to these terms and conditions. You may not impose any further + restrictions on the recipients' exercise of the rights granted herein. + You are not responsible for enforcing compliance by third parties with + this License. + . + 11. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + 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 + distribute so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you + may not distribute the Library at all. For example, if a patent + license would not permit royalty-free redistribution of the Library by + all those who receive copies directly or indirectly through you, then + the only way you could satisfy both it and this License would be to + refrain entirely from distribution of the Library. + . + If any portion of this section is held invalid or unenforceable under any + particular circumstance, the balance of the section is intended to apply, + and the section as a whole is intended to apply in other circumstances. + . + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is willing + to distribute software through any other system and a licensee cannot + impose that choice. + . + This section is intended to make thoroughly clear what is believed to + be a consequence of the rest of this License. + . + 12. If the distribution and/or use of the Library is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Library under this License may add + an explicit geographical distribution limitation excluding those countries, + so that distribution is permitted only in or among countries not thus + excluded. In such case, this License incorporates the limitation as if + written in the body of this License. + . + 13. The Free Software Foundation may publish revised and/or new + versions of the Lesser 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 Library + specifies a version number of this License which applies to it and + "any later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Library does not specify a + license version number, you may choose any version ever published by + the Free Software Foundation. + . + 14. If you wish to incorporate parts of the Library into other free + programs whose distribution conditions are incompatible with these, + write to the author to ask for permission. For software which is + copyrighted by the Free Software Foundation, write to the Free + Software Foundation; we sometimes make exceptions for this. Our + decision will be guided by the two goals of preserving the free status + of all derivatives of our free software and of promoting the sharing + and reuse of software generally. + . + NO WARRANTY + . + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE LIBRARY "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 + LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME + THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + . + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE LIBRARY 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 + LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF + SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + . + END OF TERMS AND CONDITIONS + . + How to Apply These Terms to Your New Libraries + . + If you develop a new library, and you want it to be of the greatest + possible use to the public, we recommend making it free software that + everyone can redistribute and change. You can do so by permitting + redistribution under these terms (or, alternatively, under the terms of the + ordinary General Public License). + . + To apply these terms, attach the following notices to the library. It is + safest to attach them to the start of each source file to most effectively + convey the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + . + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + . + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + . + This library 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 + Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + . + Also add information on how to contact you by electronic and paper mail. + . + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the library, if + necessary. Here is a sample; alter the names: + . + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + . + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + . + That's all there is to it! + License: MPL-2.0 Mozilla Public License Version 2.0 ================================== diff --git a/SConstruct b/SConstruct index 63105bfa84..97b59ac492 100644 --- a/SConstruct +++ b/SConstruct @@ -171,6 +171,7 @@ opts.Add(EnumVariable('warnings', "Set the level of warnings emitted during comp opts.Add(BoolVariable('progress', "Show a progress indicator during build", True)) opts.Add(BoolVariable('dev', "If yes, alias for verbose=yes warnings=all", False)) opts.Add(EnumVariable('macports_clang', "Build using clang from MacPorts", 'no', ('no', '5.0', 'devel'))) +opts.Add(BoolVariable('no_editor_splash', "Don't use the custom splash screen for the editor", False)) # Thirdparty libraries opts.Add(BoolVariable('builtin_bullet', "Use the builtin bullet library", True)) @@ -182,7 +183,9 @@ opts.Add(BoolVariable('builtin_libtheora', "Use the builtin libtheora library", opts.Add(BoolVariable('builtin_libvorbis', "Use the builtin libvorbis library", True)) opts.Add(BoolVariable('builtin_libvpx', "Use the builtin libvpx library", True)) opts.Add(BoolVariable('builtin_libwebp', "Use the builtin libwebp library", True)) +opts.Add(BoolVariable('builtin_libwebsockets', "Use the builtin libwebsockets library", True)) opts.Add(BoolVariable('builtin_mbedtls', "Use the builtin mbedTLS library", True)) +opts.Add(BoolVariable('builtin_miniupnpc', "Use the builtin miniupnpc library", True)) opts.Add(BoolVariable('builtin_opus', "Use the builtin opus library", True)) opts.Add(BoolVariable('builtin_pcre2', "Use the builtin pcre2 library)", True)) opts.Add(BoolVariable('builtin_recast', "Use the builtin recast library", True)) @@ -190,7 +193,6 @@ opts.Add(BoolVariable('builtin_squish', "Use the builtin squish library", True)) opts.Add(BoolVariable('builtin_thekla_atlas', "Use the builtin thekla_altas library", True)) opts.Add(BoolVariable('builtin_zlib', "Use the builtin zlib library", True)) opts.Add(BoolVariable('builtin_zstd', "Use the builtin zstd library", True)) -opts.Add(BoolVariable('no_editor_splash', "Don't use the custom splash screen for the editor", False)) # Compilation environment setup opts.Add("CXX", "C++ compiler") @@ -396,7 +398,17 @@ if selected_platform in platform_list: sys.path.append(tmppath) env.current_module = x import config - if (config.can_build(selected_platform)): + # can_build changed number of arguments between 3.0 (1) and 3.1 (2), + # so try both to preserve compatibility for 3.0 modules + can_build = False + try: + can_build = config.can_build(env, selected_platform) + except TypeError: + print("Warning: module '%s' uses a deprecated `can_build` " + "signature in its config.py file, it should be " + "`can_build(env, platform)`." % x) + can_build = config.can_build(selected_platform) + if (can_build): config.configure(env) env.module_list.append(x) try: diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 14e3804840..b7f20588f2 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -399,7 +399,7 @@ Error _OS::shell_open(String p_uri) { int _OS::execute(const String &p_path, const Vector<String> &p_arguments, bool p_blocking, Array p_output) { - OS::ProcessID pid; + OS::ProcessID pid = -2; List<String> args; for (int i = 0; i < p_arguments.size(); i++) args.push_back(p_arguments[i]); @@ -412,6 +412,7 @@ int _OS::execute(const String &p_path, const Vector<String> &p_arguments, bool p else return pid; } + Error _OS::kill(int p_pid) { return OS::get_singleton()->kill(p_pid); diff --git a/core/color_names.inc b/core/color_names.inc index b05684acc6..3ae42648d0 100644 --- a/core/color_names.inc +++ b/core/color_names.inc @@ -3,7 +3,7 @@ static Map<String, Color> _named_colors; static void _populate_named_colors() { - if(!_named_colors.empty()) return; + if (!_named_colors.empty()) return; _named_colors.insert("aliceblue", Color(0.94, 0.97, 1.00)); _named_colors.insert("antiquewhite", Color(0.98, 0.92, 0.84)); _named_colors.insert("aqua", Color(0.00, 1.00, 1.00)); diff --git a/core/error_macros.h b/core/error_macros.h index 168b2e06fe..3587e01d54 100644 --- a/core/error_macros.h +++ b/core/error_macros.h @@ -311,14 +311,14 @@ extern bool _err_error_exists; _err_error_exists = false; \ } -#define WARN_DEPRECATED \ - { \ - static bool warning_shown=false;\ - if (!warning_shown) {\ - _err_print_error(FUNCTION_STR, __FILE__, __LINE__,"This method has been deprecated and will be removed in the future", ERR_HANDLER_WARNING); \ - _err_error_exists = false; \ - warning_shown=true;\ - }\ +#define WARN_DEPRECATED \ + { \ + static bool warning_shown = false; \ + if (!warning_shown) { \ + _err_print_error(FUNCTION_STR, __FILE__, __LINE__, "This method has been deprecated and will be removed in the future", ERR_HANDLER_WARNING); \ + _err_error_exists = false; \ + warning_shown = true; \ + } \ } #endif diff --git a/core/image.cpp b/core/image.cpp index 51fbe75dec..c08b1ac39b 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -2301,6 +2301,7 @@ void Image::_bind_methods() { ClassDB::bind_method(D_METHOD("premultiply_alpha"), &Image::premultiply_alpha); ClassDB::bind_method(D_METHOD("srgb_to_linear"), &Image::srgb_to_linear); ClassDB::bind_method(D_METHOD("normalmap_to_xy"), &Image::normalmap_to_xy); + ClassDB::bind_method(D_METHOD("rgbe_to_srgb"), &Image::rgbe_to_srgb); ClassDB::bind_method(D_METHOD("bumpmap_to_normalmap", "bump_scale"), &Image::bumpmap_to_normalmap, DEFVAL(1.0)); ClassDB::bind_method(D_METHOD("blit_rect", "src", "src_rect", "dst"), &Image::blit_rect); @@ -2412,6 +2413,37 @@ void Image::normalmap_to_xy() { convert(Image::FORMAT_LA8); } +Ref<Image> Image::rgbe_to_srgb() { + + if (data.size() == 0) + return Ref<Image>(); + + ERR_FAIL_COND_V(format != FORMAT_RGBE9995, Ref<Image>()); + + Ref<Image> new_image; + new_image.instance(); + new_image->create(width, height, 0, Image::FORMAT_RGB8); + + lock(); + + new_image->lock(); + + for (int row = 0; row < height; row++) { + for (int col = 0; col < width; col++) { + new_image->set_pixel(col, row, get_pixel(col, row).to_srgb()); + } + } + + unlock(); + new_image->unlock(); + + if (has_mipmaps()) { + new_image->generate_mipmaps(); + } + + return new_image; +} + void Image::bumpmap_to_normalmap(float bump_scale) { ERR_FAIL_COND(!_can_modify(format)); convert(Image::FORMAT_RF); diff --git a/core/image.h b/core/image.h index 80a0c339dd..e38fa19ded 100644 --- a/core/image.h +++ b/core/image.h @@ -284,6 +284,7 @@ public: void premultiply_alpha(); void srgb_to_linear(); void normalmap_to_xy(); + Ref<Image> rgbe_to_srgb(); void bumpmap_to_normalmap(float bump_scale = 1.0); void blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest); diff --git a/core/io/logger.cpp b/core/io/logger.cpp index 983b829d8d..8a5d683b56 100644 --- a/core/io/logger.cpp +++ b/core/io/logger.cpp @@ -152,7 +152,10 @@ void RotatedFileLogger::rotate_file() { OS::Time time = OS::get_singleton()->get_time(); sprintf(timestamp, "-%04d-%02d-%02d-%02d-%02d-%02d", date.year, date.month, date.day, time.hour, time.min, time.sec); - String backup_name = base_path.get_basename() + timestamp + "." + base_path.get_extension(); + String backup_name = base_path.get_basename() + timestamp; + if (base_path.get_extension() != String()) { + backup_name += "." + base_path.get_extension(); + } DirAccess *da = DirAccess::open(base_path.get_base_dir()); if (da) { diff --git a/core/io/multiplayer_api.cpp b/core/io/multiplayer_api.cpp index b0f2ca754d..846c89510e 100644 --- a/core/io/multiplayer_api.cpp +++ b/core/io/multiplayer_api.cpp @@ -32,6 +32,61 @@ #include "core/io/marshalls.h" #include "scene/main/node.h" +_FORCE_INLINE_ bool _should_call_local(MultiplayerAPI::RPCMode mode, bool is_master, bool &r_skip_rpc) { + + switch (mode) { + + case MultiplayerAPI::RPC_MODE_DISABLED: { + //do nothing + } break; + case MultiplayerAPI::RPC_MODE_REMOTE: { + //do nothing also, no need to call local + } break; + case MultiplayerAPI::RPC_MODE_REMOTESYNC: + case MultiplayerAPI::RPC_MODE_MASTERSYNC: + case MultiplayerAPI::RPC_MODE_SLAVESYNC: + case MultiplayerAPI::RPC_MODE_SYNC: { + //call it, sync always results in call + return true; + } break; + case MultiplayerAPI::RPC_MODE_MASTER: { + if (is_master) + r_skip_rpc = true; //no other master so.. + return is_master; + } break; + case MultiplayerAPI::RPC_MODE_SLAVE: { + return !is_master; + } break; + } + return false; +} + +_FORCE_INLINE_ bool _can_call_mode(Node *p_node, MultiplayerAPI::RPCMode mode, int p_remote_id) { + switch (mode) { + + case MultiplayerAPI::RPC_MODE_DISABLED: { + return false; + } break; + case MultiplayerAPI::RPC_MODE_REMOTE: { + return true; + } break; + case MultiplayerAPI::RPC_MODE_REMOTESYNC: + case MultiplayerAPI::RPC_MODE_SYNC: { + return true; + } break; + case MultiplayerAPI::RPC_MODE_MASTERSYNC: + case MultiplayerAPI::RPC_MODE_MASTER: { + return p_node->is_network_master(); + } break; + case MultiplayerAPI::RPC_MODE_SLAVESYNC: + case MultiplayerAPI::RPC_MODE_SLAVE: { + return !p_node->is_network_master() && p_remote_id == p_node->get_network_master(); + } break; + } + + return false; +} + void MultiplayerAPI::poll() { if (!network_peer.is_valid() || network_peer->get_connection_status() == NetworkedMultiplayerPeer::CONNECTION_DISCONNECTED) @@ -202,11 +257,19 @@ Node *MultiplayerAPI::_process_get_node(int p_from, const uint8_t *p_packet, int } void MultiplayerAPI::_process_rpc(Node *p_node, const StringName &p_name, int p_from, const uint8_t *p_packet, int p_packet_len, int p_offset) { - if (!p_node->can_call_rpc(p_name, p_from)) - return; ERR_FAIL_COND(p_offset >= p_packet_len); + // Check that remote can call the RPC on this node + RPCMode rpc_mode = RPC_MODE_DISABLED; + const Map<StringName, RPCMode>::Element *E = p_node->get_node_rpc_mode(p_name); + if (E) { + rpc_mode = E->get(); + } else if (p_node->get_script_instance()) { + rpc_mode = p_node->get_script_instance()->get_rpc_mode(p_name); + } + ERR_FAIL_COND(!_can_call_mode(p_node, rpc_mode, p_from)); + int argc = p_packet[p_offset]; Vector<Variant> args; Vector<const Variant *> argp; @@ -238,11 +301,18 @@ void MultiplayerAPI::_process_rpc(Node *p_node, const StringName &p_name, int p_ void MultiplayerAPI::_process_rset(Node *p_node, const StringName &p_name, int p_from, const uint8_t *p_packet, int p_packet_len, int p_offset) { - if (!p_node->can_call_rset(p_name, p_from)) - return; - ERR_FAIL_COND(p_offset >= p_packet_len); + // Check that remote can call the RSET on this node + RPCMode rset_mode = RPC_MODE_DISABLED; + const Map<StringName, RPCMode>::Element *E = p_node->get_node_rset_mode(p_name); + if (E) { + rset_mode = E->get(); + } else if (p_node->get_script_instance()) { + rset_mode = p_node->get_script_instance()->get_rset_mode(p_name); + } + ERR_FAIL_COND(!_can_call_mode(p_node, rset_mode, p_from)); + Variant value; decode_variant(value, &p_packet[p_offset], p_packet_len - p_offset); @@ -522,57 +592,6 @@ void MultiplayerAPI::_server_disconnected() { emit_signal("server_disconnected"); } -bool _should_call_native(Node::RPCMode mode, bool is_master, bool &r_skip_rpc) { - - switch (mode) { - - case Node::RPC_MODE_DISABLED: { - //do nothing - } break; - case Node::RPC_MODE_REMOTE: { - //do nothing also, no need to call local - } break; - case Node::RPC_MODE_SYNC: { - //call it, sync always results in call - return true; - } break; - case Node::RPC_MODE_MASTER: { - if (is_master) - r_skip_rpc = true; //no other master so.. - return is_master; - } break; - case Node::RPC_MODE_SLAVE: { - return !is_master; - } break; - } - return false; -} - -bool _should_call_script(ScriptInstance::RPCMode mode, bool is_master, bool &r_skip_rpc) { - switch (mode) { - - case ScriptInstance::RPC_MODE_DISABLED: { - //do nothing - } break; - case ScriptInstance::RPC_MODE_REMOTE: { - //do nothing also, no need to call local - } break; - case ScriptInstance::RPC_MODE_SYNC: { - //call it, sync always results in call - return true; - } break; - case ScriptInstance::RPC_MODE_MASTER: { - if (is_master) - r_skip_rpc = true; //no other master so.. - return is_master; - } break; - case ScriptInstance::RPC_MODE_SLAVE: { - return !is_master; - } break; - } - return false; -} - void MultiplayerAPI::rpcp(Node *p_node, int p_peer_id, bool p_unreliable, const StringName &p_method, const Variant **p_arg, int p_argcount) { ERR_FAIL_COND(!p_node->is_inside_tree()); @@ -587,17 +606,17 @@ void MultiplayerAPI::rpcp(Node *p_node, int p_peer_id, bool p_unreliable, const if (p_peer_id == 0 || p_peer_id == node_id || (p_peer_id < 0 && p_peer_id != -node_id)) { //check that send mode can use local call - const Map<StringName, Node::RPCMode>::Element *E = p_node->get_node_rpc_mode(p_method); + const Map<StringName, RPCMode>::Element *E = p_node->get_node_rpc_mode(p_method); if (E) { - call_local_native = _should_call_native(E->get(), is_master, skip_rpc); + call_local_native = _should_call_local(E->get(), is_master, skip_rpc); } if (call_local_native) { // done below } else if (p_node->get_script_instance()) { //attempt with script - ScriptInstance::RPCMode rpc_mode = p_node->get_script_instance()->get_rpc_mode(p_method); - call_local_script = _should_call_script(rpc_mode, is_master, skip_rpc); + RPCMode rpc_mode = p_node->get_script_instance()->get_rpc_mode(p_method); + call_local_script = _should_call_local(rpc_mode, is_master, skip_rpc); } } @@ -643,10 +662,10 @@ void MultiplayerAPI::rsetp(Node *p_node, int p_peer_id, bool p_unreliable, const bool set_local = false; - const Map<StringName, Node::RPCMode>::Element *E = p_node->get_node_rset_mode(p_property); + const Map<StringName, RPCMode>::Element *E = p_node->get_node_rset_mode(p_property); if (E) { - set_local = _should_call_native(E->get(), is_master, skip_rset); + set_local = _should_call_local(E->get(), is_master, skip_rset); } if (set_local) { @@ -660,9 +679,9 @@ void MultiplayerAPI::rsetp(Node *p_node, int p_peer_id, bool p_unreliable, const } } else if (p_node->get_script_instance()) { //attempt with script - ScriptInstance::RPCMode rpc_mode = p_node->get_script_instance()->get_rset_mode(p_property); + RPCMode rpc_mode = p_node->get_script_instance()->get_rset_mode(p_property); - set_local = _should_call_script(rpc_mode, is_master, skip_rset); + set_local = _should_call_local(rpc_mode, is_master, skip_rset); if (set_local) { @@ -778,6 +797,15 @@ void MultiplayerAPI::_bind_methods() { ADD_SIGNAL(MethodInfo("connected_to_server")); ADD_SIGNAL(MethodInfo("connection_failed")); ADD_SIGNAL(MethodInfo("server_disconnected")); + + BIND_ENUM_CONSTANT(RPC_MODE_DISABLED); + BIND_ENUM_CONSTANT(RPC_MODE_REMOTE); + BIND_ENUM_CONSTANT(RPC_MODE_SYNC); + BIND_ENUM_CONSTANT(RPC_MODE_MASTER); + BIND_ENUM_CONSTANT(RPC_MODE_SLAVE); + BIND_ENUM_CONSTANT(RPC_MODE_REMOTESYNC); + BIND_ENUM_CONSTANT(RPC_MODE_MASTERSYNC); + BIND_ENUM_CONSTANT(RPC_MODE_SLAVESYNC); } MultiplayerAPI::MultiplayerAPI() { diff --git a/core/io/multiplayer_api.h b/core/io/multiplayer_api.h index 64f59d32d8..ef56c4c7f2 100644 --- a/core/io/multiplayer_api.h +++ b/core/io/multiplayer_api.h @@ -87,6 +87,18 @@ public: NETWORK_COMMAND_RAW, }; + enum RPCMode { + + RPC_MODE_DISABLED, // No rpc for this method, calls to this will be blocked (default) + RPC_MODE_REMOTE, // Using rpc() on it will call method / set property in all remote peers + RPC_MODE_SYNC, // Using rpc() on it will call method / set property in all remote peers and locally + RPC_MODE_MASTER, // Using rpc() on it will call method on wherever the master is, be it local or remote + RPC_MODE_SLAVE, // Using rpc() on it will call method for all slaves + RPC_MODE_REMOTESYNC, // Same as RPC_MODE_SYNC, compatibility + RPC_MODE_MASTERSYNC, // Using rpc() on it will call method / set property in the master peer and locally + RPC_MODE_SLAVESYNC, // Using rpc() on it will call method / set property in all slave peers and locally + }; + void poll(); void clear(); void set_root_node(Node *p_node); @@ -117,4 +129,6 @@ public: ~MultiplayerAPI(); }; +VARIANT_ENUM_CAST(MultiplayerAPI::RPCMode); + #endif // MULTIPLAYER_PROTOCOL_H diff --git a/core/math/matrix3.cpp b/core/math/matrix3.cpp index 8ee8ccb457..202115e2ca 100644 --- a/core/math/matrix3.cpp +++ b/core/math/matrix3.cpp @@ -828,7 +828,7 @@ void Basis::set_diagonal(const Vector3 p_diag) { } Basis Basis::slerp(const Basis &target, const real_t &t) const { - // TODO: implement this directly without using quaternions to make it more efficient +// TODO: implement this directly without using quaternions to make it more efficient #ifdef MATH_CHECKS ERR_FAIL_COND_V(is_rotation() == false, Basis()); ERR_FAIL_COND_V(target.is_rotation() == false, Basis()); diff --git a/core/object.cpp b/core/object.cpp index 239700a4ab..1d2aeb7ba5 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -1677,6 +1677,7 @@ void Object::_bind_methods() { #ifdef TOOLS_ENABLED MethodInfo miget("_get", PropertyInfo(Variant::STRING, "property")); miget.return_val.name = "Variant"; + miget.return_val.usage |= PROPERTY_USAGE_NIL_IS_VARIANT; BIND_VMETHOD(miget); MethodInfo plget("_get_property_list"); diff --git a/core/script_language.h b/core/script_language.h index b4c55cac9e..ad66fc5528 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -31,6 +31,7 @@ #ifndef SCRIPT_LANGUAGE_H #define SCRIPT_LANGUAGE_H +#include "io/multiplayer_api.h" #include "map.h" #include "pair.h" #include "resource.h" @@ -157,16 +158,8 @@ public: virtual bool is_placeholder() const { return false; } - enum RPCMode { - RPC_MODE_DISABLED, - RPC_MODE_REMOTE, - RPC_MODE_SYNC, - RPC_MODE_MASTER, - RPC_MODE_SLAVE, - }; - - virtual RPCMode get_rpc_mode(const StringName &p_method) const = 0; - virtual RPCMode get_rset_mode(const StringName &p_variable) const = 0; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const = 0; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const = 0; virtual ScriptLanguage *get_language() = 0; virtual ~ScriptInstance(); @@ -332,8 +325,8 @@ public: virtual bool is_placeholder() const { return true; } - virtual RPCMode get_rpc_mode(const StringName &p_method) const { return RPC_MODE_DISABLED; } - virtual RPCMode get_rset_mode(const StringName &p_variable) const { return RPC_MODE_DISABLED; } + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const { return MultiplayerAPI::RPC_MODE_DISABLED; } + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const { return MultiplayerAPI::RPC_MODE_DISABLED; } PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script, Object *p_owner); ~PlaceHolderScriptInstance(); diff --git a/doc/classes/File.xml b/doc/classes/File.xml index bd368e967a..78aa1b1a61 100644 --- a/doc/classes/File.xml +++ b/doc/classes/File.xml @@ -9,13 +9,13 @@ [codeblock] func save(content): var file = File.new() - file.open("user://save_game.dat", file.WRITE) + file.open("user://save_game.dat", File.WRITE) file.store_string(content) file.close() func load(): var file = File.new() - file.open("user://save_game.dat", file.READ) + file.open("user://save_game.dat", File.READ) var content = file.get_as_text() file.close() return content diff --git a/doc/classes/MultiplayerAPI.xml b/doc/classes/MultiplayerAPI.xml index 7a7036c857..8c114a55c9 100644 --- a/doc/classes/MultiplayerAPI.xml +++ b/doc/classes/MultiplayerAPI.xml @@ -60,9 +60,8 @@ <return type="void"> </return> <description> - Method used for polling the MultiplayerAPI. - You only need to worry about this if you are using [member Node.custom_multiplayer] override. - SceneTree will poll the default MultiplayerAPI for you. + Method used for polling the MultiplayerAPI. You only need to worry about this if you are using [member Node.custom_multiplayer] override or you set [member SceneTree.multiplayer_poll] to [code]false[/code]. By default [SceneTree] will poll its MultiplayerAPI for you. + NOTE: This method results in RPCs and RSETs being called, so they will be executed in the same context of this function (e.g. [code]_process[/code], [code]physics[/code], [Thread]). </description> </method> <method name="send_bytes"> @@ -136,5 +135,29 @@ </signal> </signals> <constants> + <constant name="RPC_MODE_DISABLED" value="0" enum="RPCMode"> + Used with [method Node.rpc_config] or [method Node.rset_config] to disable a method or property for all RPC calls, making it unavailable. Default for all methods. + </constant> + <constant name="RPC_MODE_REMOTE" value="1" enum="RPCMode"> + Used with [method Node.rpc_config] or [method Node.rset_config] to set a method to be called or a property to be changed only on the remote end, not locally. Analogous to the [code]remote[/code] keyword. Calls and property changes are accepted from all remote peers, no matter if they are node's master or slaves. + </constant> + <constant name="RPC_MODE_SYNC" value="2" enum="RPCMode"> + Behave like [code]RPC_MODE_REMOTE[/code] but also make the call or property change locally. Analogous to the [code]sync[/code] keyword. + </constant> + <constant name="RPC_MODE_MASTER" value="3" enum="RPCMode"> + Used with [method Node.rpc_config] or [method Node.rset_config] to set a method to be called or a property to be changed only on the network master for this node. Analogous to the [code]master[/code] keyword. Only accepts calls or property changes from the node's network slaves, see [method Node.set_network_master]. + </constant> + <constant name="RPC_MODE_SLAVE" value="4" enum="RPCMode"> + Used with [method Node.rpc_config] or [method Node.rset_config] to set a method to be called or a property to be changed only on slaves for this node. Analogous to the [code]slave[/code] keyword. Only accepts calls or property changes from the node's network master, see [method Node.set_network_master]. + </constant> + <constant name="RPC_MODE_REMOTESYNC" value="5" enum="RPCMode"> + Behave like [code]RPC_MODE_REMOTE[/code] but also make the call or property change locally. Same as [code]RPC_MODE_SYNC[/code] which is only kept for compatibility. Analogous to the [code]remotesync[/code] keyword. + </constant> + <constant name="RPC_MODE_MASTERSYNC" value="6" enum="RPCMode"> + Behave like [code]RPC_MODE_MASTER[/code] but also make the call or property change locally. Analogous to the [code]mastersync[/code] keyword. + </constant> + <constant name="RPC_MODE_SLAVESYNC" value="7" enum="RPCMode"> + Behave like [code]RPC_MODE_SLAVE[/code] but also make the call or property change locally. Analogous to the [code]slavesync[/code] keyword. + </constant> </constants> </class> diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 05ac6b1c0e..0fe576a39d 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -572,10 +572,10 @@ </return> <argument index="0" name="method" type="String"> </argument> - <argument index="1" name="mode" type="int" enum="Node.RPCMode"> + <argument index="1" name="mode" type="int" enum="MultiplayerAPI.RPCMode"> </argument> <description> - Changes the RPC mode for the given [code]method[/code] to the given [code]mode[/code]. See [enum RPCMode]. An alternative is annotating methods and properties with the corresponding keywords ([code]remote[/code], [code]sync[/code], [code]master[/code], [code]slave[/code]). By default, methods are not exposed to networking (and RPCs). Also see [method rset] and [method rset_config] for properties. + Changes the RPC mode for the given [code]method[/code] to the given [code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is annotating methods and properties with the corresponding keywords ([code]remote[/code], [code]sync[/code], [code]master[/code], [code]slave[/code]). By default, methods are not exposed to networking (and RPCs). Also see [method rset] and [method rset_config] for properties. </description> </method> <method name="rpc_id" qualifiers="vararg"> @@ -625,10 +625,10 @@ </return> <argument index="0" name="property" type="String"> </argument> - <argument index="1" name="mode" type="int" enum="Node.RPCMode"> + <argument index="1" name="mode" type="int" enum="MultiplayerAPI.RPCMode"> </argument> <description> - Changes the RPC mode for the given [code]property[/code] to the given [code]mode[/code]. See [enum RPCMode]. An alternative is annotating methods and properties with the corresponding keywords ([code]remote[/code], [code]sync[/code], [code]master[/code], [code]slave[/code]). By default, properties are not exposed to networking (and RPCs). Also see [method rpc] and [method rpc_config] for methods. + Changes the RPC mode for the given [code]property[/code] to the given [code]mode[/code]. See [enum MultiplayerAPI.RPCMode]. An alternative is annotating methods and properties with the corresponding keywords ([code]remote[/code], [code]sync[/code], [code]master[/code], [code]slave[/code]). By default, properties are not exposed to networking (and RPCs). Also see [method rpc] and [method rpc_config] for methods. </description> </method> <method name="rset_id"> @@ -860,21 +860,6 @@ <constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26"> Notification received every frame when the internal physics process flag is set (see [method set_physics_process_internal]). </constant> - <constant name="RPC_MODE_DISABLED" value="0" enum="RPCMode"> - Used with [method rpc_config] or [method rset_config] to disable a method or property for all RPC calls, making it unavailable. Default for all methods. - </constant> - <constant name="RPC_MODE_REMOTE" value="1" enum="RPCMode"> - Used with [method rpc_config] or [method rset_config] to set a method to be called or a property to be changed only on the remote end, not locally. Analogous to the [code]remote[/code] keyword. - </constant> - <constant name="RPC_MODE_SYNC" value="2" enum="RPCMode"> - Used with [method rpc_config] or [method rset_config] to set a method to be called or a property to be changed both on the remote end and locally. Analogous to the [code]sync[/code] keyword. - </constant> - <constant name="RPC_MODE_MASTER" value="3" enum="RPCMode"> - Used with [method rpc_config] or [method rset_config] to set a method to be called or a property to be changed only on the network master for this node. Analogous to the [code]master[/code] keyword. See [method set_network_master]. - </constant> - <constant name="RPC_MODE_SLAVE" value="4" enum="RPCMode"> - Used with [method rpc_config] or [method rset_config] to set a method to be called or a property to be changed only on slaves for this node. Analogous to the [code]slave[/code] keyword. See [method set_network_master]. - </constant> <constant name="PAUSE_MODE_INHERIT" value="0" enum="PauseMode"> Inherits pause mode from the node's parent. For the root node, it is equivalent to PAUSE_MODE_STOP. Default. </constant> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index e4375cfb79..9505cad868 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -94,17 +94,24 @@ <argument index="3" name="output" type="Array" default="[ ]"> </argument> <description> - Execute the file at the given path, optionally blocking until it returns. - Platform path resolution will take place. The resolved file must exist and be executable. - Returns a process id. - For example: + Execute the file at the given path with the arguments passed as an array of strings. Platform path resolution will take place. The resolved file must exist and be executable. + The arguments are used in the given order and separated by a space, so [code]OS.execute('ping', ['-c', '3', 'godotengine.org'])[/code] will resolve to [code]ping -c 3 godotengine.org[/code] in the system's shell. + This method has slightly different behaviour based on whether the [code]blocking[/code] mode is enabled. + When [code]blocking[/code] is enabled, the Godot thread will pause its execution while waiting for the process to terminate. The shell output of the process will be written to the [code]output[/code] array as a single string. When the process terminates, the Godot thread will resume execution. + When [code]blocking[/code] is disabled, the Godot thread will continue while the new process runs. It is not possible to retrieve the shell output in non-blocking mode, so [code]output[/code] will be empty. + The return value also depends on the blocking mode. When blocking, the method will return -2 (no process ID information is available in blocking mode). When non-blocking, the method returns a process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process forking (non-blocking) or opening (blocking) fails, the method will return -1. + Example of blocking mode and retrieving the shell output: [codeblock] var output = [] - var pid = OS.execute('ls', [], true, output) + OS.execute('ls', ['-l', '/tmp'], true, output) [/codeblock] - If you wish to access a shell built-in or perform a composite command, a platform specific shell can be invoked. For example: + Example of non-blocking mode, running another instance of the project and storing its process ID: [codeblock] - var pid = OS.execute('CMD.exe', ['/C', 'cd %TEMP% && dir'], true, output) + var pid = OS.execute(OS.get_executable_path(), [], false) + [/codeblock] + If you wish to access a shell built-in or perform a composite command, a platform-specific shell can be invoked. For example: + [codeblock] + OS.execute('CMD.exe', ['/C', 'cd %TEMP% && dir'], true, output) [/codeblock] </description> </method> @@ -527,7 +534,8 @@ <argument index="0" name="pid" type="int"> </argument> <description> - Kill a process ID (this method can be used to kill processes that were not spawned by the game). + Kill (terminate) the process identified by the given process ID ([code]pid[/code]), e.g. the one returned by [method execute] in non-blocking mode. + Note that this method can also be used to kill processes that were not spawned by the game. </description> </method> <method name="native_video_is_playing"> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index b2cde861c8..7c8feae5b3 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -269,6 +269,10 @@ <member name="multiplayer" type="MultiplayerAPI" setter="set_multiplayer" getter="get_multiplayer"> The default [MultiplayerAPI] instance for this SceneTree. </member> + <member name="multiplayer_poll" type="bool" setter="set_multiplayer_poll_enabled" getter="is_multiplayer_poll_enabled"> + If [code]true[/code] (default) enable the automatic polling of the [MultiplayerAPI] for this SceneTree during [signal idle_frame]. + When [code]false[/code] you need to manually call [method MultiplayerAPI.poll] for processing network packets and delivering RPCs/RSETs. This allows to run RPCs/RSETs in a different loop (e.g. physics, thread, specific time step) and for manual [Mutex] protecion when accessing the [MultiplayerAPI] from threads. + </member> <member name="network_peer" type="NetworkedMultiplayerPeer" setter="set_network_peer" getter="get_network_peer"> The peer object to handle the RPC system (effectively enabling networking when set). Depending on the peer itself, the SceneTree will become a network server (check with [method is_network_server()]) and will set root node's network mode to master (see NETWORK_MODE_* constants in [Node]), or it will become a regular peer with root node set to slave. All child nodes are set to inherit the network mode by default. Handling of networking-related events (connection, disconnection, new clients) is done by connecting to SceneTree's signals. </member> diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py index adbd810d11..289e967a93 100755 --- a/doc/tools/makerst.py +++ b/doc/tools/makerst.py @@ -155,9 +155,19 @@ def rstize_text(text, cclass): text = pre_text + "\n\n" + post_text pos += 2 + next_brac_pos = text.find('[') + + # Escape \ character, otherwise it ends up as an escape character in rst + pos = 0 + while True: + pos = text.find('\\', pos, next_brac_pos) + if pos == -1: + break + text = text[:pos] + "\\\\" + text[pos + 1:] + pos += 2 + # Escape * character to avoid interpreting it as emphasis pos = 0 - next_brac_pos = text.find('[') while True: pos = text.find('*', pos, next_brac_pos) if pos == -1: diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 6e7e1793e1..de7359a18b 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -1303,7 +1303,6 @@ Transform2D RasterizerStorageGLES2::skeleton_bone_get_transform_2d(RID p_skeleto } void RasterizerStorageGLES2::skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform) { - } void RasterizerStorageGLES2::update_dirty_skeletons() { diff --git a/drivers/unix/socket_helpers.h b/drivers/unix/socket_helpers.h index 5ef9ad3088..5b42c13eae 100644 --- a/drivers/unix/socket_helpers.h +++ b/drivers/unix/socket_helpers.h @@ -124,6 +124,13 @@ static int _socket_create(IP::Type &p_type, int type, int protocol) { WARN_PRINT("Unable to set/unset IPv4 address mapping over IPv6"); } } + if (protocol == IPPROTO_UDP && p_type != IP::TYPE_IPV6) { + // Enable broadcasting for UDP sockets if it's not IPv6 only (IPv6 has no broadcast option). + int broadcast = 1; + if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcast, sizeof(broadcast)) != 0) { + WARN_PRINT("Error when enabling broadcasting"); + } + } return sockfd; } diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 531aa2f9dc..a6f159ce34 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -1638,6 +1638,7 @@ void EditorInspector::register_text_enter(Node *p_line_edit) { void EditorInspector::_filter_changed(const String &p_text) { + _clear(); update_tree(); } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 4b068f1000..7e3af2b755 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -88,7 +88,6 @@ #include "editor/plugins/mesh_editor_plugin.h" #include "editor/plugins/mesh_instance_editor_plugin.h" #include "editor/plugins/multimesh_editor_plugin.h" -#include "editor/plugins/navigation_mesh_editor_plugin.h" #include "editor/plugins/navigation_polygon_editor_plugin.h" #include "editor/plugins/particles_2d_editor_plugin.h" #include "editor/plugins/particles_editor_plugin.h" @@ -5365,7 +5364,6 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(TextureEditorPlugin(this))); add_editor_plugin(memnew(AudioBusesEditorPlugin(audio_bus_editor))); add_editor_plugin(memnew(AudioBusesEditorPlugin(audio_bus_editor))); - add_editor_plugin(memnew(NavigationMeshEditorPlugin(this))); add_editor_plugin(memnew(SkeletonEditorPlugin(this))); add_editor_plugin(memnew(PhysicalBonePlugin(this))); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index c6d3a43f4e..c50187aa02 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1023,8 +1023,8 @@ void EditorPropertyRect2::_value_changed(double val) { Rect2 r2; r2.position.x = spin[0]->get_value(); - r2.position.x = spin[1]->get_value(); - r2.size.y = spin[2]->get_value(); + r2.position.y = spin[1]->get_value(); + r2.size.x = spin[2]->get_value(); r2.size.y = spin[3]->get_value(); emit_signal("property_changed", get_edited_property(), r2); } diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index ca5aa7039d..ad49ab86c9 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -4339,13 +4339,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(snap_button); snap_button->set_toggle_mode(true); snap_button->connect("toggled", this, "_button_toggle_snap"); - snap_button->set_tooltip(TTR("Toggles snapping")); + snap_button->set_tooltip(TTR("Toggle snapping.")); snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_snap", TTR("Use Snap"), KEY_S)); snap_config_menu = memnew(MenuButton); hb->add_child(snap_config_menu); snap_config_menu->set_h_size_flags(SIZE_SHRINK_END); - snap_config_menu->set_tooltip(TTR("Snapping options")); + snap_config_menu->set_tooltip(TTR("Snapping Options")); PopupMenu *p = snap_config_menu->get_popup(); p->connect("id_pressed", this, "_popup_callback"); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 94dcbd8e18..0946abdeab 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -1215,6 +1215,9 @@ void ScriptEditor::_notification(int p_what) { script_forward->set_icon(get_icon("Forward", "EditorIcons")); script_back->set_icon(get_icon("Back", "EditorIcons")); + members_overview_alphabeta_sort_button->set_icon(get_icon("Sort", "EditorIcons")); + filename->add_style_override("normal", editor->get_gui_base()->get_stylebox("normal", "LineEdit")); + recent_scripts->set_as_minsize(); } break; @@ -1404,16 +1407,16 @@ void ScriptEditor::_update_members_overview_visibility() { ScriptEditorBase *se = _get_current_editor(); if (!se) { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); members_overview->set_visible(false); return; } if (members_overview_enabled && se->show_members_overview()) { - members_overview_buttons_hbox->set_visible(true); + members_overview_alphabeta_sort_button->set_visible(true); members_overview->set_visible(true); } else { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); members_overview->set_visible(false); } } @@ -1440,6 +1443,11 @@ void ScriptEditor::_update_members_overview() { members_overview->add_item(functions[i].get_slice(":", 0)); members_overview->set_item_metadata(i, functions[i].get_slice(":", 1).to_int() - 1); } + + String path = se->get_edited_script()->get_path(); + bool built_in = !path.is_resource_file(); + String name = built_in ? path.get_file() : se->get_name(); + filename->set_text(name); } void ScriptEditor::_update_help_overview_visibility() { @@ -1458,8 +1466,9 @@ void ScriptEditor::_update_help_overview_visibility() { } if (help_overview_enabled) { - members_overview_buttons_hbox->set_visible(false); + members_overview_alphabeta_sort_button->set_visible(false); help_overview->set_visible(true); + filename->set_text(se->get_name()); } else { help_overview->set_visible(false); } @@ -2681,6 +2690,12 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { members_overview_buttons_hbox = memnew(HBoxContainer); members_overview_vbox->add_child(members_overview_buttons_hbox); + filename = memnew(Label); + filename->set_clip_text(true); + filename->set_h_size_flags(SIZE_EXPAND_FILL); + filename->add_style_override("normal", EditorNode::get_singleton()->get_gui_base()->get_stylebox("normal", "LineEdit")); + members_overview_buttons_hbox->add_child(filename); + members_overview_alphabeta_sort_button = memnew(ToolButton); members_overview_alphabeta_sort_button->set_tooltip(TTR("Toggle alphabetical sorting of the method list.")); members_overview_alphabeta_sort_button->set_toggle_mode(true); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index a2ff47cd99..3707f39d11 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -201,6 +201,7 @@ class ScriptEditor : public PanelContainer { ItemList *members_overview; VBoxContainer *members_overview_vbox; HBoxContainer *members_overview_buttons_hbox; + Label *filename; ToolButton *members_overview_alphabeta_sort_button; bool members_overview_enabled; ItemList *help_overview; diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 82fd727620..3e17385909 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -160,7 +160,7 @@ void ProjectSettingsEditor::_action_edited() { ti->set_text(0, old_name); add_at = "input/" + old_name; - message->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\', or '\"'.")); + message->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or '\"'.")); message->popup_centered(Size2(300, 100) * EDSCALE); return; } @@ -894,7 +894,7 @@ void ProjectSettingsEditor::_action_check(String p_action) { if (!_validate_action_name(p_action)) { - action_add_error->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'")); + action_add_error->set_text(TTR("Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or '\"'.")); action_add_error->show(); action_add->set_disabled(true); return; diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index dd79ae63d6..6fe52e3337 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -219,7 +219,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool has_groups = p_node->has_persistent_groups(); if (has_connections && has_groups) { - item->add_button(0, get_icon("SignalsAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s)\nClick to show signals dock.")); + item->add_button(0, get_icon("SignalsAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s).\nClick to show signals dock.")); } else if (has_connections) { item->add_button(0, get_icon("Signals", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connections.\nClick to show signals dock.")); } else if (has_groups) { @@ -245,18 +245,18 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (!p_node->get_script().is_null()) { - item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT, false, TTR("Open script")); + item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT, false, TTR("Open Script")); } if (p_node->is_class("CanvasItem")) { bool is_locked = p_node->has_meta("_edit_lock_"); //_edit_group_ if (is_locked) - item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock")); + item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); bool is_grouped = p_node->has_meta("_edit_group_"); if (is_grouped) - item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable")); + item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable.")); bool v = p_node->call("is_visible"); if (v) @@ -272,7 +272,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool is_locked = p_node->has_meta("_edit_lock_"); if (is_locked) - item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock")); + item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); bool v = p_node->call("is_visible"); if (v) diff --git a/editor/translations/af.po b/editor/translations/af.po index 8644e20317..c5853bbb2f 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -502,7 +502,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Koppel '%s' aan '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Koppel..." #: editor/connections_dialog.cpp @@ -928,11 +928,11 @@ msgid "Move Audio Bus" msgstr "Skuif Oudio-Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Stoor Oudio-Bus Uitleg As..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Ligging van Nuwe Uitleg..." #: editor/editor_audio_buses.cpp @@ -1071,11 +1071,11 @@ msgid "Updating Scene" msgstr "Toneel word Opgedateer" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Plaaslike veranderinge word gebêre..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Toneel word opgedateer..." #: editor/editor_data.cpp @@ -1146,7 +1146,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1416,12 +1416,12 @@ msgid "Error saving resource!" msgstr "Fout tydens storing van hulpbron!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Stoor Hulpbron As..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Ek sien..." #: editor/editor_node.cpp @@ -1626,11 +1626,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1642,7 +1642,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1694,7 +1694,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1839,7 +1839,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1851,11 +1851,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1875,15 +1875,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2128,7 +2128,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2237,7 +2237,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2388,7 +2388,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2464,7 +2464,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2481,7 +2481,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2495,7 +2495,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2632,11 +2632,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2649,16 +2649,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Dupliseer" #: editor/filesystem_dock.cpp @@ -2684,7 +2684,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2750,7 +2750,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2762,7 +2762,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2778,7 +2778,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2798,7 +2798,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3213,7 +3213,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3221,7 +3221,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3290,7 +3290,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3357,7 +3357,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3544,6 +3544,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3965,7 +3966,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4170,7 +4171,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4532,7 +4533,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4629,7 +4630,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4835,15 +4836,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5294,11 +5295,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5551,7 +5548,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5619,7 +5616,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5808,7 +5805,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5899,6 +5896,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ongeldige naam." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kon nie vouer skep nie." @@ -6087,8 +6089,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6116,7 +6118,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6300,7 +6302,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6396,11 +6398,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6571,7 +6573,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/ar.po b/editor/translations/ar.po index a57dc0f0cc..cd193c4fc4 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -3,6 +3,7 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # +# Adel <dragonhunter250@gmail.com>, 2018. # athomield <athomield@hotmail.com>, 2017. # Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017. # Jamal Alyafei <jamal.qassim@gmail.com>, 2017. @@ -13,14 +14,15 @@ # noureldin sharaf <sharaf.noureldin@yahoo.com>, 2017. # omar anwar aglan <omar.aglan91@yahoo.com>, 2017-2018. # OWs Tetra <owstetra@gmail.com>, 2017. +# Rached Noureddine <rached.noureddine@gmail.com>, 2018. # Rex_sa <asd1234567890m@gmail.com>, 2017. # Wajdi Feki <wajdi.feki@gmail.com>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-30 16:34+0000\n" -"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" +"PO-Revision-Date: 2018-05-28 18:34+0000\n" +"Last-Translator: Rached Noureddine <rached.noureddine@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -28,7 +30,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -508,7 +510,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "قطع إتصال'%s' من '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "يتصل..." #: editor/connections_dialog.cpp @@ -928,11 +930,11 @@ msgid "Move Audio Bus" msgstr "ØªØØ±ÙŠÙƒ بيوس الصوت" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Ø¥ØÙظ نسق بيوس الصوت كـ..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "المكان للنسق الجديد..." #: editor/editor_audio_buses.cpp @@ -1068,11 +1070,11 @@ msgid "Updating Scene" msgstr "ÙŠÙØØ¯Ø« المشهد" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "جاري تخزين التعديلات المØÙ„ية.." +msgid "Storing local changes..." +msgstr "جاري تخزين التعديلات المØÙ„ية..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "ÙŠÙØØ¯Ø« المشهد..." #: editor/editor_data.cpp @@ -1141,8 +1143,8 @@ msgid "Show In File Manager" msgstr "أظهر ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "مجلد جديد.." +msgid "New Folder..." +msgstr "مجلد جديد..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1403,20 +1405,20 @@ msgstr "أخلاء الخرج" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "تصدير المشروع ÙØ´Ù„, رمز الخطأ % d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "خطأ ÙÙŠ ØÙظ المورد!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "ØÙظ المورد باسم..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "أنا أري.." +msgid "I see..." +msgstr "أنا أري..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1640,11 +1642,11 @@ msgid "Open Base Scene" msgstr "ÙØªØ مشهد أساسي" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "ÙØªØ سريع للمشهد..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "ÙØªØ سريع للكود..." #: editor/editor_node.cpp @@ -1656,8 +1658,8 @@ msgid "Save changes to '%s' before closing?" msgstr "هل تريد ØÙظ التغييرات إلي'%s' قبل الإغلاق؟" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "ØÙظ المشهد كـ.." +msgid "Save Scene As..." +msgstr "ØÙظ المشهد كـ..." #: editor/editor_node.cpp msgid "No" @@ -1708,7 +1710,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "هذا Ø§Ù„ÙØ¹Ù„ لا يمكن إرجاعة. إرجاع علي أية ØØ§Ù„ØŸ" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "تشغيل مشهد بسرعة..." #: editor/editor_node.cpp @@ -1865,8 +1867,8 @@ msgid "Previous tab" msgstr "التبويب السابق" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª.." +msgid "Filter Files..." +msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1877,12 +1879,12 @@ msgid "New Scene" msgstr "مشهد جديد" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "مشهد مورث جديد.." +msgid "New Inherited Scene..." +msgstr "مشهد مورث جديد..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Ø§ÙØªØ مشهد.." +msgid "Open Scene..." +msgstr "Ø§ÙØªØ مشهد..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1901,16 +1903,16 @@ msgid "Open Recent" msgstr "ÙÙØªØ مؤخراً" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "تØÙˆÙŠÙ„ الي.." +msgid "Convert To..." +msgstr "تØÙˆÙŠÙ„ الي..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "مكتبة الميش.." +msgid "MeshLibrary..." +msgstr "مكتبة الميش..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "مجموعة البلاط.." +msgid "TileSet..." +msgstr "مجموعة البلاط..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2171,7 +2173,7 @@ msgid "Save the currently edited resource." msgstr "ØÙظ المورد الذي يتم تعديله ØØ§Ù„يا." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "ØÙظ باسم..." #: editor/editor_node.cpp @@ -2280,8 +2282,8 @@ msgid "Creating Mesh Previews" msgstr "ÙŠÙنشئ مستعرضات الميش" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "الصورة المصغرة.." +msgid "Thumbnail..." +msgstr "الصورة المصغرة..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2433,8 +2435,8 @@ msgid "(Current)" msgstr "(Ø§Ù„ØØ§Ù„ÙŠ)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "يستقبل المرايا، من ÙØ¶Ù„Ùƒ إنتظر.." +msgid "Retrieving mirrors, please wait..." +msgstr "يستقبل المرايا، من ÙØ¶Ù„Ùƒ إنتظر..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2511,8 +2513,8 @@ msgid "Error requesting url: " msgstr "خطأ ÙÙŠ طلب الرابط: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "يتصل Ø¨Ø§Ù„Ø³Ø±ÙØ±.." +msgid "Connecting to Mirror..." +msgstr "يتصل Ø¨Ø§Ù„Ø³Ø±ÙØ±..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2528,7 +2530,7 @@ msgstr "لا يمكن الØÙ„" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "جاري الإتصال..." #: editor/export_template_manager.cpp @@ -2541,7 +2543,7 @@ msgstr "متصل" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "جار الطلب..." #: editor/export_template_manager.cpp @@ -2674,12 +2676,12 @@ msgid "Collapse all" msgstr "طوي الكل" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "إعادة تسمية.." +msgid "Rename..." +msgstr "إعادة تسمية..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ØªØØ±ÙŠÙƒ إلي.." +msgid "Move To..." +msgstr "ØªØØ±ÙŠÙƒ إلي..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2690,15 +2692,15 @@ msgid "Instance" msgstr "نموذج" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "تعديل التبعيات.." +msgid "Edit Dependencies..." +msgstr "تعديل التبعيات..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "أظهر المÙلاك.." +msgid "View Owners..." +msgstr "أظهر المÙلاك..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "تكرير..." #: editor/filesystem_dock.cpp @@ -2724,10 +2726,10 @@ msgstr "نمذج المشهد(المشاهد) Ø§Ù„Ù…ØØ¯Ø¯Ø© كطÙÙ„ للعقد #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ÙŠÙØØµ Ø§Ù„Ù…Ù„ÙØ§ØªØŒ\n" -"من ÙØ¶Ù„Ùƒ إنتظر.." +"من ÙØ¶Ù„Ùƒ إنتظر..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2792,8 +2794,8 @@ msgid "Import Scene" msgstr "إستيراد مشهد" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "ØØ§Ø±ÙŠ Ø¥Ø³ØªÙŠØ±Ø§Ø¯ المشهد.." +msgid "Importing Scene..." +msgstr "ØØ§Ø±ÙŠ Ø¥Ø³ØªÙŠØ±Ø§Ø¯ المشهد..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2804,8 +2806,8 @@ msgid "Generating for Mesh: " msgstr "انشاء من اجل الميش: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "تشغيل الكود Ø§Ù„Ù…ÙØ®ØµØµ.." +msgid "Running Custom Script..." +msgstr "تشغيل الكود Ø§Ù„Ù…ÙØ®ØµØµ..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2820,8 +2822,8 @@ msgid "Error running post-import script:" msgstr "خطأ ÙÙŠ تشغيل الكود الملصق- المستورد:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "جاري الØÙظ.." +msgid "Saving..." +msgstr "جاري الØÙظ..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2840,8 +2842,8 @@ msgid "Import As:" msgstr "إستيراد كـ:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "إعداد Ù…ÙØ³Ø¨Ù‚.." +msgid "Preset..." +msgstr "إعداد Ù…ÙØ³Ø¨Ù‚..." #: editor/import_dock.cpp msgid "Reimport" @@ -3258,16 +3260,16 @@ msgid "Transition Node" msgstr "عقدة التنقل" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "إستيراد Ø§Ù„ØØ±ÙƒØ©.." +msgid "Import Animations..." +msgstr "إستيراد Ø§Ù„ØØ±ÙƒØ©..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "تعديل مصاÙÙŠ العقد" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "الÙلترة.." +msgid "Filters..." +msgstr "الÙلترة..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3334,7 +3336,7 @@ msgid "Fetching:" msgstr "يجلب:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "جاري الØÙ„..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3401,7 +3403,7 @@ msgid "Site:" msgstr "الموقع:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "الدعم..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3595,6 +3597,7 @@ msgid "Use Rotation Snap" msgstr "إستعمال كبس التدوير" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "تعديل الكبس..." @@ -3691,14 +3694,12 @@ msgid "Show Guides" msgstr "أظهر الموجهات" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "إظهار الشبكة" +msgstr "إظهار المركز" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "أظهر المساعدات" +msgstr "أظهر الشاشة" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3758,11 +3759,11 @@ msgstr "Ø¥Ø¶Ø§ÙØ© %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "ØØ³Ù†Ø§" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "لا يمكن إنشاء عقد متعددة بدون العقدة الجذر." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3991,7 +3992,7 @@ msgstr "الميش ليس لديه Ø³Ø·Ø Ù„ÙƒÙŠ ينشئ ØØ¯ÙˆØ¯ منه!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "شبكة بسيطة ليست PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4022,8 +4023,8 @@ msgid "Create Convex Collision Sibling" msgstr "إنشاء متصادم Ù…ØØ¯Ø¨ قريب" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "إنشاء شبكة الخطوط العريضة .." +msgid "Create Outline Mesh..." +msgstr "إنشاء شبكة الخطوط العريضة ..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4171,7 +4172,7 @@ msgstr "إنشاء مجال Ø§Ù„Ø¥Ø±ØªÙØ§Ø¹..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "تعليم مثلثات Ø§Ù„ØªØØ±Ùƒ.." +msgstr "تعليم مثلثات Ø§Ù„ØªØØ±Ùƒ..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4216,101 +4217,101 @@ msgstr "إنشاء Ù…ÙØ¶Ù„ع التنقل" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" -msgstr "ÙŠÙنشئ AABB" +msgstr "توليد AABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "" +msgstr "لا يمكن إنشاء سوى نقطة ÙˆØÙŠØ¯Ø© داخل ParticlesMaterial معالج المواد" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Error loading image:" -msgstr "" +msgstr "خطأ تØÙ…يل الصورة:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgid "No pixels with transparency > 128 in image..." +msgstr "لا بيكسل Ø¨Ø´ÙØ§Ùية > 128 ÙÙŠ الصورة..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "توليد Rect الرؤية" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "" +msgstr "ØÙ…Ù„ قناع الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Ø¥Ù…Ø³Ø Ù‚Ù†Ø§Ø¹ الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "" +msgstr "جسيمات" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "" +msgstr "عدد النقاط المولدة:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Generation Time (sec):" -msgstr "" +msgstr "وقت التوليد (تانية):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "" +msgstr "قناع الانبعاث" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "" +msgstr "التقط من البيكسل" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "" +msgstr "الوان الانبعاث" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "" +msgstr "العقدة لا ØªØØªÙˆÙŠ Ø¹Ù„Ù‰ هندسة." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "العقدة لا ØªØØªÙˆÙŠ Ø¹Ù„Ù‰ هندسة (الوجوه)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "معالج المواد من نوع 'ParticlesMaterial' مطلوب." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" -msgstr "" +msgstr "الوجوه لا ØªØØªÙˆÙŠ Ø¹Ù„Ù‰ منطقة!" #: editor/plugins/particles_editor_plugin.cpp msgid "No faces!" -msgstr "" +msgstr "لا وجوه!" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "ولد AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "أنشئ نقاط إنبعاث من الشبكة" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "أنشئ نقاط إنبعاث من العقدة" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "" +msgstr "أنشئ باعث" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "" +msgstr "نقاط الانبعاث:" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "" +msgstr "نقاط Ø§Ù„Ù…Ø³Ø§ØØ©" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" @@ -4318,15 +4319,15 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "" +msgstr "ØØ¬Ù…" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "" +msgstr "مصدر الانبعاث: " #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "" +msgstr "ولد رؤية AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -4338,39 +4339,39 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "" +msgstr "أزل In-Control من المنØÙ†Ù‰" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "" +msgstr "أض٠نقطة للمنØÙ†Ù‰" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "ØØ±Ùƒ النقطة داخل المنØÙ†Ù‰" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "ØØ±Ùƒ In-Control داخل المنØÙ†Ù‰" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "ØØ±Ùƒ Out-Control داخل المنØÙ†Ù‰" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "إختر النقاط" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift+Ø³ØØ¨: إختر نقاط التØÙƒÙ…" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "إظغط: أض٠نقطة" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4588,7 +4589,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4685,7 +4686,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4891,15 +4892,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5350,11 +5351,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5607,7 +5604,7 @@ msgid "Remove All" msgstr "Ù…Ø³Ø Ø§Ù„ÙƒÙ„" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5635,33 +5632,39 @@ msgid "Create From Current Editor Theme" msgstr "" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "CheckBox Radio1" -msgstr "" +msgstr "صندوق تأشير Ù¡" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "CheckBox Radio2" -msgstr "" +msgstr "صندوق تأشير٢" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Item" -msgstr "" +msgstr "عنصر" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Check Item" -msgstr "" +msgstr "اختار العنصر" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Checked Item" -msgstr "" +msgstr "عنصر مَضْبÙوط" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Radio Item" -msgstr "Ø¥Ø¶Ø§ÙØ© عنصر" +msgstr "عنصر انتقاء" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Checked Radio Item" -msgstr "" +msgstr "عنصر انتقاء مَضْبÙوط" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5672,24 +5675,26 @@ msgid "Many" msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#, fuzzy msgid "Options" -msgstr "" +msgstr "الخيارات" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "بكثير، خيارات عديدة،!" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "علامة التبويب 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "علامة التبويب 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "علامة التبويب 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" @@ -5864,7 +5869,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5954,6 +5959,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "اسم غير صالØ." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "لا يمكن إنشاء المجلد." @@ -6140,8 +6150,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6169,7 +6179,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6353,7 +6363,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6449,11 +6459,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6624,7 +6634,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -8131,8 +8141,8 @@ msgstr "" #~ msgid "Exporting for %s" #~ msgstr "التصدير كـ %s" -#~ msgid "Setting Up.." -#~ msgstr "جاري الإعداد.." +#~ msgid "Setting Up..." +#~ msgstr "جاري الإعداد..." #~ msgid "The quick brown fox jumps over the lazy dog." #~ msgstr "أبجد هوز ØØ·ÙŠ ÙƒÙ„Ù…Ù† ØµØ¹ÙØµ قرشت ثخذ ضظغ." diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 741f6ab209..9f366b3d2f 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -497,7 +497,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -907,11 +907,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1048,12 +1048,12 @@ msgid "Updating Scene" msgstr "ОбновÑване на Ñцената" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "ОбновÑване на Ñцената.." +msgid "Updating scene..." +msgstr "ОбновÑване на Ñцената..." #: editor/editor_data.cpp msgid "[empty]" @@ -1121,8 +1121,8 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Ðова папка.." +msgid "New Folder..." +msgstr "Ðова папка..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1384,12 +1384,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1594,11 +1594,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Бързо отварÑне на Ñцена.." +msgid "Quick Open Scene..." +msgstr "Бързо отварÑне на Ñцена..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1610,8 +1610,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Запазване на Ñцената като.." +msgid "Save Scene As..." +msgstr "Запазване на Ñцената като..." #: editor/editor_node.cpp msgid "No" @@ -1662,8 +1662,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Бързо пуÑкане на Ñцена.." +msgid "Quick Run Scene..." +msgstr "Бързо пуÑкане на Ñцена..." #: editor/editor_node.cpp msgid "Quit" @@ -1812,7 +1812,7 @@ msgid "Previous tab" msgstr "Предишен подпрозорец" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,12 +1824,12 @@ msgid "New Scene" msgstr "Ðова Ñцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "ОтварÑне на Ñцена.." +msgid "Open Scene..." +msgstr "ОтварÑне на Ñцена..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1848,15 +1848,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2101,7 +2101,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2211,7 +2211,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2363,7 +2363,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2420,7 +2420,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Request Failed." -msgstr "Запитване.." +msgstr "Запитване..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2443,8 +2443,8 @@ msgstr "Имаше грешка при внаÑÑнето:" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." -msgstr "Свързване.." +msgid "Connecting to Mirror..." +msgstr "Свързване..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2460,8 +2460,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Свързване.." +msgid "Connecting..." +msgstr "Свързване..." #: editor/export_template_manager.cpp #, fuzzy @@ -2475,8 +2475,8 @@ msgstr "ИзрÑзване на възелите" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запитване.." +msgid "Requesting..." +msgstr "Запитване..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2485,7 +2485,7 @@ msgstr "" #: editor/export_template_manager.cpp #, fuzzy msgid "Connection Error" -msgstr "Свързване.." +msgstr "Свързване..." #: editor/export_template_manager.cpp msgid "SSL Handshake Error" @@ -2616,11 +2616,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2633,15 +2633,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2667,7 +2667,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2690,12 +2690,12 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "ВнаÑÑне на Ñцената.." +msgstr "ВнаÑÑне на Ñцената..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "ВнаÑÑне на анимации.." +msgstr "ВнаÑÑне на анимации..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2736,8 +2736,8 @@ msgid "Import Scene" msgstr "ВнаÑÑне на Ñцена" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "ВнаÑÑне на Ñцената.." +msgid "Importing Scene..." +msgstr "ВнаÑÑне на Ñцената..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2748,7 +2748,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2764,7 +2764,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2785,7 +2785,7 @@ msgid "Import As:" msgstr "ВнаÑÑне като:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3203,15 +3203,15 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "ВнаÑÑне на анимации.." +msgid "Import Animations..." +msgstr "ВнаÑÑне на анимации..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3280,7 +3280,7 @@ msgid "Fetching:" msgstr "ИзтеглÑне:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3348,7 +3348,7 @@ msgid "Site:" msgstr "МÑÑто:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Поддръжка" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3538,6 +3538,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3960,7 +3961,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4167,7 +4168,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4529,7 +4530,7 @@ msgid "Import Theme" msgstr "ВнаÑÑне на тема" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4627,7 +4628,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4835,15 +4836,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5299,11 +5300,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5558,7 +5555,7 @@ msgid "Remove All" msgstr "ЗатварÑне на вÑичко" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5626,7 +5623,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5817,7 +5814,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5911,6 +5908,11 @@ msgstr "ВнеÑен проект" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Име:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ÐеуÑпешно Ñъздаване на папка." @@ -6104,8 +6106,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6133,7 +6135,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6317,7 +6319,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6414,11 +6416,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6592,7 +6594,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -8139,8 +8141,8 @@ msgstr "" #~ "Status: Needs Re-Import" #~ msgstr "Запазване и повторно внаÑÑне" -#~ msgid "Re-Import.." -#~ msgstr "Повторно внаÑÑне.." +#~ msgid "Re-Import..." +#~ msgstr "Повторно внаÑÑне..." #~ msgid "Font Import" #~ msgstr "ВнаÑÑне на шрифт" @@ -8229,5 +8231,5 @@ msgstr "" #~ msgid "Export all files in the project directory." #~ msgstr "ИзнаÑÑне на вÑички файлове в папката на проекта." -#~ msgid "Export.." -#~ msgstr "ИзнаÑÑне.." +#~ msgid "Export..." +#~ msgstr "ИзнаÑÑне..." diff --git a/editor/translations/bn.po b/editor/translations/bn.po index b8cd30b562..2704d509eb 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -502,8 +502,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' à¦à¦° সাথে '%s' সংযà§à¦•à§à¦¤ করà§à¦¨" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "সংযোগ.." +msgid "Connect..." +msgstr "সংযোগ..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -927,12 +927,12 @@ msgid "Move Audio Bus" msgstr "অডিও বাস মà§à¦ করà§à¦¨" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "অডিও বাস লেআউট সেঠকরà§à¦¨.." +msgid "Save Audio Bus Layout As..." +msgstr "অডিও বাস লেআউট সেঠকরà§à¦¨..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "নতà§à¦¨ লেআউট লোকেশন.." +msgid "Location for New Layout..." +msgstr "নতà§à¦¨ লেআউট লোকেশন..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1073,12 +1073,12 @@ msgid "Updating Scene" msgstr "দৃশà§à¦¯ হাল নাগাদ হচà§à¦›à§‡" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ পরিবরà§à¦¤à¦¨-সমূহ সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." +msgid "Storing local changes..." +msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ পরিবরà§à¦¤à¦¨-সমূহ সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "দৃশà§à¦¯ হাল নাগাদ হচà§à¦›à§‡.." +msgid "Updating scene..." +msgstr "দৃশà§à¦¯ হাল নাগাদ হচà§à¦›à§‡..." #: editor/editor_data.cpp #, fuzzy @@ -1151,7 +1151,7 @@ msgstr "ফাইল-মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦°à§‡ দেখà§à¦¨" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/editor_file_dialog.cpp @@ -1437,13 +1437,13 @@ msgid "Error saving resource!" msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "রিসোরà§à¦¸ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." +msgid "Save Resource As..." +msgstr "রিসোরà§à¦¸ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "বà§à¦à¦²à¦¾à¦®.." +msgid "I see..." +msgstr "বà§à¦à¦²à¦¾à¦®..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1680,12 +1680,12 @@ msgid "Open Base Scene" msgstr "গোড়ার দৃশà§à¦¯ খà§à¦²à§à¦¨" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "দà§à¦°à§à¦¤ দৃশà§à¦¯ খà§à¦²à§à¦¨.." +msgid "Quick Open Scene..." +msgstr "দà§à¦°à§à¦¤ দৃশà§à¦¯ খà§à¦²à§à¦¨..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "দà§à¦°à§à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ খà§à¦²à§à¦¨.." +msgid "Quick Open Script..." +msgstr "দà§à¦°à§à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ খà§à¦²à§à¦¨..." #: editor/editor_node.cpp #, fuzzy @@ -1697,8 +1697,8 @@ msgid "Save changes to '%s' before closing?" msgstr "'%s' বনà§à¦§ করার পূরà§à¦¬à§‡ পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ সংরকà§à¦·à¦£ করবেন?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "দৃশà§à¦¯ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." +msgid "Save Scene As..." +msgstr "দৃশà§à¦¯ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/editor_node.cpp #, fuzzy @@ -1752,8 +1752,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "à¦à¦‡ কাজটি অসমà§à¦ªà¦¾à¦¦à¦¿à¦¤ করা সমà§à¦à¦¬ হবে না। তবà§à¦“ পà§à¦°à¦¤à§à¦¯à¦¾à¦¬à¦°à§à¦¤à¦¨ করবেন?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "দà§à¦°à§à¦¤ দৃশà§à¦¯ চালান.." +msgid "Quick Run Scene..." +msgstr "দà§à¦°à§à¦¤ দৃশà§à¦¯ চালান..." #: editor/editor_node.cpp msgid "Quit" @@ -1915,8 +1915,8 @@ msgstr "পূরà§à¦¬à§‡à¦° টà§à¦¯à¦¾à¦¬" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "দà§à¦°à§à¦¤ ফাইলসমূহ ফিলà§à¦Ÿà¦¾à¦° করà§à¦¨.." +msgid "Filter Files..." +msgstr "দà§à¦°à§à¦¤ ফাইলসমূহ ফিলà§à¦Ÿà¦¾à¦° করà§à¦¨..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1927,12 +1927,12 @@ msgid "New Scene" msgstr "নতà§à¦¨ দৃশà§à¦¯" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "নতà§à¦¨ উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারী দৃশà§à¦¯.." +msgid "New Inherited Scene..." +msgstr "নতà§à¦¨ উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারী দৃশà§à¦¯..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "দৃশà§à¦¯ খà§à¦²à§à¦¨.." +msgid "Open Scene..." +msgstr "দৃশà§à¦¯ খà§à¦²à§à¦¨..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1951,16 +1951,16 @@ msgid "Open Recent" msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦•সমূহ খà§à¦²à§à¦¨" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.." +msgid "Convert To..." +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿).." +msgid "MeshLibrary..." +msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿)..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet (টাইল-সেট).." +msgid "TileSet..." +msgstr "TileSet (টাইল-সেট)..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2228,8 +2228,8 @@ msgid "Save the currently edited resource." msgstr "à¦à¦‡-মà§à¦¹à§‚রà§à¦¤à§‡ সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ রিসোরà§à¦¸à¦Ÿà¦¿ সংরকà§à¦·à¦£ করà§à¦¨à¥¤" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." +msgid "Save As..." +msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2300,7 +2300,7 @@ msgstr "à¦à¦•টি সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ খà§à¦²à§à¦¨ à¦à¦¬à¦‚ চঠ#: editor/editor_node.cpp #, fuzzy msgid "New Inherited" -msgstr "নতà§à¦¨ উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারী দৃশà§à¦¯.." +msgstr "নতà§à¦¨ উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারী দৃশà§à¦¯..." #: editor/editor_node.cpp msgid "Load Errors" @@ -2346,8 +2346,8 @@ msgid "Creating Mesh Previews" msgstr "মেস লাইবà§à¦°à§‡à¦°à¦¿ তৈরি হচà§à¦›à§‡" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦².." +msgid "Thumbnail..." +msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦²..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2507,8 +2507,8 @@ msgid "(Current)" msgstr "বরà§à¦¤à¦®à¦¾à¦¨:" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "মিরর রিটà§à¦°à¦¾à¦‡à¦ করা হচà§à¦›à§‡, দযা করে অপেকà§à¦·à¦¾ করà§à¦¨.." +msgid "Retrieving mirrors, please wait..." +msgstr "মিরর রিটà§à¦°à¦¾à¦‡à¦ করা হচà§à¦›à§‡, দযা করে অপেকà§à¦·à¦¾ করà§à¦¨..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2557,7 +2557,7 @@ msgstr "সমসà§à¦¯à¦¾ সমাধানে বà§à¦¯à¦°à§à¦¥à¥¤" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Can't connect." -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2592,8 +2592,8 @@ msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ সংরকà§à¦·à #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." -msgstr "সংযোগ.." +msgid "Connecting to Mirror..." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2603,7 +2603,7 @@ msgstr "সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨" #: editor/export_template_manager.cpp #, fuzzy msgid "Resolving" -msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." +msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..." #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2612,13 +2612,13 @@ msgstr "কাংখিত সমাধানে বà§à¦¯à¦°à§à¦¥" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." -msgstr "সংযোগ.." +msgid "Connecting..." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy msgid "Can't Connect" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2628,7 +2628,7 @@ msgstr "সংযোগ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Requesting.." +msgid "Requesting..." msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" #: editor/export_template_manager.cpp @@ -2639,7 +2639,7 @@ msgstr "নীচে" #: editor/export_template_manager.cpp #, fuzzy msgid "Connection Error" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/export_template_manager.cpp #, fuzzy @@ -2747,7 +2747,7 @@ msgstr "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ নামে অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ অ #: editor/filesystem_dock.cpp #, fuzzy msgid "No name provided." -msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨ অথবা সরান.." +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨ অথবা সরান..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2790,12 +2790,12 @@ msgstr "কলাপà§à¦¸ করà§à¦¨" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." +msgid "Rename..." msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "à¦à¦–ানে সরান.." +msgid "Move To..." +msgstr "à¦à¦–ানে সরান..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2807,16 +2807,16 @@ msgid "Instance" msgstr "ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "নিরà§à¦à¦°à¦¤à¦¾à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨.." +msgid "Edit Dependencies..." +msgstr "নিরà§à¦à¦°à¦¤à¦¾à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীদের দেখà§à¦¨.." +msgid "View Owners..." +msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীদের দেখà§à¦¨..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট" #: editor/filesystem_dock.cpp @@ -2842,10 +2842,10 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ দৃশà§à¦¯(সমূহ)-কে নিà #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡,\n" -"অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• অপেকà§à¦·à¦¾ করà§à¦¨.." +"অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• অপেকà§à¦·à¦¾ করà§à¦¨..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2867,12 +2867,12 @@ msgstr "গà§à¦°à§à¦ª/দল হতে অপসারণ করà§à¦¨" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡.." +msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨.." +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -2913,8 +2913,8 @@ msgid "Import Scene" msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡.." +msgid "Importing Scene..." +msgstr "দৃশà§à¦¯ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হচà§à¦›à§‡..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2927,8 +2927,8 @@ msgid "Generating for Mesh: " msgstr "AABB উৎপনà§à¦¨ করà§à¦¨" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ চালানো হচà§à¦›à§‡.." +msgid "Running Custom Script..." +msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ চালানো হচà§à¦›à§‡..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2943,8 +2943,8 @@ msgid "Error running post-import script:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ-পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ চালানোয় সমসà§à¦¯à¦¾ হয়েছে:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." +msgid "Saving..." +msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2965,8 +2965,8 @@ msgid "Import As:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ.." +msgid "Preset..." +msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ..." #: editor/import_dock.cpp #, fuzzy @@ -3392,16 +3392,16 @@ msgid "Transition Node" msgstr "টà§à¦°à§à¦¯à¦¾à¦¨à¦œà¦¿à¦¶à¦¨ নোড" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨.." +msgid "Import Animations..." +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "নোড ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ.." +msgid "Filters..." +msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3474,8 +3474,8 @@ msgstr "খà§à¦à¦œà§‡ আনার চেসà§à¦Ÿà¦¾ চলছে:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Resolving.." -msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.." +msgid "Resolving..." +msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3543,8 +3543,8 @@ msgid "Site:" msgstr "ওয়েবসাইট:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "সমরà§à¦¥à¦¨.." +msgid "Support..." +msgstr "সমরà§à¦¥à¦¨..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3743,9 +3743,10 @@ msgid "Use Rotation Snap" msgstr "ঘূরà§à¦£à¦¨ সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Configure Snap..." -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨.." +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -4189,8 +4190,8 @@ msgid "Create Convex Collision Sibling" msgstr "কনà¦à§‡à¦•à§à¦¸ কলিশ়ন সহোদর তৈরি করà§à¦¨" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া মেস তৈরি করà§à¦¨.." +msgid "Create Outline Mesh..." +msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া মেস তৈরি করà§à¦¨..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4334,7 +4335,7 @@ msgstr "কনফিগারেশন তৈরি করা হচà§à¦›à§‡... #: editor/plugins/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "গà§à¦°à¦¿à¦¡ সাইজ হিসাব করা হচà§à¦›à§‡.." +msgstr "গà§à¦°à¦¿à¦¡ সাইজ হিসাব করা হচà§à¦›à§‡..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4344,7 +4345,7 @@ msgstr "লাইটের ওকটà§à¦°à§€ (octree) তৈরি করা ঠ#: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ.." +msgstr "অনà§à¦¬à¦¾à¦¦-সমà§à¦à¦¬ শবà§à¦¦à¦®à¦¾à¦²à¦¾/বাকà§à¦¯-সমূহ..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4367,7 +4368,7 @@ msgstr "ওকটà§à¦°à§€ (octree) গঠনবিনà§à¦¯à¦¾à¦¸ তৈরি #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া মেস তৈরি করà§à¦¨.." +msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–া মেস তৈরি করà§à¦¨..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4406,8 +4407,8 @@ msgid "Error loading image:" msgstr "ছবি লোডে সমসà§à¦¯à¦¾ হয়েছে:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "সà§à¦¬à¦šà§à¦›à¦¤à¦¾à¦¸à¦¹ কোনো পিকà§à¦¸à§‡à¦² নেই > ছবিতে ১২৮.." +msgid "No pixels with transparency > 128 in image..." +msgstr "সà§à¦¬à¦šà§à¦›à¦¤à¦¾à¦¸à¦¹ কোনো পিকà§à¦¸à§‡à¦² নেই > ছবিতে ১২৮..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4790,8 +4791,8 @@ msgid "Import Theme" msgstr "থিম ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "থিম à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." +msgid "Save Theme As..." +msgstr "থিম à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4891,8 +4892,8 @@ msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ অদলবদল/ঠ#: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "খà§à¦à¦œà§à¦¨.." +msgid "Find..." +msgstr "খà§à¦à¦œà§à¦¨..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5095,28 +5096,28 @@ msgstr "পূরà§à¦¬à§‡à¦° বিরতিবিনà§à¦¦à§à¦¤à§‡ যান" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Uppercase" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.." +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Lowercase" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.." +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "পূরà§à¦¬à§‡ খà§à¦à¦œà§à¦¨" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨.." +msgid "Replace..." +msgstr "পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "ফাংশনে যান.." +msgid "Goto Function..." +msgstr "ফাংশনে যান..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "লাইনে যান.." +msgid "Goto Line..." +msgstr "লাইনে যান..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5590,12 +5591,8 @@ msgid "Transform" msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°à§‡à¦° à¦à¦° সংলাপ.." +msgid "Transform Dialog..." +msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦°à§‡à¦° à¦à¦° সংলাপ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5854,8 +5851,8 @@ msgid "Remove All" msgstr "অপসারণ করà§à¦¨" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "থিম à¦à¦¡à¦¿à¦Ÿ করà§à¦¨.." +msgid "Edit theme..." +msgstr "থিম à¦à¦¡à¦¿à¦Ÿ করà§à¦¨..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5925,7 +5922,8 @@ msgid "Options" msgstr "সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "আছে,অনেক,à¦à¦•াধিক,সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ!" #: editor/plugins/theme_editor_plugin.cpp @@ -6055,7 +6053,7 @@ msgstr "দৃশà§à¦¯ হতে à¦à¦•তà§à¦°à¦¿à¦¤ করবেন?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet (টাইল-সেট).." +msgstr "TileSet (টাইল-সেট)..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6123,11 +6121,11 @@ msgstr "" #: editor/project_export.cpp #, fuzzy msgid "Presets" -msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ.." +msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ..." #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "সংযোগ.." +msgid "Add..." +msgstr "সংযোগ..." #: editor/project_export.cpp msgid "Resources" @@ -6236,6 +6234,11 @@ msgstr "পà§à¦°à¦•লà§à¦ª ইমà§à¦ªà§‹à¦°à§à¦Ÿ করা হয়েছে #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° নাম:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" @@ -6332,7 +6335,7 @@ msgstr "নামহীন পà§à¦°à¦•লà§à¦ª" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -6418,7 +6421,7 @@ msgstr "পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦ (সেঃ):" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "সংযোগ.." +msgstr "সংযোগ..." #: editor/project_manager.cpp msgid "" @@ -6444,8 +6447,8 @@ msgstr "মাউসের বোতাম" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6473,8 +6476,8 @@ msgid "Control+" msgstr "কনà§à¦Ÿà§à¦°à§‹à¦²+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "যেকোনো কী/চাবি চাপà§à¦¨.." +msgid "Press a Key..." +msgstr "যেকোনো কী/চাবি চাপà§à¦¨..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6667,8 +6670,8 @@ msgid "Property:" msgstr "পà§à¦°à¦ªà¦¾à¦°à§à¦Ÿà¦¿:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "ওà¦à¦¾à¦°à¦°à¦¾à¦‡à¦¡.." +msgid "Override For..." +msgstr "ওà¦à¦¾à¦°à¦°à¦¾à¦‡à¦¡..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6768,12 +6771,12 @@ msgid "Easing Out-In" msgstr "গমন-আগমন সহজ/আলগা করন" #: editor/property_editor.cpp -msgid "File.." -msgstr "ফাইল.." +msgid "File..." +msgstr "ফাইল..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "পথ.." +msgid "Dir..." +msgstr "পথ..." #: editor/property_editor.cpp msgid "Assign" @@ -6805,7 +6808,7 @@ msgstr "ফাইলসিসà§à¦Ÿà§‡à¦®" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨.." +msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6953,8 +6956,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করা দৃশà§à¦¯à§‡ à¦à¦Ÿà¦¿ করা সমà§à¦à¦¬ হবে না।" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "নতà§à¦¨ দৃশà§à¦¯ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨.." +msgid "Save New Scene As..." +msgstr "নতà§à¦¨ দৃশà§à¦¯ à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7497,12 +7500,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨.." +msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿).." +msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿)..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7516,7 +7519,7 @@ msgstr "জিডিনà§à¦¯à¦¾à¦Ÿà¦¿à¦" #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿).." +msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿)..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -8717,8 +8720,8 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" #~ msgid "Exporting for %s" #~ msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" -#~ msgid "Setting Up.." -#~ msgstr "সà§à¦¥à¦¾à¦ªà¦¿à¦¤/বিনà§à¦¯à¦¸à§à¦¤ হচà§à¦›à§‡.." +#~ msgid "Setting Up..." +#~ msgstr "সà§à¦¥à¦¾à¦ªà¦¿à¦¤/বিনà§à¦¯à¦¸à§à¦¤ হচà§à¦›à§‡..." #~ msgid "Error loading scene." #~ msgstr "দৃশà§à¦¯ লোডে সমসà§à¦¯à¦¾ হয়েছে।" @@ -8772,8 +8775,8 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" #~ msgid "Info" #~ msgstr "তথà§à¦¯" -#~ msgid "Re-Import.." -#~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ.." +#~ msgid "Re-Import..." +#~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ..." #~ msgid "No bit masks to import!" #~ msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ করার জনà§à¦¯ কোনো বিট মাসà§à¦• নেই!" @@ -9170,14 +9173,14 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" #~ msgid "Zoom (%):" #~ msgstr "জà§à¦®à§ (%):" -#~ msgid "Skeleton.." -#~ msgstr "সà§à¦•েলেটন/কাঠাম.." +#~ msgid "Skeleton..." +#~ msgstr "সà§à¦•েলেটন/কাঠাম..." #~ msgid "Zoom Reset" #~ msgstr "জà§à¦®à§ পà§à¦¨:সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" -#~ msgid "Zoom Set.." -#~ msgstr "জà§à¦®à§ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨.." +#~ msgid "Zoom Set..." +#~ msgstr "জà§à¦®à§ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨..." #~ msgid "Set a Value" #~ msgstr "à¦à¦•টি মান নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨" @@ -9642,8 +9645,8 @@ msgstr "ফনà§à¦Ÿà§‡à¦° আকার অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯à¥¤" #~ msgid "Export Project PCK" #~ msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° PCK à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" -#~ msgid "Export.." -#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ.." +#~ msgid "Export..." +#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ..." #~ msgid "Project Export" #~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ পà§à¦°à¦•লà§à¦ª" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index a1f92b5316..08d842a3c3 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -4,20 +4,21 @@ # This file is distributed under the same license as the Godot source code. # # BennyBeat <bennybeat@gmail.com>, 2017. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-03-10 03:34+0000\n" -"Last-Translator: Roger Blanco Ribera <roger.blancoribera@gmail.com>\n" +"PO-Revision-Date: 2018-05-17 23:48+0000\n" +"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" "Language: ca\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.20-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -498,8 +499,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconnecta '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Connecta.." +msgid "Connect..." +msgstr "Connecta..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -919,11 +920,11 @@ msgid "Move Audio Bus" msgstr "Mou el Bus d'Àudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Anomena i Desa el Disseny del Bus d'Àudio..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Ubicació del Nou Disseny..." #: editor/editor_audio_buses.cpp @@ -1065,12 +1066,12 @@ msgid "Updating Scene" msgstr "Actualitzant l'Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Emmagatzemant canvis locals..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "S'està actualitzant l'escena.." +msgid "Updating scene..." +msgstr "S'està actualitzant l'escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1138,8 +1139,8 @@ msgid "Show In File Manager" msgstr "Mostra en el Gestor de Fitxers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nou Directori.." +msgid "New Folder..." +msgstr "Nou Directori..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1400,19 +1401,19 @@ msgstr "Buida la Sortida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "L'exportació del projecte ha fallat amb el codi d'error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error en desar recurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Anomena i Desa el Recurs..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Vaja..." #: editor/editor_node.cpp @@ -1642,11 +1643,11 @@ msgid "Open Base Scene" msgstr "Obre una Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Obertura Rà pida d'Escenes..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Obertura Rà pida d'Scripts..." #: editor/editor_node.cpp @@ -1658,7 +1659,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Desar els canvis a '%s' abans de tancar?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Anomena i Desa l'Escena..." #: editor/editor_node.cpp @@ -1711,7 +1712,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Aquesta acció no es pot desfer. N'esteu segur?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Execució Rà pida de l'Escena..." #: editor/editor_node.cpp @@ -1872,7 +1873,7 @@ msgid "Previous tab" msgstr "Pestanya Anterior" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrat de Fitxers..." #: editor/editor_node.cpp @@ -1884,11 +1885,11 @@ msgid "New Scene" msgstr "Nova Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nova Escena heretada..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Obre Escena..." #: editor/editor_node.cpp @@ -1908,15 +1909,15 @@ msgid "Open Recent" msgstr "Obre Recent" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converteix a..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "Biblioteca de Models (MeshLibrary)..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2181,7 +2182,7 @@ msgid "Save the currently edited resource." msgstr "Desa el recurs editat ara." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Anomena i Desa..." #: editor/editor_node.cpp @@ -2290,8 +2291,8 @@ msgid "Creating Mesh Previews" msgstr "Creant Previsualitzacions de Malles" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2443,7 +2444,7 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "S'estan buscant rèpliques..." #: editor/export_template_manager.cpp @@ -2490,7 +2491,7 @@ msgstr "No es pot resoldre." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "No es pot connectar.." +msgstr "No es pot connectar..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2521,7 +2522,7 @@ msgid "Error requesting url: " msgstr "Error en la sol·licitud de l'url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Connexió amb la Rèplica..." #: editor/export_template_manager.cpp @@ -2538,7 +2539,7 @@ msgstr "No es pot resoldre" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "Connexió en marxa..." #: editor/export_template_manager.cpp @@ -2551,7 +2552,7 @@ msgstr "Connectat" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Sol·licitud en marxa..." #: editor/export_template_manager.cpp @@ -2685,11 +2686,11 @@ msgid "Collapse all" msgstr "Col·lapsar tot" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Reanomena.." +msgid "Rename..." +msgstr "Reanomena..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Mou cap a..." #: editor/filesystem_dock.cpp @@ -2701,16 +2702,16 @@ msgid "Instance" msgstr "Instà ncia" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Edita Dependències..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Mostra Propietaris..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplica.." +msgid "Duplicate..." +msgstr "Duplica..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2735,7 +2736,7 @@ msgstr "Instancia les escenes seleccionades com a filles del node seleccionat." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "Analitzant Fitxers..." #: editor/filesystem_dock.cpp @@ -2801,7 +2802,7 @@ msgid "Import Scene" msgstr "Importa Escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Important Escena..." #: editor/import/resource_importer_scene.cpp @@ -2813,7 +2814,7 @@ msgid "Generating for Mesh: " msgstr "S'està generant per a la Malla: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Executant Script Personalitzat..." #: editor/import/resource_importer_scene.cpp @@ -2829,7 +2830,7 @@ msgid "Error running post-import script:" msgstr "Error en l'execució de l'Script de post-importació:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Desant..." #: editor/import_dock.cpp @@ -2849,8 +2850,8 @@ msgid "Import As:" msgstr "Importar com a:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Configuració.." +msgid "Preset..." +msgstr "Configuració..." #: editor/import_dock.cpp msgid "Reimport" @@ -3268,7 +3269,7 @@ msgid "Transition Node" msgstr "Node de Transició" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importa animacions..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3276,7 +3277,7 @@ msgid "Edit Node Filters" msgstr "Edita els filtres de Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtres..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3344,8 +3345,8 @@ msgid "Fetching:" msgstr "Recollida:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "s'està resolent.." +msgid "Resolving..." +msgstr "s'està resolent..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3411,7 +3412,7 @@ msgid "Site:" msgstr "Lloc:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Suport..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3610,6 +3611,7 @@ msgid "Use Rotation Snap" msgstr "Rotació alineada" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configura l'Alineament..." @@ -3706,14 +3708,12 @@ msgid "Show Guides" msgstr "Mostra les guies" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "Mostra l'Origen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Vista" +msgstr "Mostra el Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4006,7 +4006,7 @@ msgstr "La Malla manca d'una superfÃcie on delinear-hi els contorns!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "El tipus primitiu de Mesh no és PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4037,7 +4037,7 @@ msgid "Create Convex Collision Sibling" msgstr "Crea col·lisions convexes entre nodes germans" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Crea una malla de contorn..." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4242,7 +4242,7 @@ msgid "Error loading image:" msgstr "Error en carregar la imatge:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Cap pÃxel amb transparència > 128 en la imatge..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4603,7 +4603,7 @@ msgid "Import Theme" msgstr "Importa un Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Desa el Tema com a..." #: editor/plugins/script_editor_plugin.cpp @@ -4700,7 +4700,7 @@ msgstr "Panell d'Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Cerca..." #: editor/plugins/script_editor_plugin.cpp @@ -4910,15 +4910,15 @@ msgid "Find Previous" msgstr "Cerca l'Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substitueix..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Vés a la Funció.." +msgid "Goto Function..." +msgstr "Vés a la Funció..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Vés a la LÃnia..." #: editor/plugins/script_text_editor.cpp @@ -5372,11 +5372,7 @@ msgid "Transform" msgstr "Transforma" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configura l'Alineament..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Dià leg de Transformació..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5629,7 +5625,7 @@ msgid "Remove All" msgstr "Treu-los tots" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Edita el Tema..." #: editor/plugins/theme_editor_plugin.cpp @@ -5677,14 +5673,12 @@ msgid "Checked Item" msgstr "Element validat" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Afegeix un Element" +msgstr "Element de rà dio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Element validat" +msgstr "Element de rà dio validat" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5699,7 +5693,8 @@ msgid "Options" msgstr "Opcions" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Tens,Moltes,Diverses,Opcions!" #: editor/plugins/theme_editor_plugin.cpp @@ -5892,7 +5887,7 @@ msgid "Presets" msgstr "Configuracions prestablertes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Afegeix..." #: editor/project_export.cpp @@ -5986,6 +5981,11 @@ msgid "Imported Project" msgstr "Project importat" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nom del Projecte:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "No s'ha pogut crear el directori." @@ -6184,10 +6184,13 @@ msgid "Mouse Button" msgstr "Botó del ratolÃ" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nom d'acció no và lid. no pot estar buit ni contenir '/', ':', '=', '\\' o " +"'\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6214,8 +6217,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Premeu una Tecla.." +msgid "Press a Key..." +msgstr "Premeu una Tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6398,7 +6401,7 @@ msgid "Property:" msgstr "Propietat:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Substitutiu per a..." #: editor/project_settings_editor.cpp @@ -6494,11 +6497,11 @@ msgid "Easing Out-In" msgstr "Esmorteeix Sortida-Entrada" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Fitxer..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Directori..." #: editor/property_editor.cpp @@ -6671,7 +6674,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Aquesta operació no es pot dur a terme en escenes instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Anomena i Desa la Nova Escena..." #: editor/scene_tree_dock.cpp @@ -7390,7 +7393,7 @@ msgstr "Trieu la distà ncia:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nom de la classe no pot ser una paraula clau reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8101,7 +8104,7 @@ msgstr "Cal que la propietat Camà assenyali cap a un node Spatial và lid." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment necessita un recurs Ambiental." #: scene/3d/scenario_fx.cpp msgid "" @@ -8115,6 +8118,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Aquest WorldEnvironment s'ignora. Afegiu una cà mera (per a escenes 3D) o " +"configureu el Background Mode a Canvas (per a escenes 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8375,8 +8380,8 @@ msgstr "La mida de la lletra no és và lida." #~ msgid "Exporting for %s" #~ msgstr "Exportació per a %s" -#~ msgid "Setting Up.." -#~ msgstr "Instal·lant.." +#~ msgid "Setting Up..." +#~ msgstr "Instal·lant..." #~ msgid "Error loading scene." #~ msgstr "No s'ha pogut carregar l'escena." @@ -8433,7 +8438,7 @@ msgstr "La mida de la lletra no és và lida." #~ msgid "Info" #~ msgstr "Informació" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "ReImporta..." #~ msgid "No bit masks to import!" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index ce26418cbf..6f46ba7535 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -6,6 +6,7 @@ # Fadex <vitekpaulik@gmail.com>, 2017. # Jan 'spl!te' KondelÃk <j.kondelik@centrum.cz>, 2016. # Jiri Hysek <contact@jirihysek.com>, 2017. +# Josef KuchaÅ™ <josef.kuchar267@gmail.com>, 2018. # LudÄ›k Novotný <gladosicek@gmail.com>, 2016, 2018. # Martin Novák <maidx@seznam.cz>, 2017. # zxey <r.hozak@seznam.cz>, 2018. @@ -13,15 +14,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-24 12:07+0000\n" -"Last-Translator: zxey <r.hozak@seznam.cz>\n" +"PO-Revision-Date: 2018-05-21 12:36+0000\n" +"Last-Translator: Josef KuchaÅ™ <josef.kuchar267@gmail.com>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -32,9 +33,8 @@ msgid "All Selection" msgstr "VÅ¡echny vybrané" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animace: zmÄ›na hodnoty" +msgstr "Animace: ZmÄ›nit Äas klÃÄového snÃmku" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -45,9 +45,8 @@ msgid "Anim Change Transform" msgstr "Animace: zmÄ›na transformace" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Animace: zmÄ›na hodnoty" +msgstr "Animace: ZmÄ›nit hodnotu klÃÄového snÃmku" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -92,7 +91,7 @@ msgstr "Animace: zmÄ›na typu hodnot" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "ZmÄ›na režimu opakovánà animaÄnà stopy" +msgstr "Animace: ZmÄ›na režimu opakovánà animaÄnà stopy" #: editor/animation_editor.cpp msgid "Edit Node Curve" @@ -230,7 +229,7 @@ msgstr "ZmÄ›nit opakovánà animace" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Animace: VytvoÅ™it typovaný klÃÄ" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -326,7 +325,7 @@ msgstr "PÅ™echod" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "PomÄ›r měřÃtka:" +msgstr "PomÄ›r zvÄ›tÅ¡enÃ:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" @@ -504,8 +503,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Odpojit '%s' od '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "PÅ™ipojit.." +msgid "Connect..." +msgstr "PÅ™ipojit..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -876,7 +875,7 @@ msgstr "Ztlumit" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "ObejÃt" #: editor/editor_audio_buses.cpp msgid "Bus options" @@ -924,12 +923,12 @@ msgid "Move Audio Bus" msgstr "PÅ™esunout Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Uložit rozloženà Audio Busu jako.." +msgid "Save Audio Bus Layout As..." +msgstr "Uložit rozloženà Audio Busu jako..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "UmÃstÄ›nà pro nové rozloženÃ.." +msgid "Location for New Layout..." +msgstr "UmÃstÄ›nà pro nové rozloženÃ..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1066,12 +1065,12 @@ msgid "Updating Scene" msgstr "Aktualizuji scénu" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Ukládám lokálnà zmÄ›ny.." +msgid "Storing local changes..." +msgstr "Ukládám lokálnà zmÄ›ny..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aktualizuji scénu.." +msgid "Updating scene..." +msgstr "Aktualizuji scénu..." #: editor/editor_data.cpp msgid "[empty]" @@ -1139,8 +1138,8 @@ msgid "Show In File Manager" msgstr "Ukázat ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nová složka.." +msgid "New Folder..." +msgstr "Nová složka..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1209,14 +1208,12 @@ msgid "Focus Path" msgstr "" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Up" -msgstr "PÅ™esunout oblÃbenou položku o úroveň výš" +msgstr "PÅ™esunout oblÃbenou položku nahoru" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Move Favorite Down" -msgstr "PÅ™esunout oblÃbenou položku o úroveň nÞ" +msgstr "PÅ™esunout oblÃbenou položku dolů" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1245,7 +1242,7 @@ msgstr "" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "(Re)Importovánà assetů" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1410,13 +1407,13 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Chápu.." +msgid "I see..." +msgstr "Chápu..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1622,12 +1619,12 @@ msgid "Open Base Scene" msgstr "OtevÅ™Ãt základnà scénu" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Rychlé otevÅ™enà scény.." +msgid "Quick Open Scene..." +msgstr "Rychle otevÅ™Ãt scénu..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Rychlé otevÅ™enà skriptu.." +msgid "Quick Open Script..." +msgstr "Rychlé otevÅ™enà skriptu..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1638,8 +1635,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Uložit zmÄ›ny '%s' pÅ™ed zavÅ™enÃm?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Uložit scénu jako.." +msgid "Save Scene As..." +msgstr "Uložit scénu jako..." #: editor/editor_node.cpp msgid "No" @@ -1690,7 +1687,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tuto akci nelze vrátit zpÄ›t. PokraÄovat?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Rychlé spuÅ¡tÄ›nà scény..." #: editor/editor_node.cpp @@ -1845,7 +1842,7 @@ msgid "Previous tab" msgstr "PÅ™edchozà záložka" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrovat soubory..." #: editor/editor_node.cpp @@ -1857,12 +1854,12 @@ msgid "New Scene" msgstr "Nová scéna" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nová odvozená scéna.." +msgid "New Inherited Scene..." +msgstr "Nová odvozená scéna..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "OtevÅ™Ãt scénu.." +msgid "Open Scene..." +msgstr "OtevÅ™Ãt scénu..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1881,16 +1878,16 @@ msgid "Open Recent" msgstr "OtevÅ™Ãt nedávné" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konvertovat na.." +msgid "Convert To..." +msgstr "Konvertovat na..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2065,9 +2062,8 @@ msgid "Q&A" msgstr "Q&A" #: editor/editor_node.cpp -#, fuzzy msgid "Issue Tracker" -msgstr "Správa chyb" +msgstr "Issue Tracker" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -2115,7 +2111,7 @@ msgstr "PÅ™ehrát vlastnà scénu" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "PÅ™ehrát vlastnà scénu" +msgstr "Spustit vlastnà scénu" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" @@ -2150,8 +2146,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Uložit jako.." +msgid "Save As..." +msgstr "Uložit jako..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2259,8 +2255,8 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Náhled.." +msgid "Thumbnail..." +msgstr "Náhled..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2304,14 +2300,12 @@ msgid "Average Time (sec)" msgstr "PrůmÄ›rný Äas (sek.)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame %" -msgstr "% snÃmku" +msgstr "SnÃmek %" #: editor/editor_profiler.cpp -#, fuzzy msgid "Physics Frame %" -msgstr "% fyzikálnÃho snÃmku" +msgstr "Fyzikálnà snÃmek %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2326,7 +2320,6 @@ msgid "Self" msgstr "" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame #:" msgstr "SnÃmek Ä.:" @@ -2416,7 +2409,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2492,9 +2485,8 @@ msgid "Error requesting url: " msgstr "Chyba požadavku o url: " #: editor/export_template_manager.cpp -#, fuzzy -msgid "Connecting to Mirror.." -msgstr "PÅ™ipojuji se k mirroru.." +msgid "Connecting to Mirror..." +msgstr "PÅ™ipojuji se k zrcadlu..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2510,22 +2502,21 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "PÅ™ipojuji.." +msgid "Connecting..." +msgstr "PÅ™ipojuji..." #: editor/export_template_manager.cpp msgid "Can't Connect" msgstr "Nelze se pÅ™ipojit" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" msgstr "PÅ™ipojeno" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "PosÃlá se žádost.." +msgid "Requesting..." +msgstr "PosÃlá se žádost..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2653,44 +2644,43 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Sbalit vÅ¡e" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "" +msgid "Rename..." +msgstr "PÅ™ejmenovat..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "" +msgid "Move To..." +msgstr "PÅ™esunout do..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" -msgstr "OtevÅ™Ãt scénu" +msgstr "OtevÅ™Ãt scénu(y)" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Instance" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +msgid "Edit Dependencies..." +msgstr "Upravit závislosti..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "View Owners..." +msgstr "Zobrazit vlastnÃky..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplikovat.." +msgid "Duplicate..." +msgstr "Duplikovat..." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "PÅ™edchozà adresář" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "NásledujÃcà adresář" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" @@ -2707,7 +2697,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2773,7 +2763,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2785,7 +2775,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2801,7 +2791,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2821,8 +2811,8 @@ msgid "Import As:" msgstr "Importovat jako:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "PÅ™edvolba..." #: editor/import_dock.cpp msgid "Reimport" @@ -2878,7 +2868,6 @@ msgid "" msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" msgstr "Odstranit body" @@ -2983,7 +2972,7 @@ msgstr "PÅ™ehrát vybranou animaci od vybrané pozice. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Pozice animace (v sekundách)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." @@ -3034,17 +3023,14 @@ msgid "Enable Onion Skinning" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" msgstr "SmÄ›ry" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Past" -msgstr "Minulý" +msgstr "PÅ™edcházejÃcÃ" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Future" msgstr "BudoucÃ" @@ -3159,7 +3145,6 @@ msgid "Amount:" msgstr "MnožstvÃ:" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Blend:" msgstr "ProlÃnánÃ:" @@ -3241,21 +3226,20 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importovat animace.." +msgid "Import Animations..." +msgstr "Importovat animace..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtry.." +msgid "Filters..." +msgstr "Filtry..." #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "PÅ™iblÞenà animace." +msgstr "Strom animacÃ" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3319,8 +3303,8 @@ msgid "Fetching:" msgstr "Stahuji:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "ZjišťovánÃ.." +msgid "Resolving..." +msgstr "ZjišťovánÃ..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3386,8 +3370,8 @@ msgid "Site:" msgstr "Web:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Podpora.." +msgid "Support..." +msgstr "Podpora..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3435,28 +3419,28 @@ msgstr "Nastavenà pÅ™ichycovánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "" +msgstr "Offset mřÞky:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "" +msgstr "Krok mřÞky:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "" +msgstr "Offset rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "" +msgstr "Krok rotace:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" -msgstr "" +msgstr "PÅ™emÃstit stÅ™ed" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "" +msgstr "PÅ™esunout akci" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" @@ -3487,23 +3471,20 @@ msgid "Create new horizontal and vertical guides" msgstr "VytvoÅ™it nové vodorovné a svislé vodÃtka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Edit IK Chain" msgstr "Upravit IK Å™etÄ›zec" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Edit CanvasItem" -msgstr "" +msgstr "Upravit CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Anchors only" msgstr "Pouze kotvy" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Anchors and Margins" -msgstr "Upravit kotvy a okraje" +msgstr "ZmÄ›nit kotvy a okraje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3519,19 +3500,20 @@ msgstr "Režim výbÄ›ru" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "" +msgstr "TáhnutÃ: OtoÄit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "" +msgstr "Alt+TáhnutÃ: PÅ™emÃstit" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "" +msgstr "Alt+Pravé tlaÄÃko myÅ¡i:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3569,7 +3551,6 @@ msgid "Snapping options" msgstr "Možnosti pÅ™ichytávánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to grid" msgstr "PÅ™ichytit k mřÞce" @@ -3578,6 +3559,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Nastavenà pÅ™ichytávánÃ..." @@ -3591,11 +3573,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart snapping" -msgstr "" +msgstr "Chytré pÅ™ichytávánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to parent" -msgstr "" +msgstr "PÅ™ichytit k rodiÄovi" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" @@ -3611,7 +3593,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to guides" -msgstr "" +msgstr "PÅ™ichytit k vodÃtkům" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3633,15 +3615,15 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" -msgstr "" +msgstr "VytvoÅ™it kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "" +msgstr "Vymazat kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" -msgstr "" +msgstr "Zobrazit kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -3662,9 +3644,8 @@ msgid "Show Grid" msgstr "Zobrazit mřÞku" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Helpers" -msgstr "Zobrazit pomocné" +msgstr "Zobrazit pomocnÃky" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -3675,9 +3656,8 @@ msgid "Show Guides" msgstr "Zobrazit vodÃtka" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Zobrazit mřÞku" +msgstr "Zobrazit poÄátek" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -3685,25 +3665,22 @@ msgid "Show Viewport" msgstr "Zobrazit pomocné" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Selection" msgstr "Vycentrovat výbÄ›r" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "" +msgstr "VýbÄ›r snÃmku" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" msgstr "RozloženÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Keys" msgstr "Vložit klÃÄe" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert Key" msgstr "Vložit klÃÄ" @@ -3724,9 +3701,8 @@ msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Odstranit signál" +msgstr "Nastavit stÅ™ed na pozici myÅ¡i" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -3755,7 +3731,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "" +msgstr "VytvoÅ™it uzel" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3774,7 +3750,7 @@ msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Poly3D" -msgstr "" +msgstr "VytvoÅ™it Poly3D" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" @@ -3782,17 +3758,17 @@ msgstr "" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "Odstranit %d?" #: editor/plugins/cube_grid_theme_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Item" -msgstr "" +msgstr "PÅ™idat položku" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "" +msgstr "Odstranit vybranou položku" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" @@ -3804,11 +3780,11 @@ msgstr "Aktualizovat ze scény" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Flat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -3883,7 +3859,7 @@ msgstr "" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "Položka %d" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" @@ -3891,17 +3867,19 @@ msgstr "Položky" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Editor seznamu položek" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" +"Na tomto uzlu nenà žádný OccluderPolygon2D.\n" +"VytvoÅ™it a pÅ™iÅ™adit k tomuto uzlu?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "" +msgstr "VytvoÅ™it Occluder Polygon" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." @@ -3937,19 +3915,19 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "" +msgstr "Toto v koÅ™enu scény nefunguje!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "VytvoÅ™it Trimesh Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "VytvoÅ™it Convex Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "VytvoÅ™it Navigation Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." @@ -4008,7 +3986,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4020,7 +3998,6 @@ msgid "View UV2" msgstr "Zobrazit UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Unwrap UV2 for Lightmap/AO" msgstr "Rozbalit UV2 pro Lightmapu/AO" @@ -4103,15 +4080,15 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" -msgstr "" +msgstr "Osa X" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Y-Axis" -msgstr "" +msgstr "Osa Y" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Z-Axis" -msgstr "" +msgstr "Osa Z" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh Up Axis:" @@ -4127,11 +4104,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "" +msgstr "Náhodné měřÃtko:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" -msgstr "" +msgstr "Naplnit" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" @@ -4215,7 +4192,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4278,7 +4255,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "" +msgstr "Vygenerovat AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" @@ -4335,7 +4312,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "" +msgstr "PÅ™esunout bod v kÅ™ivce" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" @@ -4348,17 +4325,18 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "" +msgstr "Vybrat body" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp +#, fuzzy msgid "Shift+Drag: Select Control Points" -msgstr "" +msgstr "Shift+TáhnutÃ:" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "" +msgstr "KliknutÃ: PÅ™idat bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4382,16 +4360,16 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "" +msgstr "Odstranit bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "" +msgstr "UzavÅ™Ãt kÅ™ivku" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "" +msgstr "Bod kÅ™ivky #" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4399,9 +4377,8 @@ msgid "Set Curve Point Position" msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Odstranit signál" +msgstr "Nastavit kÅ™ivku na pozici" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4410,11 +4387,11 @@ msgstr "Odstranit signál" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "" +msgstr "RozdÄ›lit cestu" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "" +msgstr "Odstranit bod cesty" #: editor/plugins/path_editor_plugin.cpp #, fuzzy @@ -4431,7 +4408,7 @@ msgstr "VytvoÅ™it UV mapu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "" +msgstr "Transformovat UV mapu" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -4443,16 +4420,15 @@ msgstr "PÅ™esunout bod" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "" +msgstr "Ctrl: OtoÄit" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" msgstr "Shift: PÅ™esunout vÅ¡e" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: ZvÄ›tÅ¡enÃ" +msgstr "Shift+Ctrl: ZmÄ›nit měřÃtko" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" @@ -4464,7 +4440,7 @@ msgstr "OtoÄit polygon" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "" +msgstr "ZmÄ›nit měřÃtko mnohoúhelnÃku" #: editor/plugins/polygon_2d_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4523,18 +4499,18 @@ msgstr "Schránka zdroje je prázdná!" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "" +msgstr "OtevÅ™Ãt v editoru" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "" +msgstr "Instance:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp #: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp msgid "Type:" -msgstr "" +msgstr "Typ:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4581,13 +4557,12 @@ msgid "Import Theme" msgstr "Importovat motiv" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Uložit motiv jako.." +msgid "Save Theme As..." +msgstr "Uložit motiv jako..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid " Class Reference" -msgstr " ReferenÄnà tÅ™Ãdy" +msgstr " Reference tÅ™Ãdy" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -4627,12 +4602,11 @@ msgstr "Uložit vÅ¡e" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Lehký restart skriptu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "ZkopÃrovat uzly" +msgstr "ZkopÃrovat cestu ke skriptu" #: editor/plugins/script_editor_plugin.cpp msgid "Show In File System" @@ -4680,8 +4654,8 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "NajÃt.." +msgid "Find..." +msgstr "NajÃt..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4699,7 +4673,7 @@ msgstr "Vstoupit" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "" +msgstr "PÅ™eruÅ¡it" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp @@ -4708,7 +4682,7 @@ msgstr "PokraÄovat" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "" +msgstr "Nechat ladÃcà program otevÅ™ený" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with external editor" @@ -4821,12 +4795,11 @@ msgstr "Odsadit zprava" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "" +msgstr "PÅ™epnout komentář" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Běž na řádek" +msgstr "Složit/Rozložit řádek" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -4890,16 +4863,16 @@ msgid "Find Previous" msgstr "NajÃt pÅ™edchozÃ" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Nahradit.." +msgid "Replace..." +msgstr "Nahradit..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "PÅ™ejÃt na funkci.." +msgid "Goto Function..." +msgstr "PÅ™ejÃt na funkci..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "PÅ™ejÃt na řádek.." +msgid "Goto Line..." +msgstr "PÅ™ejÃt na řádek..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -4947,7 +4920,7 @@ msgstr "ZmÄ›nit skalárnà funkci" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "ZmÄ›nit vektorovou funkci" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" @@ -5043,19 +5016,19 @@ msgstr "PerspektivnÃ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "" +msgstr "Transformace zruÅ¡ena." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "ZmÄ›nit osu X." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "ZmÄ›nit osu Y." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "ZmÄ›nit osu Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." @@ -5063,7 +5036,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "" +msgstr "Å kálovánÃ: " #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5080,7 +5053,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "" +msgstr "AnimaÄnà klÃÄ vložen." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -5103,9 +5076,8 @@ msgid "Draw Calls" msgstr "Vykreslovacà volánÃ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" -msgstr "Vertexy" +msgstr "Vrcholy" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" @@ -5188,9 +5160,8 @@ msgid "Display Unshaded" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Zobrazenà prostÅ™edÃ" +msgstr "Zobrazit prostÅ™edÃ" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" @@ -5247,7 +5218,7 @@ msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "XForm Dialog" #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode (Q)" @@ -5259,6 +5230,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"TáhnutÃ: OtoÄit\n" +"Alt+TáhnutÃ: PÅ™emÃstit\n" +"Alt+Pravé tlaÄÃko myÅ¡i: VýbÄ›r seznamu hloubky" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5314,19 +5288,19 @@ msgstr "PÅ™epnout perspektivnÃ/ortogonálnà pohled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "" +msgstr "Vložit animaÄnà klÃÄ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "" +msgstr "Zaměřit poÄátek" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "" +msgstr "Zaměřit výbÄ›r" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" -msgstr "" +msgstr "Zarovnat výbÄ›r s pohledem" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Select" @@ -5353,44 +5327,40 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Nastavit pÅ™ichycenÃ.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "1 výřez" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "" +msgstr "2 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "2 výřezy (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "" +msgstr "3 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "3 výřezy (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "" +msgstr "4 výřezy" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "" +msgstr "Zobrazit poÄátek" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "" +msgstr "Zobrazit mřÞku" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -5444,11 +5414,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "OtoÄit (stupnÄ›):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "ZmÄ›nit měřÃtko (pomÄ›r):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -5456,11 +5426,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "" +msgstr "PÅ™ed" #: editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "" +msgstr "Po" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -5468,7 +5438,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "" +msgstr "PÅ™idat snÃmek" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" @@ -5476,7 +5446,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "" +msgstr "Vložit snÃmek" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" @@ -5488,27 +5458,27 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "ZmÄ›nit FPS animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(prázdný)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Rychlost (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "SmyÄka" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "SnÃmky animace" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -5525,7 +5495,7 @@ msgstr "ZkopÃrovat uzly" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "" +msgstr "PÅ™emÃstit (za)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" @@ -5549,7 +5519,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Žádné>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" @@ -5566,25 +5536,25 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Offset:" -msgstr "" +msgstr "Offset:" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Step:" -msgstr "" +msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Separation:" -msgstr "" +msgstr "OddÄ›lenÃ:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region" -msgstr "" +msgstr "Oblast textury" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "" +msgstr "Editor oblasti textury" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -5592,29 +5562,28 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "" +msgstr "PÅ™idat vÅ¡echny položky" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "" +msgstr "PÅ™idat vÅ¡e" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Item" -msgstr "" +msgstr "Odstranit položku" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Odstranit výbÄ›r" +msgstr "Odstranit vÅ¡echny položky" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All" msgstr "Odebrat vÅ¡e" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "" +msgid "Edit theme..." +msgstr "Editovat téma..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5622,15 +5591,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "PÅ™idat položky tÅ™Ãdy" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Odstranit položky tÅ™Ãdy" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "VytvoÅ™it prázdnou Å¡ablonu" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" @@ -5642,19 +5611,20 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "" +msgstr "CheckBox Radio1" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "" +msgstr "CheckBox Radio2" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Položka" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Check Item" -msgstr "" +msgstr "Zkontrolovat položku" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" @@ -5678,61 +5648,60 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "" +msgstr "Možnosti" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Možnosti" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Tab 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Tab 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "Tab 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "" +msgstr "Datový typ:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Ikona" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" -msgstr "" +msgstr "Styl" #: editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "" +msgstr "Font" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Barva" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "ZmÄ›nit měřÃtko výbÄ›ru" +msgstr "Vymazat oznaÄené" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "LineárnÃ" +msgstr "Nakreslit Äáru" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -5760,11 +5729,11 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "" +msgstr "Zrcadlit X" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "" +msgstr "Zrcadlit Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5776,19 +5745,19 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "OtoÄit o 0 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "OtoÄit o 90 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "OtoÄit o 180 stupňů" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "OtoÄit o 270 stupňů" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" @@ -5796,15 +5765,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" -msgstr "" +msgstr "Název položky nebo ID:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" -msgstr "" +msgstr "VytvoÅ™it ze scény?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "SlouÄit ze scény?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -5813,15 +5782,15 @@ msgstr "Soubor:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "VytvoÅ™it ze scény" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "SlouÄit ze scény" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" -msgstr "" +msgstr "Chyba" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" @@ -5864,7 +5833,7 @@ msgstr "Odstranit" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "Odstranit preset '%s'?" +msgstr "Odstranit pÅ™edvolbu '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " @@ -5872,35 +5841,35 @@ msgstr "Exportnà šablony pro tuto platformu chybà nebo jsou poÅ¡kozené: " #: editor/project_export.cpp msgid "Presets" -msgstr "" +msgstr "PÅ™edvolby" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "" +msgid "Add..." +msgstr "PÅ™idat..." #: editor/project_export.cpp msgid "Resources" -msgstr "" +msgstr "Zdroje" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "" +msgstr "Exportovat vÄechny zdroje tohoto projektu" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "" +msgstr "Exportovat vybrané scény (a závislosti)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "" +msgstr "Exportovat vybrané zdroje (a závislosti)" #: editor/project_export.cpp msgid "Export Mode:" -msgstr "" +msgstr "Expertnà režim:" #: editor/project_export.cpp msgid "Resources to export:" -msgstr "" +msgstr "Zdroje k exportu:" #: editor/project_export.cpp msgid "" @@ -5966,6 +5935,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Jméno projektu:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Nelze vytvoÅ™it složku." @@ -6013,11 +5987,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Import & Edit" -msgstr "" +msgstr "Importovat a upravit" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "VytvoÅ™it nový projekt" #: editor/project_manager.cpp msgid "Create & Edit" @@ -6025,7 +5999,7 @@ msgstr "VytvoÅ™it a editovat" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "" +msgstr "Instalovat projekt:" #: editor/project_manager.cpp msgid "Install & Edit" @@ -6033,7 +6007,7 @@ msgstr "Instalovat a editovat" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Jméno projektu:" #: editor/project_manager.cpp msgid "Create folder" @@ -6041,15 +6015,15 @@ msgstr "VytvoÅ™it složku" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Cesta k projektu:" #: editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Procházet" #: editor/project_manager.cpp msgid "Unnamed Project" -msgstr "" +msgstr "Nepojmenovaný projekt" #: editor/project_manager.cpp msgid "Can't open project" @@ -6057,7 +6031,7 @@ msgstr "Nelze otevÅ™Ãt projekt" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "" +msgstr "Jste si jisti, že chcete otevÅ™it vÃce než jeden projekt?" #: editor/project_manager.cpp msgid "" @@ -6074,11 +6048,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Are you sure to run more than one project?" -msgstr "" +msgstr "Jste si jisti, že chcete spustit vÃce než jeden projekt?" #: editor/project_manager.cpp msgid "Remove project from the list? (Folder contents will not be modified)" -msgstr "" +msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotÄen)" #: editor/project_manager.cpp msgid "" @@ -6102,15 +6076,15 @@ msgstr "Seznam projektů" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Skenovat" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Vyberte složku pro skenovánÃ" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nový projekt" #: editor/project_manager.cpp msgid "Templates" @@ -6118,11 +6092,11 @@ msgstr "Å ablony" #: editor/project_manager.cpp msgid "Exit" -msgstr "" +msgstr "UkonÄit" #: editor/project_manager.cpp msgid "Restart Now" -msgstr "" +msgstr "Restartovat nynÃ" #: editor/project_manager.cpp msgid "Can't run project" @@ -6148,17 +6122,20 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Mouse Button" -msgstr "" +msgstr "TlaÄÃtko myÅ¡i" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Neplatné jméno akce. Nesmà být prázdné nebo obsahovat '/', ':', '=', '\\' " +"nebo '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" -msgstr "" +msgstr "Akce '%s' již existuje!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -6178,51 +6155,51 @@ msgstr "Alt+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Control+" -msgstr "" +msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "" +msgid "Press a Key..." +msgstr "StisknÄ›te klávesu..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" -msgstr "" +msgstr "Index tlaÄÃtka myÅ¡i:" #: editor/project_settings_editor.cpp msgid "Left Button" -msgstr "" +msgstr "Levé tlaÄÃtko" #: editor/project_settings_editor.cpp msgid "Right Button" -msgstr "" +msgstr "Pravé tlaÄÃtko" #: editor/project_settings_editor.cpp msgid "Middle Button" -msgstr "" +msgstr "ProstÅ™ednà tlaÄÃtko" #: editor/project_settings_editor.cpp msgid "Wheel Up Button" -msgstr "" +msgstr "KoleÄko nahoru" #: editor/project_settings_editor.cpp msgid "Wheel Down Button" -msgstr "" +msgstr "KoleÄko dolů" #: editor/project_settings_editor.cpp msgid "Button 6" -msgstr "" +msgstr "TlaÄÃtko Ä. 6" #: editor/project_settings_editor.cpp msgid "Button 7" -msgstr "" +msgstr "TlaÄÃtko Ä. 7" #: editor/project_settings_editor.cpp msgid "Button 8" -msgstr "" +msgstr "TlaÄÃtko Ä. 8" #: editor/project_settings_editor.cpp msgid "Button 9" -msgstr "" +msgstr "TlaÄÃtko Ä. 9" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -6247,7 +6224,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "" +msgstr "PÅ™idat akci" #: editor/project_settings_editor.cpp msgid "Device" @@ -6287,7 +6264,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "" +msgstr "Vlastnost '%s' neexistuje." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." @@ -6299,7 +6276,7 @@ msgstr "Odstranit položku" #: editor/project_settings_editor.cpp msgid "Already existing" -msgstr "" +msgstr "Již existujÃcÃ" #: editor/project_settings_editor.cpp msgid "Add Input Action" @@ -6307,11 +6284,11 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Error saving settings." -msgstr "" +msgstr "Chyba pÅ™i ukládánà nastavenÃ." #: editor/project_settings_editor.cpp msgid "Settings saved OK." -msgstr "" +msgstr "Nastavenà úspěšnÄ› uloženo." #: editor/project_settings_editor.cpp msgid "Override for Feature" @@ -6319,11 +6296,11 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "" +msgstr "PÅ™idat pÅ™eklad" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "" +msgstr "Odstranit pÅ™eklad" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" @@ -6360,14 +6337,14 @@ msgstr "Nastavenà projektu (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "VÅ¡eobecné" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" -msgstr "" +msgstr "Vlastnost:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6376,35 +6353,35 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Action:" -msgstr "" +msgstr "Akce:" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "" +msgstr "ZaÅ™ÃzenÃ:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "" +msgstr "Index:" #: editor/project_settings_editor.cpp msgid "Localization" -msgstr "" +msgstr "Lokalizace" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "" +msgstr "PÅ™eklady" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "" +msgstr "PÅ™eklady:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "" +msgstr "PÅ™emapovánÃ" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "" +msgstr "Zdroje:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" @@ -6452,7 +6429,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "Nula" #: editor/property_editor.cpp msgid "Easing In-Out" @@ -6463,37 +6440,36 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "" +msgid "File..." +msgstr "Soubor..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "" +msgid "Dir..." +msgstr "Složka..." #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "PÅ™iÅ™adit" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Vybrat vÅ¡e" +msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "New Script" -msgstr "" +msgstr "Nový skript" #: editor/property_editor.cpp msgid "New %s" -msgstr "" +msgstr "Nový %s" #: editor/property_editor.cpp msgid "Make Unique" -msgstr "" +msgstr "VytvoÅ™it unikátnÃ" #: editor/property_editor.cpp msgid "Show in File System" -msgstr "" +msgstr "Zobrazit v souborovém systému" #: editor/property_editor.cpp msgid "Convert To %s" @@ -6508,9 +6484,8 @@ msgid "Selected node is not a Viewport!" msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" -msgstr "Vložit uzly" +msgstr "Vybrat uzel" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -6522,20 +6497,19 @@ msgstr "" #: editor/property_editor.cpp msgid "[Empty]" -msgstr "" +msgstr "[Prázdné]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" -msgstr "" +msgstr "Nastavit" #: editor/property_editor.cpp msgid "Properties:" -msgstr "" +msgstr "Vlastnosti:" #: editor/property_selector.cpp -#, fuzzy msgid "Select Property" -msgstr "PÅ™idat vlastnost setter" +msgstr "Vybrat vlastnost" #: editor/property_selector.cpp msgid "Select Virtual Method" @@ -6575,15 +6549,15 @@ msgstr "" #: editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "" +msgstr "Aktuálnà scéna" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "" +msgstr "Hlavnà scéna" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "" +msgstr "Argumenty hlavnà scény:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" @@ -6600,7 +6574,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Chyba pÅ™i naÄÃtánà scény z %s" #: editor/scene_tree_dock.cpp msgid "" @@ -6618,19 +6592,19 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "PÅ™esunout uzel v rodiÄi" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "PÅ™esunout uzly v rodiÄi" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "Duplikovat uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "" +msgstr "Odstranit uzel/uzly?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -6641,8 +6615,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "" +msgid "Save New Scene As..." +msgstr "Uložit novou scénu jako..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -6658,7 +6632,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" -msgstr "" +msgstr "Dává smysl!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -6670,7 +6644,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp msgid "" @@ -6680,7 +6654,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "Chyba pÅ™i ukládánà scény." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." @@ -6696,11 +6670,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "" +msgstr "Odstranit uzel/uzly" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "PÅ™idat podÅ™Ãzený uzel" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -6708,11 +6682,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "ZmÄ›nit typ" #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "" +msgstr "PÅ™ipojit skript" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -6720,16 +6694,15 @@ msgstr "Vymazat skript" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "SlouÄit ze scény" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Uložit vÄ›tev jako scénu" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Copy Node Path" -msgstr "KopÃrovat cestu uzlu" +msgstr "KopÃrovat cestu k uzlu" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -6737,7 +6710,7 @@ msgstr "Odstranit (bez potvrzenÃ)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "" +msgstr "PÅ™idat/VytvoÅ™it nový uzel" #: editor/scene_tree_dock.cpp msgid "" @@ -6746,26 +6719,24 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" msgstr "Filtrovat uzly" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "PÅ™ipojit nový, nebo existujÃcà skript k vybranému uzlu." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" msgstr "Vzdálený" #: editor/scene_tree_dock.cpp msgid "Local" -msgstr "" +msgstr "MÃstnÃ" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" @@ -6823,7 +6794,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "PÅ™epnout viditelnost" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -6831,11 +6802,11 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "PÅ™ejmenovat uzel" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Strom scény (uzly):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" @@ -6843,7 +6814,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Vybrat uzel" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -6859,36 +6830,35 @@ msgstr "Chyba nahrávánà skriptu z %s" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "N/A" #: editor/script_create_dialog.cpp msgid "Path is empty" -msgstr "" +msgstr "Cesta je prázdná" #: editor/script_create_dialog.cpp msgid "Path is not local" -msgstr "" +msgstr "Cesta nenà mÃstnÃ" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Neplatná základnà cesta" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" -msgstr "" +msgstr "Složka se stejným jménem již existuje" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Soubor už existuje. PÅ™epsat?" +msgstr "Soubor již existuje, bude znovu použit" #: editor/script_create_dialog.cpp msgid "Invalid extension" -msgstr "" +msgstr "Neplatná pÅ™Ãpona" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Vybrána Å¡patná pÅ™Ãpona" #: editor/script_create_dialog.cpp msgid "Invalid Path" @@ -6896,7 +6866,7 @@ msgstr "Neplatná cesta" #: editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "" +msgstr "Neplatné jméno tÅ™Ãdy" #: editor/script_create_dialog.cpp #, fuzzy @@ -6905,11 +6875,11 @@ msgstr "Neplatné jméno vlastnosti." #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Skript je validnÃ" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Povoleno: a-z, A-Z, 0-9 a _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" @@ -6925,15 +6895,15 @@ msgstr "" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "" +msgstr "Jazyk" #: editor/script_create_dialog.cpp msgid "Inherits" -msgstr "" +msgstr "DÄ›dÃ" #: editor/script_create_dialog.cpp msgid "Class Name" -msgstr "" +msgstr "Jméno tÅ™Ãdy" #: editor/script_create_dialog.cpp msgid "Template" @@ -6948,29 +6918,28 @@ msgid "Attach Node Script" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " msgstr "Vzdálený " #: editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "" +msgstr "Bajtů:" #: editor/script_editor_debugger.cpp msgid "Warning" -msgstr "" +msgstr "VarovánÃ" #: editor/script_editor_debugger.cpp msgid "Error:" -msgstr "" +msgstr "Chyba:" #: editor/script_editor_debugger.cpp msgid "Source:" -msgstr "" +msgstr "Zdroj:" #: editor/script_editor_debugger.cpp msgid "Function:" -msgstr "" +msgstr "Funkce:" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -6978,16 +6947,15 @@ msgstr "" #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" -msgstr "" +msgstr "Chyby" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "PÅ™ipojit.." +msgstr "KopÃrovat chybu" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -7003,11 +6971,11 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Variable" -msgstr "" +msgstr "PromÄ›nná" #: editor/script_editor_debugger.cpp msgid "Errors:" -msgstr "" +msgstr "Chyby:" #: editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" @@ -7023,7 +6991,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Value" -msgstr "" +msgstr "Hodnota" #: editor/script_editor_debugger.cpp msgid "Monitors" @@ -7035,7 +7003,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" +msgstr "Celkem:" #: editor/script_editor_debugger.cpp msgid "Video Mem" @@ -7043,23 +7011,23 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Cesta ke zdroji" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "" +msgstr "Typ" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "" +msgstr "Formát" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "PoužÃvánÃ" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Různé" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -7079,7 +7047,7 @@ msgstr "" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Zkratky" #: editor/settings_config_dialog.cpp msgid "Binding" @@ -7087,7 +7055,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" -msgstr "" +msgstr "ZmÄ›nit rádius svÄ›tla" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" @@ -7095,11 +7063,11 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "" +msgstr "ZmÄ›nit zorné pole kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" -msgstr "" +msgstr "ZmÄ›nit velikost kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Sphere Shape Radius" @@ -7152,15 +7120,15 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "" +msgstr "Platforma:" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform" -msgstr "" +msgstr "Platforma" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dynamic Library" -msgstr "" +msgstr "Dynamická knihovna" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7168,23 +7136,23 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" -msgstr "" +msgstr "Knihovna" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" -msgstr "" +msgstr "Status" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "Knihovny: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7260,14 +7228,12 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Smazat vybraný" +msgstr "GridMap Smazat výbÄ›r" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Duplikovat výbÄ›r" +msgstr "GridMap Duplikovat výbÄ›r" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -7292,15 +7258,15 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Editovat osu X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Editovat osu Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Editovat osu Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" @@ -7331,9 +7297,8 @@ msgid "Cursor Clear Rotation" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "VytvoÅ™it nový" +msgstr "VytvoÅ™it plochu" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Create Exterior Connector" @@ -7341,15 +7306,13 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Erase Area" -msgstr "" +msgstr "Vymazat oblast" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "ZmÄ›nit měřÃtko výbÄ›ru" +msgstr "Vymazat výbÄ›r" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Settings" msgstr "Nastavenà GridMap" @@ -7363,25 +7326,23 @@ msgstr "" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "" +msgstr "Generovánà řeÅ¡enÃ..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Generovánà C# projektu..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." msgstr "NepodaÅ™ilo se vytvoÅ™it Å™eÅ¡enÃ." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." msgstr "NepodaÅ™ilo se uložit Å™eÅ¡enÃ." #: modules/mono/editor/godotsharp_editor.cpp msgid "Done" -msgstr "" +msgstr "Hotovo" #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create C# project." @@ -7389,14 +7350,13 @@ msgstr "" #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "O podpoÅ™e C#" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Create C# solution" msgstr "VytvoÅ™it C# Å™eÅ¡enÃ" @@ -7410,7 +7370,7 @@ msgstr "Sestavit projekt" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Warnings" -msgstr "" +msgstr "VarovánÃ" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" @@ -7458,9 +7418,8 @@ msgid "Change Signal Arguments" msgstr "Upravit argumenty signálu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "ZmÄ›nit typ hodnot pole" +msgstr "ZmÄ›nit typ argumentu" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" @@ -7515,29 +7474,25 @@ msgid "Add Signal" msgstr "PÅ™idat signál" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Expression" -msgstr "Animace: zmÄ›na pÅ™echodu" +msgstr "ZmÄ›nit výraz" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" msgstr "PÅ™idat uzel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Odstranit neplatné klÃÄe" +msgstr "Odstranit uzly VisualScriptu" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Podržte Meta k uvolnÄ›nà getteru. Podržte Shift k uvolnÄ›nà generického " -"podpisu." +"Podržte %s k uvolnÄ›nà getteru. Podržte Shift k uvolnÄ›nà generického podpisu." #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -7547,7 +7502,6 @@ msgstr "" "podpisu." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a simple reference to the node." msgstr "Podržte %s k uvolnÄ›nà jednoduché reference na uzel." @@ -7627,11 +7581,11 @@ msgstr "Zavolat" #: modules/visual_script/visual_script_editor.cpp msgid "Get" -msgstr "" +msgstr "ZÃskat" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "" +msgstr "Script již má funkci '%s'" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" @@ -7643,7 +7597,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "" +msgstr "Schránka je prázdná!" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" @@ -7775,11 +7729,11 @@ msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "" +msgstr "Spustit v prohlÞeÄi" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "" +msgstr "Spustit vyexportované HTML ve výchozÃm prohlÞeÄi." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -7845,7 +7799,7 @@ msgstr "" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "Prázdný CollisionPolygon2D nemá žádný efekt na kolizÃch." +msgstr "Prázdný CollisionPolygon2D nemá pÅ™i kolizi žádný efekt." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -7930,6 +7884,8 @@ msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D funguje nejlépe, když je nastaven jako rodiÄ editované " +"scény." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" @@ -7961,11 +7917,11 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "%d%%" -msgstr "" +msgstr "%d%%" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(ZbývajÃcà Äas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8092,11 +8048,11 @@ msgstr "" #: scene/gui/color_picker.cpp msgid "Raw Mode" -msgstr "" +msgstr "RAW mód" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "" +msgstr "PÅ™idat aktuálnà barvu jako pÅ™edvolbu" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8104,7 +8060,7 @@ msgstr "Pozor!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "PotvrÄte prosÃm.." +msgstr "PotvrÄte prosÃm..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" diff --git a/editor/translations/da.po b/editor/translations/da.po index 349706f6e0..3b3f4b3e54 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -6,14 +6,14 @@ # Dankse Memes <purplelops@gmail.com>, 2018. # David Lamhauge <davidlamhauge@gmail.com>, 2016. # Esben Damkjær Sørensen <esben@damkjaergaard.com>, 2018. -# Kim Nielsen <kimmowich@stofanet.dk>, 2017. +# Kim Nielsen <kimmowich@stofanet.dk>, 2017, 2018. # Michael Madsen <mim@michael-madsen.dk>, 2017. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-22 07:35+0000\n" -"Last-Translator: Dankse Memes <purplelops@gmail.com>\n" +"PO-Revision-Date: 2018-05-17 19:35+0000\n" +"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" @@ -501,7 +501,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Afbryd '%s' fra '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Forbind..." #: editor/connections_dialog.cpp @@ -829,9 +829,8 @@ msgid "Rename Audio Bus" msgstr "Omdøb Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Skifter Audio Bus Solo" +msgstr "Skift Audio Bus Volume" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -923,12 +922,12 @@ msgid "Move Audio Bus" msgstr "Flyt Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Gem Audio Bus Layout Som.." +msgid "Save Audio Bus Layout As..." +msgstr "Gem Audio Bus Layout Som..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Placering for Ny Layout.." +msgid "Location for New Layout..." +msgstr "Placering for Ny Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1069,12 +1068,12 @@ msgid "Updating Scene" msgstr "Opdatere Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Gemmer lokale ændringer.." +msgid "Storing local changes..." +msgstr "Gemmer lokale ændringer..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Opdatere scene.." +msgid "Updating scene..." +msgstr "Opdatere scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1142,8 +1141,8 @@ msgid "Show In File Manager" msgstr "Vis I Fil Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Opret mappe.." +msgid "New Folder..." +msgstr "Opret mappe..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1335,18 +1334,16 @@ msgid "Description" msgstr "Beskrivelse" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Online Dokumentation:" +msgstr "Online Undervisning:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Der er i øjeblikket ingen beskrivelse af denne metode. Det vil være en stor " +"Der er i øjeblikket ingen beskrivelse af denne klasse. Det vil være en stor " "hjælp, hvis du kan [color=$color][url=$url]bidrage[/url][/color] med en " "beskrivelse!" @@ -1404,30 +1401,28 @@ msgid "Clear" msgstr "Clear" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Output" +msgstr "Ryd Output" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt eksport fejlede med fejlkode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fejl, kan ikke gemme ressource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Gem Ressource Som.." +msgid "Save Resource As..." +msgstr "Gem Ressource Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "Jeg ser.." +msgid "I see..." +msgstr "Jeg ser..." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open file for writing:" msgstr "Kan ikke Ã¥bne fil til skrivning:" @@ -1448,7 +1443,6 @@ msgid "Error while parsing '%s'." msgstr "Error ved parsing af '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unexpected end of file '%s'." msgstr "Uventet afslutning af fil '%s'." @@ -1478,12 +1472,11 @@ msgid "This operation can't be done without a tree root." msgstr "Denne handling kan ikke foretages uden tree root" #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Kunne ikke gemme scene. Der er nogle afhængigheder (forekomster) some ikke " +"Kunne ikke gemme scene. Der er nogle afhængigheder (forekomster) som ikke " "kunne opfyldes." #: editor/editor_node.cpp @@ -1660,12 +1653,12 @@ msgid "Open Base Scene" msgstr "Ã…bn Grund Scene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Hurtig Ã…bn Scene.." +msgid "Quick Open Scene..." +msgstr "Hurtig Ã…bn Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Hurtig Ã…bn Script.." +msgid "Quick Open Script..." +msgstr "Hurtig Ã…bn Script..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1676,8 +1669,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Gem ændringer til '%s' før lukning?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Gem Scene Som.." +msgid "Save Scene As..." +msgstr "Gem Scene Som..." #: editor/editor_node.cpp msgid "No" @@ -1728,8 +1721,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Denne handling kan ikke fortrydes. Vend tilbage alligevel?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hurtig Kør Scene.." +msgid "Quick Run Scene..." +msgstr "Hurtig Kør Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1887,8 +1880,8 @@ msgid "Previous tab" msgstr "Forrige fane" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer filer.." +msgid "Filter Files..." +msgstr "Filtrer filer..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1900,12 +1893,12 @@ msgstr "Ny Scene" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "Ny Nedarvet Scene.." +msgid "New Inherited Scene..." +msgstr "Ny Nedarvet Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Ã…bn Scene.." +msgid "Open Scene..." +msgstr "Ã…bn Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1924,16 +1917,16 @@ msgid "Open Recent" msgstr "Ã…ben Seneste" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konverter Til.." +msgid "Convert To..." +msgstr "Konverter Til..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MaskeBibliotek.." +msgid "MeshLibrary..." +msgstr "MaskeBibliotek..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2199,8 +2192,8 @@ msgid "Save the currently edited resource." msgstr "Gem den aktuelt redigerede ressource." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Gem Som.." +msgid "Save As..." +msgstr "Gem Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2308,8 +2301,8 @@ msgid "Creating Mesh Previews" msgstr "Opretter Maske ForhÃ¥ndsvisninger" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniature.." +msgid "Thumbnail..." +msgstr "Miniature..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2465,8 +2458,8 @@ msgid "(Current)" msgstr "(Nuværende)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Henter spejle, vent venligst .." +msgid "Retrieving mirrors, please wait..." +msgstr "Henter spejle, vent venligst ..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2548,7 +2541,7 @@ msgstr "Fejl i anmodning url: " #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Forbinder..." #: editor/export_template_manager.cpp @@ -2566,8 +2559,8 @@ msgstr "Kan ikke Løses" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Forbinder.." +msgid "Connecting..." +msgstr "Forbinder..." #: editor/export_template_manager.cpp #, fuzzy @@ -2580,8 +2573,8 @@ msgstr "Tilsluttet" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Anmoder.." +msgid "Requesting..." +msgstr "Anmoder..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2722,12 +2715,12 @@ msgid "Collapse all" msgstr "Klap alle sammen" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Omdøb.." +msgid "Rename..." +msgstr "Omdøb..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Flyt Til.." +msgid "Move To..." +msgstr "Flyt Til..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2739,16 +2732,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Rediger Afhængigheder.." +msgid "Edit Dependencies..." +msgstr "Rediger Afhængigheder..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vis Ejere.." +msgid "View Owners..." +msgstr "Vis Ejere..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplikere" #: editor/filesystem_dock.cpp @@ -2774,10 +2767,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Scanner Filer,\n" -"Vent Venligst.." +"Vent Venligst..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2842,20 +2835,20 @@ msgid "Import Scene" msgstr "Importer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importerer Scene.." +msgid "Importing Scene..." +msgstr "Importerer Scene..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Generering af lightmaps" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Generering til Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Kører Brugerdefineret Script.." +msgid "Running Custom Script..." +msgstr "Kører Brugerdefineret Script..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2870,8 +2863,8 @@ msgid "Error running post-import script:" msgstr "Fejl ved kørsel af efter-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Gemmer.." +msgid "Saving..." +msgstr "Gemmer..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2890,8 +2883,8 @@ msgid "Import As:" msgstr "Importer Som:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Forudindstillet.." +msgid "Preset..." +msgstr "Forudindstillet..." #: editor/import_dock.cpp msgid "Reimport" @@ -2981,21 +2974,21 @@ msgstr "Fjern Animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "FEJL: Ugyldig animationsnavn!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "FEJL: Animationsnavn eksisterer allerede!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "" +msgstr "Omdøb animation" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "" +msgstr "Tilføj animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" @@ -3007,19 +3000,19 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" -msgstr "" +msgstr "Indlæs animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "" +msgstr "Lav en kopi af animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "" +msgstr "FEJL: Der er ingen animation der kan kopieres!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" -msgstr "" +msgstr "FEJL: Ingen animationsressource i udklipsholder!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -3031,31 +3024,31 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to edit!" -msgstr "" +msgstr "FEJL: Der er ingen animation som kan redigeres!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "" +msgstr "Afspil valgte animation baglæns fra nuværende position. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "" +msgstr "Afspil valgt animation baglæns fra slutningen. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "" +msgstr "Stop animation afspilning. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "" +msgstr "Afspil valgt animation fra start. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "" +msgstr "Afspil valgt animation fra nuværende position. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." -msgstr "" +msgstr "Animationsposition (i sekunder)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." @@ -3310,7 +3303,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3318,7 +3311,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3387,7 +3380,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3454,7 +3447,7 @@ msgid "Site:" msgstr "Websted:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Støtte..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3642,6 +3635,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4065,7 +4059,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4272,7 +4266,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4638,7 +4632,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4737,7 +4731,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4944,15 +4938,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5405,11 +5399,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5662,7 +5652,7 @@ msgid "Remove All" msgstr "Fjern Alt" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5730,7 +5720,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5856,7 +5846,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5920,7 +5910,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6011,6 +6001,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ugyldigt navn." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunne ikke oprette mappe." @@ -6201,8 +6196,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6230,7 +6225,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6415,7 +6410,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6511,11 +6506,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6686,7 +6681,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/de.po b/editor/translations/de.po index 2087c7f4b6..c09b11bda1 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -12,9 +12,11 @@ # CitrusEdition <mariankloesler@web.de>, 2017. # danjo <atze@libra.uberspace.de>, 2016. # Eurocloud KnowHow <tobias.kloy@werde-volunteer.info>, 2017. +# HugeGameArt <hugegameartgd@gmail.com>, 2018. # hyperglow <greensoma@web.de>, 2016. # Jan Groß <jan@grossit.de>, 2016. # Kim <github@aggsol.de>, 2017. +# Metin Celik <metincelik88@gmail.com>, 2018. # Neicul <neicul@gmx.de>, 2018. # Oliver Ruehl <oliver@ruehldesign.co>, 2016-2017. # Paul-Vincent Roll <paviro@me.com>, 2016. @@ -30,8 +32,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-18 15:38+0000\n" -"Last-Translator: Neicul <neicul@gmx.de>\n" +"PO-Revision-Date: 2018-05-24 15:37+0000\n" +"Last-Translator: Metin Celik <metincelik88@gmail.com>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -520,8 +522,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' von '%s' trennen" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Verbinden.." +msgid "Connect..." +msgstr "Verbinden..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -946,12 +948,12 @@ msgid "Move Audio Bus" msgstr "Audiobus verschieben" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Audiobus-Layout speichern als.." +msgid "Save Audio Bus Layout As..." +msgstr "Audiobus-Layout speichern als..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Speicherort für neues Layout.." +msgid "Location for New Layout..." +msgstr "Speicherort für neues Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1092,11 +1094,11 @@ msgid "Updating Scene" msgstr "Aktualisiere Szene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Speichere lokale Änderungen.." +msgid "Storing local changes..." +msgstr "Speichere lokale Änderungen..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Aktualisiere Szene..." #: editor/editor_data.cpp @@ -1165,8 +1167,8 @@ msgid "Show In File Manager" msgstr "Zeige im Dateimanager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Neuer Ordner.." +msgid "New Folder..." +msgstr "Neuer Ordner..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1427,19 +1429,19 @@ msgstr "Ausgabe löschen" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt-Export ist fehlgeschlagen mit Fehlercode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Fehler beim speichern der Ressource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Speichere Ressource als.." +msgid "Save Resource As..." +msgstr "Speichere Ressource als..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Verstehe..." #: editor/editor_node.cpp @@ -1671,12 +1673,12 @@ msgid "Open Base Scene" msgstr "Basisszene öffnen" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Schnell Szenen öffnen.." +msgid "Quick Open Scene..." +msgstr "Schnell Szenen öffnen..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Schnell Skripte öffnen.." +msgid "Quick Open Script..." +msgstr "Schnell Skripte öffnen..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1687,8 +1689,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Änderungen in ‚%s‘ vor dem Schließen speichern?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Szene speichern als.." +msgid "Save Scene As..." +msgstr "Szene speichern als..." #: editor/editor_node.cpp msgid "No" @@ -1741,8 +1743,8 @@ msgstr "" "Diese Aktion kann nicht rückgängig gemacht werden. Trotzdem zurücksetzen?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Schnell Szene starten.." +msgid "Quick Run Scene..." +msgstr "Schnell Szene starten..." #: editor/editor_node.cpp msgid "Quit" @@ -1905,8 +1907,8 @@ msgid "Previous tab" msgstr "Vorheriger Tab" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Dateien filtern.." +msgid "Filter Files..." +msgstr "Dateien filtern..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1917,12 +1919,12 @@ msgid "New Scene" msgstr "Neue Szene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Neue gererbte Szene.." +msgid "New Inherited Scene..." +msgstr "Neue geerbte Szene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Szene öffnen.." +msgid "Open Scene..." +msgstr "Szene öffnen..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1941,16 +1943,16 @@ msgid "Open Recent" msgstr "Zuletzt benutzte Szenen" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Umwandeln zu.." +msgid "Convert To..." +msgstr "Umwandeln zu..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2214,8 +2216,8 @@ msgid "Save the currently edited resource." msgstr "Speichere die so eben bearbeitete Ressource." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Speichern als.." +msgid "Save As..." +msgstr "Speichern als..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2323,8 +2325,8 @@ msgid "Creating Mesh Previews" msgstr "Mesh-Vorschauen erzeugen" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Vorschau.." +msgid "Thumbnail..." +msgstr "Vorschau..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2476,7 +2478,7 @@ msgid "(Current)" msgstr "(Aktuell)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Mirrors werden geladen, bitte warten..." #: editor/export_template_manager.cpp @@ -2554,8 +2556,8 @@ msgid "Error requesting url: " msgstr "Fehler beim Abrufen der URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Verbinde mit Mirror.." +msgid "Connecting to Mirror..." +msgstr "Verbinde mit Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2571,8 +2573,8 @@ msgstr "Kann nicht aufgelöst werden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Verbinde.." +msgid "Connecting..." +msgstr "Verbinde..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2584,8 +2586,8 @@ msgstr "Verbunden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Frage an.." +msgid "Requesting..." +msgstr "Frage an..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2721,12 +2723,12 @@ msgid "Collapse all" msgstr "Alle einklappen" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Umbenennen.." +msgid "Rename..." +msgstr "Umbenennen..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Verschiebe zu.." +msgid "Move To..." +msgstr "Verschiebe zu..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2737,16 +2739,16 @@ msgid "Instance" msgstr "Instanz" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Abhängigkeiten bearbeiten.." +msgid "Edit Dependencies..." +msgstr "Abhängigkeiten bearbeiten..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Zeige Besitzer.." +msgid "View Owners..." +msgstr "Zeige Besitzer..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplizieren.." +msgid "Duplicate..." +msgstr "Duplizieren..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2771,10 +2773,10 @@ msgstr "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes. #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Lese Dateien,\n" -"Bitte warten.." +"Bitte warten..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2839,8 +2841,8 @@ msgid "Import Scene" msgstr "Szene importieren" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Szene wird importiert.." +msgid "Importing Scene..." +msgstr "Szene wird importiert..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2851,8 +2853,8 @@ msgid "Generating for Mesh: " msgstr "Generierung für Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Angepasstes Skript wird ausgeführt.." +msgid "Running Custom Script..." +msgstr "Angepasstes Skript wird ausgeführt..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2867,8 +2869,8 @@ msgid "Error running post-import script:" msgstr "Fehler beim ausführen des Post-Import Skripts:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Speichere.." +msgid "Saving..." +msgstr "Speichere..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2887,8 +2889,8 @@ msgid "Import As:" msgstr "Importiere als:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Voreinstellungen.." +msgid "Preset..." +msgstr "Voreinstellungen..." #: editor/import_dock.cpp msgid "Reimport" @@ -3305,16 +3307,16 @@ msgid "Transition Node" msgstr "Übergangs-Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animationen importieren.." +msgid "Import Animations..." +msgstr "Animationen importieren..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Nodefilter bearbeiten" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filter.." +msgid "Filters..." +msgstr "Filter..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3381,8 +3383,8 @@ msgid "Fetching:" msgstr "Hole:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Löse auf.." +msgid "Resolving..." +msgstr "Löse auf..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3448,8 +3450,8 @@ msgid "Site:" msgstr "Seite:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Stabilität.." +msgid "Support..." +msgstr "Stabilität..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3648,6 +3650,7 @@ msgid "Use Rotation Snap" msgstr "Rotationsraster benutzen" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Einrasten konfigurieren..." @@ -3745,14 +3748,12 @@ msgid "Show Guides" msgstr "Hilfslinien anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "Zeige Ursprung" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Eine Ansicht" +msgstr "Zeige Ansichtsfenster (Viewport)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4046,7 +4047,7 @@ msgstr "Mesh hat keine Oberfläche von der Umrisse erzeugt werden könnten!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Mesh primitive type ist nicht PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4077,8 +4078,8 @@ msgid "Create Convex Collision Sibling" msgstr "Konvexes Kollisionselement erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Umriss-Mesh erzeugen.." +msgid "Create Outline Mesh..." +msgstr "Umriss-Mesh erzeugen..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4285,8 +4286,8 @@ msgid "Error loading image:" msgstr "Fehler beim Laden des Bilds:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Keine Pixel mit einer Transparenz > 128 im Bild.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Keine Pixel mit einer Transparenz > 128 im Bild..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4646,8 +4647,8 @@ msgid "Import Theme" msgstr "Motiv importieren" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Motiv speichern als.." +msgid "Save Theme As..." +msgstr "Motiv speichern als..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4743,8 +4744,8 @@ msgstr "Seitenleiste umschalten" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Finde.." +msgid "Find..." +msgstr "Finde..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4953,16 +4954,16 @@ msgid "Find Previous" msgstr "Finde Vorheriges" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Ersetzen.." +msgid "Replace..." +msgstr "Ersetzen..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Springe zu Funktion.." +msgid "Goto Function..." +msgstr "Springe zu Funktion..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Springe zu Zeile.." +msgid "Goto Line..." +msgstr "Springe zu Zeile..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5415,12 +5416,8 @@ msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Einrasten konfigurieren.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Transformationsdialog.." +msgid "Transform Dialog..." +msgstr "Transformationsdialog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5672,8 +5669,8 @@ msgid "Remove All" msgstr "Alles entfernen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Thema bearbeiten.." +msgid "Edit theme..." +msgstr "Thema bearbeiten..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5720,14 +5717,12 @@ msgid "Checked Item" msgstr "Überprüftes Element" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Element hinzufügen" +msgstr "Element der Auswahl" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Überprüftes Element" +msgstr "Markiertes Element der Auswahl" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5742,7 +5737,8 @@ msgid "Options" msgstr "Optionen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Enthalten,Viele,Einige,Optionen!" #: editor/plugins/theme_editor_plugin.cpp @@ -5934,8 +5930,8 @@ msgid "Presets" msgstr "Vorlagen" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Hinzufügen.." +msgid "Add..." +msgstr "Hinzufügen..." #: editor/project_export.cpp msgid "Resources" @@ -6028,6 +6024,11 @@ msgid "Imported Project" msgstr "Importiertes Projekt" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Projektname:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Ordner konnte nicht erstellt werden." @@ -6229,10 +6230,13 @@ msgid "Mouse Button" msgstr "Maustaste" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Ungültiger Aktionsname. Er kann weder leer sein, noch kann er '/', ':', '=', " +"'\\' oder '\"' enthalten" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6259,8 +6263,8 @@ msgid "Control+" msgstr "Steuerung+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Drücke eine Taste.." +msgid "Press a Key..." +msgstr "Drücke eine Taste..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6443,8 +6447,8 @@ msgid "Property:" msgstr "Eigenschaft:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Überschreiben für.." +msgid "Override For..." +msgstr "Überschreiben für..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6539,12 +6543,12 @@ msgid "Easing Out-In" msgstr "Glätten Aus-Ein" #: editor/property_editor.cpp -msgid "File.." -msgstr "Datei.." +msgid "File..." +msgstr "Datei..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Verzeichnis.." +msgid "Dir..." +msgstr "Verzeichnis..." #: editor/property_editor.cpp msgid "Assign" @@ -6719,8 +6723,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Diese Aktion kann nicht auf instantiierten Szenen ausgeführt werden." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Speichere neue Szene als.." +msgid "Save New Scene As..." +msgstr "Speichere neue Szene als..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7439,7 +7443,7 @@ msgstr "Auswahlradius:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Der Klassenname kann nicht ein reserviertes Schlüsselwort sein" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8164,7 +8168,7 @@ msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Spatial-Node verweisen." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "Ein WorldEnvironment benötigt eine Environment-Ressource." #: scene/3d/scenario_fx.cpp msgid "" @@ -8178,6 +8182,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Dieses WorldEnvironment wird ignoriert. Entweder füge eine Kamera (für 3D-" +"Szenen) hinzu oder setze den Hintergrund-Modus des Environments nach Canvas " +"(für 2D-Szenen)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8457,7 +8464,7 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Exporting for %s" #~ msgstr "Exportiere für %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Bereite vor..." #~ msgid "Error loading scene." @@ -8520,8 +8527,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Neuimport.." +#~ msgid "Re-Import..." +#~ msgstr "Neuimport..." #~ msgid "No bit masks to import!" #~ msgstr "Keine Bitmasken zu importieren!" @@ -8915,14 +8922,14 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Zoom (%):" #~ msgstr "Vergrößerung (%):" -#~ msgid "Skeleton.." -#~ msgstr "Skelett.." +#~ msgid "Skeleton..." +#~ msgstr "Skelett..." #~ msgid "Zoom Reset" #~ msgstr "Vergrößerung zurücksetzen" -#~ msgid "Zoom Set.." -#~ msgstr "Vergrößerung setzen.." +#~ msgid "Zoom Set..." +#~ msgstr "Vergrößerung setzen..." #~ msgid "Set a Value" #~ msgstr "Einen Wert setzen" @@ -9392,8 +9399,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Export Project PCK" #~ msgstr "Exportiere Projekt-PCK" -#~ msgid "Export.." -#~ msgstr "Exportieren.." +#~ msgid "Export..." +#~ msgstr "Exportieren..." #~ msgid "Project Export" #~ msgstr "Projekt exportieren" @@ -9458,8 +9465,8 @@ msgstr "Ungültige Schriftgröße." #~ msgid "Method In Node:" #~ msgstr "Methode in Node:" -#~ msgid "Edit Connections.." -#~ msgstr "Bearbeite Verbindungen.." +#~ msgid "Edit Connections..." +#~ msgstr "Bearbeite Verbindungen..." #~ msgid "Plugin List:" #~ msgstr "Plugin Liste:" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index ea942bb7c2..26f824bc4b 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -916,11 +916,11 @@ msgid "Move Audio Bus" msgstr "Bild bewegen/einfügen" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1056,11 +1056,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1130,7 +1130,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1394,12 +1394,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1608,11 +1608,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1625,7 +1625,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1680,7 +1680,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1828,7 +1828,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1840,11 +1840,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1865,15 +1865,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2123,7 +2123,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2235,7 +2235,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2386,7 +2386,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2465,7 +2465,7 @@ msgstr "Szene kann nicht gespeichert werden." #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Connections editieren" #: editor/export_template_manager.cpp @@ -2483,7 +2483,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "Connections editieren" #: editor/export_template_manager.cpp @@ -2498,7 +2498,7 @@ msgstr "Verbindung zu Node:" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2639,11 +2639,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2656,16 +2656,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Node(s) duplizieren" #: editor/filesystem_dock.cpp @@ -2691,7 +2691,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2757,7 +2757,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2769,7 +2769,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2785,7 +2785,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2806,7 +2806,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3231,7 +3231,7 @@ msgid "Transition Node" msgstr "Transition-Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3239,7 +3239,7 @@ msgid "Edit Node Filters" msgstr "Node Filter editieren" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3310,7 +3310,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3378,7 +3378,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3571,6 +3571,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3998,7 +3999,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4206,7 +4207,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4575,7 +4576,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4672,7 +4673,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4881,15 +4882,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5347,11 +5348,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5607,7 +5604,7 @@ msgid "Remove All" msgstr "Ungültige Bilder löschen" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5675,7 +5672,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5865,7 +5862,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5961,6 +5958,11 @@ msgstr "Importierte Projekte" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Projektname:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Node erstellen" @@ -6157,8 +6159,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6186,8 +6188,8 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Taste drücken.." +msgid "Press a Key..." +msgstr "Taste drücken..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6373,7 +6375,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6470,11 +6472,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6651,7 +6653,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Das funktioniert nicht bei einer instanzierten Szene." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Neue Szene speichern als..." #: editor/scene_tree_dock.cpp diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 687c517180..1cb31e0ee9 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -3491,6 +3491,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -5240,10 +5241,6 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap..." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." msgstr "" @@ -5565,7 +5562,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5843,6 +5840,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6029,8 +6030,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp diff --git a/editor/translations/el.po b/editor/translations/el.po index 2bf8d790ab..ad2eb41c4d 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-03-05 16:04+0000\n" +"PO-Revision-Date: 2018-05-20 09:37+0000\n" "Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.20-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -498,8 +498,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "ΑποσÏνδεση του '%s' απο το '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "ΣÏνδεση.." +msgid "Connect..." +msgstr "ΣÏνδεση..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -919,12 +919,12 @@ msgid "Move Audio Bus" msgstr "Μετακίνηση διαÏλου ήχου" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Αποθήκευση διάταξης διαÏλων ήχου ÏŽÏ‚.." +msgid "Save Audio Bus Layout As..." +msgstr "Αποθήκευση διάταξης διαÏλων ήχου ÏŽÏ‚..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Τοποθεσία για νÎα διάταξη.." +msgid "Location for New Layout..." +msgstr "Τοποθεσία για νÎα διάταξη..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1061,12 +1061,12 @@ msgid "Updating Scene" msgstr "ΕνημÎÏωση σκηνής" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Αποθήκευση τοπικών αλλαγών.." +msgid "Storing local changes..." +msgstr "Αποθήκευση τοπικών αλλαγών..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "ΕνημÎÏωση σκηνής.." +msgid "Updating scene..." +msgstr "ΕνημÎÏωση σκηνής..." #: editor/editor_data.cpp msgid "[empty]" @@ -1134,7 +1134,7 @@ msgid "Show In File Manager" msgstr "Εμφάνιση στη διαχείÏιση αÏχείων" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "ÎÎος φάκελος" #: editor/editor_file_dialog.cpp @@ -1396,20 +1396,20 @@ msgstr "ΕκκαθάÏιση εξόδου" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Η εξαγωγή του ÎÏγου απÎτυχε με κωδικό %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Σφάλμα κατά την αποθήκευση πόÏου!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Αποθήκευση πόÏου ως.." +msgid "Save Resource As..." +msgstr "Αποθήκευση πόÏου ως..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Εντάξει.." +msgid "I see..." +msgstr "Εντάξει..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1643,11 +1643,11 @@ msgid "Open Base Scene" msgstr "Άνοιγμα σκηνής βάσης" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "ΓÏήγοÏο άνοιγμα σκηνής..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "ΓÏήγοÏη άνοιγμα δεσμής ενεÏγειών..." #: editor/editor_node.cpp @@ -1659,7 +1659,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Αποθήκευση αλλαγών στο '%s' Ï€Ïιν το κλείσιμο;" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Αποθήκευση σκηνή ως..." #: editor/editor_node.cpp @@ -1714,7 +1714,7 @@ msgstr "" "επαναφοÏά;" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "ΓÏήγοÏη εκτÎλεση σκηνής..." #: editor/editor_node.cpp @@ -1877,7 +1877,7 @@ msgid "Previous tab" msgstr "Î ÏοηγοÏμενη καÏÏ„Îλα" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "ΦιλτÏάÏισμα αÏχείων..." #: editor/editor_node.cpp @@ -1889,12 +1889,12 @@ msgid "New Scene" msgstr "ÎÎα σκηνή" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "ÎÎα κληÏονομημÎνη σκηνή.." +msgid "New Inherited Scene..." +msgstr "ÎÎα κληÏονομημÎνη σκηνή..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Άνοιγμα σκηνής.." +msgid "Open Scene..." +msgstr "Άνοιγμα σκηνής..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1913,15 +1913,15 @@ msgid "Open Recent" msgstr "Άνοιγμα Ï€Ïόσφατων" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "ΜετατÏοπή σε..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "Βιβλιοθήκη πλεγμάτων..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2186,7 +2186,7 @@ msgid "Save the currently edited resource." msgstr "Αποθήκευσε το Ï„ÏÎχων επεξεÏγαζόμενο πόÏο." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Αποθήκευση ως..." #: editor/editor_node.cpp @@ -2295,8 +2295,8 @@ msgid "Creating Mesh Previews" msgstr "ΔημιουÏγία Ï€Ïοεπισκοπήσεων πλεγμάτων" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "ΜικÏογÏαφία.." +msgid "Thumbnail..." +msgstr "ΜικÏογÏαφία..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2448,8 +2448,8 @@ msgid "(Current)" msgstr "(ΤÏÎχων)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Ανάκτηση δεδοÎνων κατοπτÏισμοÏ, παÏακαλώ πεÏιμÎνετε.." +msgid "Retrieving mirrors, please wait..." +msgstr "Ανάκτηση δεδοÎνων κατοπτÏισμοÏ, παÏακαλώ πεÏιμÎνετε..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2526,8 +2526,8 @@ msgid "Error requesting url: " msgstr "Σφάλμα κατά Ï„o αίτημα για διεÏθηνση url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ΣÏνδεση σε διακομιστή κατοπτÏισμοÏ.." +msgid "Connecting to Mirror..." +msgstr "ΣÏνδεση σε διακομιστή κατοπτÏισμοÏ..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2543,8 +2543,8 @@ msgstr "Δεν είναι δυνατή η επίλυση" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "ΣÏνδεση.." +msgid "Connecting..." +msgstr "ΣÏνδεση..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2556,8 +2556,8 @@ msgstr "ΣυνδÎθηκε" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Γίνεται αίτημα.." +msgid "Requesting..." +msgstr "Γίνεται αίτημα..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2693,11 +2693,11 @@ msgid "Collapse all" msgstr "ΣÏμπτηξη όλων" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Μετονομασία..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Μετακίνηση σε" #: editor/filesystem_dock.cpp @@ -2709,15 +2709,15 @@ msgid "Instance" msgstr "Στιγμιότυπο" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "ΕπεξεÏγασία εξαÏτήσεων" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Î Ïοβολή ιδιοκτητών" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "ΑναπαÏαγωγή" #: editor/filesystem_dock.cpp @@ -2745,10 +2745,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ΣάÏωση αÏχείων,\n" -"ΠαÏακαλώ πεÏιμÎνετε.." +"ΠαÏακαλώ πεÏιμÎνετε..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2813,7 +2813,7 @@ msgid "Import Scene" msgstr "Εισαγωγή σκηνής" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Εισαγωγή σκηνής..." #: editor/import/resource_importer_scene.cpp @@ -2825,7 +2825,7 @@ msgid "Generating for Mesh: " msgstr "ΔημιουÏία για πλÎγμα: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "ΕκτÎλεση Ï€ÏοσαÏμοσμÎνης δÎσμης ενεÏγειών..." #: editor/import/resource_importer_scene.cpp @@ -2843,7 +2843,7 @@ msgid "Error running post-import script:" msgstr "Σφάλμα κατά την εκτÎλεση της δÎσμης ενεÏγειών μετ-εισαγωγής:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Αποθήκευση..." #: editor/import_dock.cpp @@ -2863,7 +2863,7 @@ msgid "Import As:" msgstr "Εισαγωγή ÏŽÏ‚:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "ΔιαμόÏφωση..." #: editor/import_dock.cpp @@ -3281,16 +3281,16 @@ msgid "Transition Node" msgstr "Κόμβος μετάβασης" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Εισαγωγή κινήσεων.." +msgid "Import Animations..." +msgstr "Εισαγωγή κινήσεων..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "ΕπεξεÏγασία φίλτÏων κόμβων" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "ΦίλτÏα.." +msgid "Filters..." +msgstr "ΦίλτÏα..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3358,7 +3358,7 @@ msgid "Fetching:" msgstr "Λήψη:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Επίλυση..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3425,8 +3425,8 @@ msgid "Site:" msgstr "ΔιεÏθυνση:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "ΥποστήÏιξη.." +msgid "Support..." +msgstr "ΥποστήÏιξη..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3624,6 +3624,7 @@ msgid "Use Rotation Snap" msgstr "ΧÏήση κουμπώματος πεÏιστÏοφής" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ΔιαμόÏφωση κουμπώματος..." @@ -3720,14 +3721,12 @@ msgid "Show Guides" msgstr "Εμφάνιση οδηγών" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Î Ïοβολή ΑÏχής" +msgstr "Î Ïοβολή πηγής" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Οπτική γωνία" +msgstr "Î Ïοβολή οπτικής γωνίας" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4020,7 +4019,7 @@ msgstr "Το πλÎγμα δεν Îχει επιφάνει από την οποΠ#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "O Ï€ÏωταÏχικός Ï„Ïπος δεν είναι PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4051,8 +4050,8 @@ msgid "Create Convex Collision Sibling" msgstr "ΔημιουÏγία Î±Î´ÎµÎ»Ï†Î¿Ï ÏƒÏγκÏουσης κυÏÏ„Î¿Ï ÏƒÏŽÎ¼Î±Ï„Î¿Ï‚" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "ΔημιουÏγία πλÎγματος πεÏιγÏάμματος.." +msgid "Create Outline Mesh..." +msgstr "ΔημιουÏγία πλÎγματος πεÏιγÏάμματος..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4260,8 +4259,8 @@ msgid "Error loading image:" msgstr "Σφάλμα κατά την φόÏτωση εικόνας:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Δεν υπάÏχουν εικονοστοιχεία με διαφάνεια >128 στην εικόνα.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Δεν υπάÏχουν εικονοστοιχεία με διαφάνεια >128 στην εικόνα..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4621,8 +4620,8 @@ msgid "Import Theme" msgstr "Εισαγωγή θÎματος" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Αποθήκευση θÎματος ως.." +msgid "Save Theme As..." +msgstr "Αποθήκευση θÎματος ως..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4718,8 +4717,8 @@ msgstr "Εναλλαγή πλαισίου δεσμών ενεÏγειών" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "ΕÏÏεση.." +msgid "Find..." +msgstr "ΕÏÏεση..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4928,16 +4927,16 @@ msgid "Find Previous" msgstr "ΈυÏεση Ï€ÏοηγοÏμενου" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Αντικατάσταση.." +msgid "Replace..." +msgstr "Αντικατάσταση..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Πήγαινε σε συνάÏτηση.." +msgid "Goto Function..." +msgstr "Πήγαινε σε συνάÏτηση..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Πήγαινε σε γÏαμμή.." +msgid "Goto Line..." +msgstr "Πήγαινε σε γÏαμμή..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5392,12 +5391,8 @@ msgid "Transform" msgstr "Μετασχηματισμός" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ΔιαμόÏφωση κουμπώματος.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Διάλογος μετασχηματισμοÏ.." +msgid "Transform Dialog..." +msgstr "Διάλογος μετασχηματισμοÏ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5649,8 +5644,8 @@ msgid "Remove All" msgstr "ΑφαίÏεση όλων" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "ΕπεξεÏγασία θÎματος.." +msgid "Edit theme..." +msgstr "ΕπεξεÏγασία θÎματος..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5697,14 +5692,12 @@ msgid "Checked Item" msgstr "ΕπιλεγμÎνο στοιχείο" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Î Ïοσθήκη στοιχείου" +msgstr "Στοιχείο επιλογής" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "ΕπιλεγμÎνο στοιχείο" +msgstr "ΕπιλεγμÎνο στοιχείο επιλογής" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5719,7 +5712,8 @@ msgid "Options" msgstr "ΕπιλογÎÏ‚" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Έχει,ΠάÏα,ΠολλÎÏ‚,ΕπιλογÎÏ‚!" #: editor/plugins/theme_editor_plugin.cpp @@ -5912,8 +5906,8 @@ msgid "Presets" msgstr "ΔιαμοÏφώσεις" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Î Ïοσθήκη.." +msgid "Add..." +msgstr "Î Ïοσθήκη..." #: editor/project_export.cpp msgid "Resources" @@ -6007,6 +6001,11 @@ msgid "Imported Project" msgstr "ΕισαγμÎνο ÎÏγο" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Όνομα ÎÏγου:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." @@ -6189,7 +6188,7 @@ msgid "" "Would you like to explore the official example projects in the Asset Library?" msgstr "" "Δεν Îχετε κανÎνα ÎÏγο.\n" -"Θα θÎλατε να εξεÏευνήσετε μεÏικά παÏαδείγματα στην βιβλιοθήκη πόÏων;" +"ΘÎλετε να εξεÏευνήσετε μεÏικά παÏαδείγματα στην βιβλιοθήκη πόÏων;" #: editor/project_settings_editor.cpp msgid "Key " @@ -6208,10 +6207,13 @@ msgid "Mouse Button" msgstr "Κουμπί ποντικιοÏ" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"ΆκυÏο όνομα ενÎÏγειας. Δεν μποÏεί να είναι άδειο ή να πεÏιÎχει '/', ':', " +"'=', '\\' ή '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6238,8 +6240,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Πατήστε Îνα κουμπί.." +msgid "Press a Key..." +msgstr "Πατήστε Îνα κουμπί..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6422,7 +6424,7 @@ msgid "Property:" msgstr "Ιδιότητα:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "ΠαÏάκαμψη για..." #: editor/project_settings_editor.cpp @@ -6518,12 +6520,12 @@ msgid "Easing Out-In" msgstr "Ομαλή κίνηση από Îξω Ï€Ïος τα μÎσα" #: editor/property_editor.cpp -msgid "File.." -msgstr "ΑÏχείο.." +msgid "File..." +msgstr "ΑÏχείο..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Κατάλογος.." +msgid "Dir..." +msgstr "Κατάλογος..." #: editor/property_editor.cpp msgid "Assign" @@ -6699,8 +6701,8 @@ msgstr "" "δημιουÏγηθεί στιγμιότυπα." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Αποθήκευση νÎας σκηνής ως.." +msgid "Save New Scene As..." +msgstr "Αποθήκευση νÎας σκηνής ως..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7422,7 +7424,7 @@ msgstr "Επιλογή απόστασης:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Το όνομα της κλάσης δεν μποÏεί να είναι λÎξη-κλειδί" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8144,7 +8146,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "Το WorldEnvironment χÏειάζεται Îναν πόÏο Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8158,6 +8160,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Αυτό το WorldEnvironment θα αγνοηθεί. Î ÏοσθÎστε μια κάμεÏα (για 3d) ή οÏίστε " +"το Background Mode Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… πεÏιβάλλοντος σε Canvas (για 2d)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8431,8 +8435,8 @@ msgstr "Μη ÎγκυÏο μÎγεθος γÏαμματοσειÏάς." #~ msgid "Exporting for %s" #~ msgstr "Εξαγωγή για %s" -#~ msgid "Setting Up.." -#~ msgstr "ΑÏχικοποίηση.." +#~ msgid "Setting Up..." +#~ msgstr "ΑÏχικοποίηση..." #~ msgid "Error loading scene." #~ msgstr "Σφάλμα κατά τη φόÏτωση σκηνής." @@ -8494,7 +8498,7 @@ msgstr "Μη ÎγκυÏο μÎγεθος γÏαμματοσειÏάς." #~ msgid "Info" #~ msgstr "ΠληÏοφοÏίες" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Εκ νÎου εισαγωγή..." #~ msgid "No bit masks to import!" @@ -8894,14 +8898,14 @@ msgstr "Μη ÎγκυÏο μÎγεθος γÏαμματοσειÏάς." #~ msgid "Zoom (%):" #~ msgstr "ΜεγÎθυνση (%):" -#~ msgid "Skeleton.." -#~ msgstr "Σκελετός.." +#~ msgid "Skeleton..." +#~ msgstr "Σκελετός..." #~ msgid "Zoom Reset" #~ msgstr "ΕπαναφοÏά μεγÎθυνσης" -#~ msgid "Zoom Set.." -#~ msgstr "ΟÏισμός μεγÎθυνσης.." +#~ msgid "Zoom Set..." +#~ msgstr "ΟÏισμός μεγÎθυνσης..." #~ msgid "Set a Value" #~ msgstr "ΟÏισμός τιμής" diff --git a/editor/translations/es.po b/editor/translations/es.po index 86188201c1..405130c465 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -4,7 +4,7 @@ # This file is distributed under the same license as the Godot source code. # # Addiel Lucena Perez <addiell2017@gmail.com>, 2017. -# Aleix Sanchis <aleixsanchis@hotmail.com>, 2017. +# Aleix Sanchis <aleixsanchis@hotmail.com>, 2017, 2018. # Alejandro Alvarez <eliluminado00@gmail.com>, 2017. # Avocado <avocadosan42@gmail.com>, 2018. # BLaDoM GUY <simplybladom@gmail.com>, 2017. @@ -13,15 +13,17 @@ # David Couto <davidcouto@gmail.com>, 2017. # Dharkael <izhe@hotmail.es>, 2017. # Diego López <diegodario21@gmail.com>, 2017. +# eon-s <emanuel.segretin@gmail.com>, 2018. # Gustavo Leon <gleondiaz@gmail.com>, 2017-2018. # Javier Ocampos <xavier.ocampos@gmail.com>, 2018. +# Jose Maria Martinez <josemar1992@hotmail.com>, 2018. # Juan Quiroga <juanquiroga9@gmail.com>, 2017. # Kiji Pixel <raccoon.fella@gmail.com>, 2017. # Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017. # Lonsfor <lotharw@protonmail.com>, 2017-2018. # Mario Nachbaur <manachbaur@gmail.com>, 2018. # Oscar Carballal <oscar.carballal@protonmail.com>, 2017-2018. -# Rabid Orange <theorangerabid@gmail.com>, 2017. +# Rabid Orange <theorangerabid@gmail.com>, 2017, 2018. # Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. # Sebastian Silva <sebastian@fuentelibre.org>, 2016. # Swyter <swyterzone@gmail.com>, 2016-2017. @@ -32,7 +34,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-05-03 02:11+0000\n" +"PO-Revision-Date: 2018-06-01 00:44+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -53,11 +55,11 @@ msgstr "Toda la Selección" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "Cambiar el tiempo de la clave de animación" +msgstr "Cambiar el tiempo del Fotograma Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Cambiar transición de animación" +msgstr "Cambiar Transición de Animación" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -65,76 +67,76 @@ msgstr "Cambiar transformación de animación" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "Cambiar valor de la clave de animación" +msgstr "Cambiar valor del Fotograma Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Cambiar llamada de animación" +msgstr "Cambiar Llamada de Animación" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Añadir pista de animación" +msgstr "Añadir Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" -msgstr "Duplicar claves de animación" +msgstr "Duplicar Claves de Animación" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Subir pista de animación" +msgstr "Subir Pista de Animación" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Bajar pista de animación" +msgstr "Bajar Pista de Animación" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "Quitar pista de animación" +msgstr "Quitar Pista de Animación" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "Establecer transiciones en:" +msgstr "Establecer Transiciones en:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "Renombrar pista de animación" +msgstr "Renombrar Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" -msgstr "Cambiar interpolación de pista de animación" +msgstr "Cambiar Interpolación de Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "Cambiar modo de valor de pista de animación" +msgstr "Cambiar Modo de Valor de Pista de Animación" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" -msgstr "Cambiar modo de ciclo de pista de animación" +msgstr "Cambiar Modo de Ciclo de Pista de Animación" #: editor/animation_editor.cpp msgid "Edit Node Curve" -msgstr "Editar nodo de curva" +msgstr "Editar Nodo de Curva" #: editor/animation_editor.cpp msgid "Edit Selection Curve" -msgstr "Editar curva de selección" +msgstr "Editar Curva de Selección" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Borrar claves de animación" +msgstr "Borrar Claves de Animación" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "Duplicar selección" +msgstr "Duplicar Selección" #: editor/animation_editor.cpp msgid "Duplicate Transposed" -msgstr "Duplicar transpuesto" +msgstr "Duplicar Transpuesto" #: editor/animation_editor.cpp msgid "Remove Selection" -msgstr "Quitar selección" +msgstr "Quitar Selección" #: editor/animation_editor.cpp msgid "Continuous" @@ -150,15 +152,15 @@ msgstr "Trigger" #: editor/animation_editor.cpp msgid "Anim Add Key" -msgstr "Añadir clave de animación" +msgstr "Añadir Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Move Keys" -msgstr "Mover claves de animación" +msgstr "Mover Claves de Animación" #: editor/animation_editor.cpp msgid "Scale Selection" -msgstr "Escalar selección" +msgstr "Escalar Selección" #: editor/animation_editor.cpp msgid "Scale From Cursor" @@ -166,11 +168,11 @@ msgstr "Escalar desde cursor" #: editor/animation_editor.cpp msgid "Goto Next Step" -msgstr "Ir al siguiente paso" +msgstr "Ir al Siguiente Paso" #: editor/animation_editor.cpp msgid "Goto Prev Step" -msgstr "Ir al paso anterior" +msgstr "Ir al Paso Anterior" #: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -203,11 +205,11 @@ msgstr "Transiciones" #: editor/animation_editor.cpp msgid "Optimize Animation" -msgstr "Optimizar animación" +msgstr "Optimizar Animación" #: editor/animation_editor.cpp msgid "Clean-Up Animation" -msgstr "Limpiar animación" +msgstr "Limpiar Animación" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" @@ -235,19 +237,19 @@ msgstr "Insertar Pista y Clave de Animación" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "Insertar clave de Animación" +msgstr "Insertar Clave de Animación" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "Cambiar duración de Animación" +msgstr "Cambiar Duración de Animación" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "Cambiar bucle de Animación" +msgstr "Cambiar Bucle de Animación" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "Crear clave de valor tipado para Animación" +msgstr "Crear Clave de Valor Tipado para Animación" #: editor/animation_editor.cpp msgid "Anim Insert" @@ -275,7 +277,7 @@ msgstr "Duración de la Animación (en segundos)." #: editor/animation_editor.cpp msgid "Step (s):" -msgstr "Paso (s):" +msgstr "Paso(s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." @@ -307,7 +309,7 @@ msgstr "Herramientas de pistas" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "Editar claves individuales al hacer clic." +msgstr "Habilitar la edición de claves individuales al hacer clic." #: editor/animation_editor.cpp msgid "Anim. Optimizer" @@ -345,11 +347,11 @@ msgstr "Transición" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "Relación de Escalado:" +msgstr "Relación de Escala:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "¿Desde que nodo quieres realizar llamadas a funciones?" +msgstr "¿Desde que Nodo quieres realizar Llamadas a Funciones?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -441,19 +443,19 @@ msgstr "Columna:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "¡Debes establecer un método en el nodo seleccionado!" +msgstr "¡Debes establecer un método en el Nodo seleccionado!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"No se ha encontrado el método objetivo. Especifica un método válido o " -"adjunta un script en el Nodo objetivo." +"No se encontró el método del objetivo! Especifica un método válido o adjunta " +"un script al Nodo objetivo." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "Conectar a nodo:" +msgstr "Conectar a Nodo:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -478,7 +480,7 @@ msgstr "Argumentos extras de llamada:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "Ruta al nodo:" +msgstr "Ruta al Nodo:" #: editor/connections_dialog.cpp msgid "Make Function" @@ -490,7 +492,7 @@ msgstr "Diferido" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "Una vez" +msgstr "OneShot" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -516,15 +518,15 @@ msgstr "Conectar «%s» a «%s»" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "Conectando señal:" +msgstr "Conectando Señal:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Conectar.." +msgid "Connect..." +msgstr "Conectar..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -625,7 +627,7 @@ msgstr "Arreglar rota(s)" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "Editor de dependencias" +msgstr "Editor de Dependencias" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -716,7 +718,7 @@ msgstr "Eliminar" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "Cambiar Clave de Diccionario" +msgstr "Cambiar Clave del Diccionario" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" @@ -756,11 +758,11 @@ msgstr "Autores" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "Patrocinadores Platino" +msgstr "Patrocinadores Platinum" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "Patrocinadores Oro" +msgstr "Patrocinadores Gold" #: editor/editor_about.cpp msgid "Mini Sponsors" @@ -768,11 +770,11 @@ msgstr "Mini Patrocinadores" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "Donantes Oro" +msgstr "Donantes Gold" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "Donantes Plata" +msgstr "Donantes Silver" #: editor/editor_about.cpp msgid "Bronze Donors" @@ -946,12 +948,12 @@ msgid "Move Audio Bus" msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Guardar configuración de los Buses de Audio como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Ruta para nueva configuración.." +msgid "Location for New Layout..." +msgstr "Ubicación para Nueva Configuración..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1047,19 +1049,19 @@ msgstr "¡El fichero «%s» ya existe!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "Renombrar «Autoload»" +msgstr "Renombrar Autoload" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "Des/activar globales de «Autoload»" +msgstr "Des/Activar Globales de Autoload" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "Mover «Autoload»" +msgstr "Mover Autoload" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "Quitar «Autoload»" +msgstr "Quitar Autoload" #: editor/editor_autoload_settings.cpp msgid "Enable" @@ -1067,7 +1069,7 @@ msgstr "Activar" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "Reordenar «Autoloads»" +msgstr "Reordenar Autoloads" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp @@ -1076,7 +1078,7 @@ msgstr "Ruta:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "Nombre del nodo:" +msgstr "Nombre del Nodo:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1085,19 +1087,19 @@ msgstr "Nombre" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "«Singleton»" +msgstr "Singleton" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "Actualizando escena" +msgstr "Actualizando Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Guardando cambios locales.." +msgid "Storing local changes..." +msgstr "Guardando cambios locales..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Actualizando escena.." +msgid "Updating scene..." +msgstr "Actualizando escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1109,7 +1111,7 @@ msgstr "[no guardado]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "Por favor, primero seleccione un directorio base" +msgstr "Por favor, selecciona primero un directorio base" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1165,7 +1167,7 @@ msgid "Show In File Manager" msgstr "Mostrar en el navegador de archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Nueva carpeta..." #: editor/editor_file_dialog.cpp @@ -1427,20 +1429,20 @@ msgstr "Borrar salida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "La exportación del proyecto falló con el código de error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "¡Hubo un error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar recurso como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ya veo.." +msgid "I see..." +msgstr "Ya veo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1476,7 +1478,7 @@ msgstr "Error al cargar '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "Guardar escena" +msgstr "Guardar Escena" #: editor/editor_node.cpp msgid "Analyzing" @@ -1589,7 +1591,7 @@ msgstr "Expandir todas las propiedades" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "Colapsar todo" +msgstr "Ocultar todas las propiedades" #: editor/editor_node.cpp msgid "Copy Params" @@ -1613,7 +1615,7 @@ msgstr "Convertirlo en integrado" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "Hacer sub-recursos únicos" +msgstr "Creación de Subrecursos Únicos" #: editor/editor_node.cpp msgid "Open in Help" @@ -1665,31 +1667,31 @@ msgstr "¡No se pudo comenzar el subproceso!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "Abrir escena" +msgstr "Abrir Escena" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "Abrir escena base" +msgstr "Abrir Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Apertura rápida de escena.." +msgid "Quick Open Scene..." +msgstr "Apertura Rápida de Escena..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Apertura rápida de script.." +msgid "Quick Open Script..." +msgstr "Apertura Rápida de Script..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "Guardar & Cerrar" +msgstr "Guardar y Cerrar" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" msgstr "¿Guardar cambios de '%s' antes de cerrar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar escena como.." +msgid "Save Scene As..." +msgstr "Guardar Escena Como..." #: editor/editor_node.cpp msgid "No" @@ -1743,8 +1745,8 @@ msgstr "" "modos?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Ejecución rápida de escena.." +msgid "Quick Run Scene..." +msgstr "Ejecución Rápida de Escena..." #: editor/editor_node.cpp msgid "Quit" @@ -1782,7 +1784,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "Elige una escena principal" +msgstr "Elige una Escena Principal" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -1845,11 +1847,11 @@ msgstr "Limpiar Escenas Recientes" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "Guardar ajustes" +msgstr "Guardar Ajustes" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "Borrar ajustes" +msgstr "Borrar Ajustes" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -1858,7 +1860,7 @@ msgstr "Predeterminado" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Cambiar pestaña de escena" +msgstr "Cambiar Pestaña de Escena" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1886,11 +1888,11 @@ msgstr "Alternar modo sin distracciones." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "Añadir nueva Escena." +msgstr "Añadir nueva escena." #: editor/editor_node.cpp msgid "Scene" -msgstr "Escena" +msgstr "Escenas" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -1905,8 +1907,8 @@ msgid "Previous tab" msgstr "Pestaña anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrado de archivos.." +msgid "Filter Files..." +msgstr "Filtrado de Archivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1914,19 +1916,19 @@ msgstr "Operaciones con archivos de escena." #: editor/editor_node.cpp msgid "New Scene" -msgstr "Nueva escena" +msgstr "Nueva Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nueva escena heredada.." +msgid "New Inherited Scene..." +msgstr "Nueva Escena Heredada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir escena.." +msgid "Open Scene..." +msgstr "Abrir Escena..." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "Guardar escena" +msgstr "Guardar Escena" #: editor/editor_node.cpp msgid "Save all Scenes" @@ -1941,16 +1943,16 @@ msgid "Open Recent" msgstr "Abrir reciente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Convertir a.." +msgid "Convert To..." +msgstr "Convertir a..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "LibrerÃa de mallas.." +msgid "MeshLibrary..." +msgstr "LibrerÃa de mallas..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "\"TileSet\".." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1964,7 +1966,7 @@ msgstr "Rehacer" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "Revertir escena" +msgstr "Revertir Escena" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." @@ -1980,15 +1982,15 @@ msgstr "Ajustes del proyecto" #: editor/editor_node.cpp msgid "Run Script" -msgstr "Ejecutar script" +msgstr "Ejecutar Script" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "Export" +msgstr "Exportar" #: editor/editor_node.cpp msgid "Tools" -msgstr "Herramientas" +msgstr "Tools" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2087,15 +2089,15 @@ msgstr "" #: editor/editor_node.cpp msgid "Editor" -msgstr "Editor" +msgstr "El editor" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "Ajustes del editor" +msgstr "Ajustes del Editor" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "Ajustes de diseño del editor" +msgstr "Ajustes de Diseño del Editor" #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2213,8 +2215,8 @@ msgid "Save the currently edited resource." msgstr "Guardar el recurso editado actualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2243,11 +2245,11 @@ msgstr "Importar" #: editor/editor_node.cpp msgid "Node" -msgstr "Nodo" +msgstr "Nodos" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "SistDeArchivos" +msgstr "Sistema de Archivos" #: editor/editor_node.cpp msgid "Output" @@ -2263,7 +2265,7 @@ msgstr "Importar plantillas desde un archivo ZIP" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "Exportar proyecto" +msgstr "Exportar Proyecto" #: editor/editor_node.cpp msgid "Export Library" @@ -2283,7 +2285,7 @@ msgstr "Abrir y ejecutar un script" #: editor/editor_node.cpp msgid "New Inherited" -msgstr "Nueva escena heredada" +msgstr "Nueva Escena Heredada" #: editor/editor_node.cpp msgid "Load Errors" @@ -2322,8 +2324,8 @@ msgid "Creating Mesh Previews" msgstr "Creando vistas previas de las mallas" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2425,7 +2427,7 @@ msgstr "No se pudo instanciar el script:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "Has olvidado la palabra clave 'tool'?" +msgstr "¿Olvidaste la palabra clave 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2437,19 +2439,19 @@ msgstr "Te olvidaste del método '_run'?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "Predeterminado (Igual que el editor)" +msgstr "Predeterminado (Igual que el Editor)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Selecciona nodos a importar" +msgstr "Selecciona Nodos a importar" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "Ruta a la escena:" +msgstr "Ruta de la Escena:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "Importar desde nodo:" +msgstr "Importar desde Nodo:" #: editor/export_template_manager.cpp msgid "Re-Download" @@ -2476,7 +2478,7 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Obteniendo mirrors, por favor espere..." #: editor/export_template_manager.cpp @@ -2554,8 +2556,8 @@ msgid "Error requesting url: " msgstr "Error al solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Intentando conexión alternativa.." +msgid "Connecting to Mirror..." +msgstr "Intentando conexión alternativa..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2571,8 +2573,8 @@ msgstr "No se puede resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2584,8 +2586,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2722,32 +2724,32 @@ msgid "Collapse all" msgstr "Colapsar todo" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renombrar.." +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover a.." +msgid "Move To..." +msgstr "Mover a..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "Abrir escena/s" +msgstr "Abrir Escena(s)" #: editor/filesystem_dock.cpp msgid "Instance" msgstr "Instanciar" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar dependencias.." +msgid "Edit Dependencies..." +msgstr "Editar Dependencias..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver propietarios.." +msgid "View Owners..." +msgstr "Ver Propietarios..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplicar.." +msgid "Duplicate..." +msgstr "Duplicar..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2759,7 +2761,7 @@ msgstr "Carpeta siguiente" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "Reanalizar sistema de archivos" +msgstr "Reanalizar Sistema de Archivos" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" @@ -2773,7 +2775,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Escaneando archivos,\n" "Por favor, espere..." @@ -2841,8 +2843,8 @@ msgid "Import Scene" msgstr "Importar escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando escena.." +msgid "Importing Scene..." +msgstr "Importando Escena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2853,8 +2855,8 @@ msgid "Generating for Mesh: " msgstr "Generando para modelo: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Ejecutando script personalizado.." +msgid "Running Custom Script..." +msgstr "Ejecutando Script Personalizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2870,8 +2872,8 @@ msgid "Error running post-import script:" msgstr "Error ejecutando el script de posimportacion:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Guardando.." +msgid "Saving..." +msgstr "Guardando..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2890,8 +2892,8 @@ msgid "Import As:" msgstr "Importar como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ajuste.." +msgid "Preset..." +msgstr "Ajuste..." #: editor/import_dock.cpp msgid "Reimport" @@ -2907,7 +2909,7 @@ msgstr "Grupos" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." -msgstr "Selecciona un nodo para editar señales y grupos." +msgstr "Selecciona un Nodo para editar Señales y Grupos." #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -2946,9 +2948,9 @@ msgid "" "RMB: Erase Point." msgstr "" "Editar polÃgono existente:\n" -"Click izquierdo: Mover punto.\n" -"Control + Click izquierdo: Dividir segmento.\n" -"Click derecho: Borrar punto." +"Clic izquierdo: Mover punto.\n" +"Control + Clic izquierdo: Dividir segmento.\n" +"Clic derecho: Borrar punto." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" @@ -3085,7 +3087,7 @@ msgstr "Mostrar la lista de animaciones en el reproductor." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "Autoreproducir al cargar" +msgstr "Autoreproducir al Cargar" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" @@ -3206,7 +3208,7 @@ msgstr "Mezcla" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix" -msgstr "Mezclar" +msgstr "Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Auto Restart:" @@ -3251,7 +3253,7 @@ msgstr "Actual:" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Add Input" -msgstr "Añadir entrada" +msgstr "Añadir Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Clear Auto-Advance" @@ -3263,7 +3265,7 @@ msgstr "Establecer autoavanzar" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Delete Input" -msgstr "Eliminar entrada" +msgstr "Eliminar Entrada" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation tree is valid." @@ -3275,15 +3277,15 @@ msgstr "El árbol de animación no es correcto." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Nodo de animación" +msgstr "Nodo de Animación" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "Nodo UnaVez" +msgstr "Nodo OneShot" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Nodo Mezcla" +msgstr "Nodo Mix" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" @@ -3299,7 +3301,7 @@ msgstr "Nodo Blend4" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "Nodo TimeScale (Escala de tiempo)" +msgstr "Nodo TimeScale" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" @@ -3307,19 +3309,19 @@ msgstr "Nodo TimeSeek" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Nodo de transición" +msgstr "Nodo Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importar animaciones.." +msgid "Import Animations..." +msgstr "Importar Animaciones..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Editar filtros de nodo" +msgstr "Editar Filtros de Nodo" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtros.." +msgid "Filters..." +msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3386,7 +3388,7 @@ msgid "Fetching:" msgstr "Buscando:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Resolviendo..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3453,8 +3455,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." +msgid "Support..." +msgstr "Soporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3508,12 +3510,12 @@ msgstr "Configurar ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset:" -msgstr "Desplazamiento de rejilla:" +msgstr "Desplazamiento de CuadrÃcula:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Step:" -msgstr "Pasos de rejilla:" +msgstr "Paso de CuadrÃcula:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -3521,7 +3523,7 @@ msgstr "Desplazamiento de rotación:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "Cantidad de rotaciones:" +msgstr "Cantidad de Rotaciones:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Pivot" @@ -3603,7 +3605,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt+Click Der.: Selección en listado de solapamientos" +msgstr "Alt + Clic Derecho: Selección en listado de solapamientos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3619,12 +3621,13 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Mostrar una lista de todos los objetos en la posición cliqueada\n" -"(igual que Alt+Click Der. en modo selección)." +"Mostrar una lista de todos los objetos en la posición en la que se ha hecho " +"clic\n" +"(igual que Alt + Clic Derecho en modo selección)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "Click para cambiar el pivote de rotación de un objeto." +msgstr "Haz clic para cambiar el pivote de rotación de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" @@ -3651,8 +3654,9 @@ msgid "Use Rotation Snap" msgstr "Ajustar rotación" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar CuadrÃcula..." +msgstr "Configurar Ajuste..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3672,7 +3676,7 @@ msgstr "Ajustar al padre" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" -msgstr "Ajustar al anclado del nodo" +msgstr "Ajustar al anclaje del nodo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node sides" @@ -3732,7 +3736,7 @@ msgstr "Ver" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Show Grid" -msgstr "Mostrar rejilla" +msgstr "Mostrar CuadrÃcula" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -3747,14 +3751,12 @@ msgid "Show Guides" msgstr "Mostrar guÃas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver origen" +msgstr "Ver Origen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 visor" +msgstr "Ver Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3774,11 +3776,11 @@ msgstr "Insertar claves" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Insertar clave" +msgstr "Insertar Clave" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Insertar clave (pistas existentes)" +msgstr "Insertar Clave (Pistas Existentes)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -3823,7 +3825,7 @@ msgstr "No se pueden instanciar varios nodos sin un nodo raÃz." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "Crear nodo" +msgstr "Crear Nodo" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -4049,7 +4051,7 @@ msgstr "¡La malla no tiene superficie de la que crear contornos!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "El tipo de la malla primitiva no es PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4080,8 +4082,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crear colisión hermanada convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crear contorno de malla.." +msgid "Create Outline Mesh..." +msgstr "Crear Contorno de Malla..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4227,7 +4229,7 @@ msgstr "Calculando tamaño de cuadrÃcula..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "Creando octree de luces (\"heigfield\")..." +msgstr "Creando heightfield..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." @@ -4251,7 +4253,7 @@ msgstr "Creando contornos..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "Crear malla 3D de contorno (\"polymesh\")..." +msgstr "Crear polymesh..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." @@ -4263,7 +4265,7 @@ msgstr "Configuración del Generador de Mallas de Navegación:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "Analizando geometrÃa..." +msgstr "Analizando GeometrÃa..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4288,8 +4290,8 @@ msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "No hay pÃxeles con transparencia > 128 en la imagen.." +msgid "No pixels with transparency > 128 in image..." +msgstr "No hay pÃxeles con transparencia > 128 en la imagen..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4331,11 +4333,11 @@ msgstr "Colores de emisión" #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry." -msgstr "El nodo no contiene geometrÃa." +msgstr "El nodo no posee geometrÃa." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "El nodo no contiene geometrÃa (caras)." +msgstr "El nodo no posee geometrÃa (caras)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -4359,7 +4361,7 @@ msgstr "Crear puntos de emisión desde malla" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "Crear puntos de emisión desde el nodo" +msgstr "Crear Puntos de Emisión desde el Nodo" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -4431,12 +4433,12 @@ msgstr "Mayús + arrastrar: Seleccionar puntos de control" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "Click: Añadir punto" +msgstr "Clic: Añadir Punto" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "Clic derecho: Eliminar punto" +msgstr "Clic Derecho: Eliminar Punto" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -4565,7 +4567,7 @@ msgstr "Habilitar fijado" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" -msgstr "Rejilla" +msgstr "CuadrÃcula" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -4649,8 +4651,8 @@ msgid "Import Theme" msgstr "Importar tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Guardar tema como.." +msgid "Save Theme As..." +msgstr "Guardar Tema Como..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4746,8 +4748,8 @@ msgstr "Alternar panel de scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Buscar.." +msgid "Find..." +msgstr "Buscar..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4856,7 +4858,7 @@ msgstr "Minúscula" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "Letra Capital" +msgstr "Poner en mayúsculas" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4920,7 +4922,7 @@ msgstr "Convertir Indentación a Espacios" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Tabs" -msgstr "Convertir indentación a tabuladores" +msgstr "Convertir Indentación a Tabuladores" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -4956,16 +4958,16 @@ msgid "Find Previous" msgstr "Buscar anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Reemplazar.." +msgid "Replace..." +msgstr "Reemplazar..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ir a función.." +msgid "Goto Function..." +msgstr "Ir a función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ir a lÃnea.." +msgid "Goto Line..." +msgstr "Ir a lÃnea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -4973,7 +4975,7 @@ msgstr "Ayuda contextual" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "\"Shader\"" +msgstr "Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" @@ -5073,11 +5075,11 @@ msgstr "Desconectar Nodos Gráficos" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" -msgstr "Borrar Nodo Gráfico de Shader" +msgstr "Eliminar el Nodo Gráfico del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Move Shader Graph Node" -msgstr "Mover Nodo Gráfico de Shader" +msgstr "Mover el Nodo Gráfico del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" @@ -5085,7 +5087,7 @@ msgstr "Duplicar Nodo(s) Gráfico" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" -msgstr "Borrar Nodo(s) Gráfico(s) de Shader" +msgstr "Eliminar Nodo(s) Gráfico(s) del Shader" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" @@ -5097,7 +5099,7 @@ msgstr "Error: Conexiones de Entrada Faltantes" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" -msgstr "Añadir nodo gráfico de Shader" +msgstr "Añadir Nodo Gráfico del Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5125,7 +5127,7 @@ msgstr "Transformación en el eje Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Ver transformación en plano." +msgstr "Ver Transformación de Plano." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -5145,7 +5147,7 @@ msgstr "Insertar claves está desactivado (no se insertaron claves)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "Clave de animación insertada." +msgstr "Clave de Animación Insertada." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -5157,7 +5159,7 @@ msgstr "Cambios del material" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" -msgstr "Cambios del shader" +msgstr "Cambios del Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" @@ -5177,11 +5179,11 @@ msgstr "FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Vista superior." +msgstr "Vista Superior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Vista inferior." +msgstr "Vista Inferior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -5189,7 +5191,7 @@ msgstr "Fondo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Vista izquierda." +msgstr "Vista Izquierda." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -5197,7 +5199,7 @@ msgstr "Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Vista derecha." +msgstr "Vista Derecha." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -5205,7 +5207,7 @@ msgstr "Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Vista frontal." +msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -5213,7 +5215,7 @@ msgstr "Frente" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Vista anterior." +msgstr "Vista Posterior." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -5281,31 +5283,31 @@ msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "Vista libre izquierda" +msgstr "Vista Libre Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "Vista libre derecha" +msgstr "Vista Libre Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Vista libre frente" +msgstr "Vista Libre Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vista libre atrás" +msgstr "Vista Libre Posterior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Vista libre arriba" +msgstr "Vista Libre Arriba" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Vista libre abajo" +msgstr "Vista Libre Abajo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "Modificador de velocidad de \"vista libre\"" +msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5323,7 +5325,7 @@ msgid "" msgstr "" "Arrastrar: Rotar\n" "Alt + Arrastrar: Mover\n" -"Alt + Click derecho: Selección en la lista de superposición" +"Alt + Clic Derecho: Selección en la lista de superposición" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5339,7 +5341,7 @@ msgstr "Modo escalado (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas locales" +msgstr "Coordenadas Locales" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5351,35 +5353,35 @@ msgstr "Modo de ajuste (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "Vista inferior" +msgstr "Vista Inferior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "Vista superior" +msgstr "Vista Superior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vista anterior" +msgstr "Vista Posterior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Vista frontal" +msgstr "Vista Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "Vista izquierda" +msgstr "Vista Izquierda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "Vista derecha" +msgstr "Vista Derecha" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "Intercambiar entre vista de perspectiva y ortogonal" +msgstr "Intercambiar vista Perspectiva/Ortogonal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "Insertar clave de animación" +msgstr "Insertar Clave de Animación" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" @@ -5411,23 +5413,19 @@ msgstr "Escalar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" -msgstr "Alternar vista libre" +msgstr "Activar Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "Transformar" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar ajuste.." +msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Ventana de transformación.." +msgid "Transform Dialog..." +msgstr "Ventana de transformación..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "1 visor" +msgstr "1 Viewport" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" @@ -5455,7 +5453,7 @@ msgstr "Ver origen" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "Ver rejilla" +msgstr "Ver CuadrÃcula" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -5484,7 +5482,7 @@ msgstr "Ajuste de escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "Ajustes del visor" +msgstr "Ajustes del Viewport" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" @@ -5592,7 +5590,7 @@ msgstr "Mover (Después)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "Fotogramas del sprite" +msgstr "SpriteFrames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5620,7 +5618,7 @@ msgstr "Ajustar a pÃxeles" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Grid Snap" -msgstr "Ajustar a cuadrÃcula" +msgstr "Ajustar a CuadrÃcula" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -5675,8 +5673,8 @@ msgid "Remove All" msgstr "Quitar todos" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5723,14 +5721,12 @@ msgid "Checked Item" msgstr "Casilla de verificación activa" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Añadir elemento" +msgstr "Radio Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Casilla de verificación activa" +msgstr "Ratio Item Activo" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5745,7 +5741,8 @@ msgid "Options" msgstr "Opciones" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "¡Tienes,Muchas,Y,Variadas,Opciones!" #: editor/plugins/theme_editor_plugin.cpp @@ -5870,7 +5867,7 @@ msgstr "¿Mezclar desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" -msgstr "\"Tile Set\"" +msgstr "Tile Set" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5886,7 +5883,7 @@ msgstr "Error" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" -msgstr "\"Autotiles\"" +msgstr "Autotiles" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -5901,8 +5898,8 @@ msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" -"Click izquierdo: habilitar bit.\n" -"Click derecho: deshabilitar bit." +"Clic Izquierdo: habilitar bit.\n" +"Clic Derecho: deshabilitar bit." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select current edited sub-tile." @@ -5938,8 +5935,8 @@ msgid "Presets" msgstr "Preajustes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Añadir.." +msgid "Add..." +msgstr "Añadir..." #: editor/project_export.cpp msgid "Resources" @@ -6014,7 +6011,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "Exportar con depuración" +msgstr "Exportar con Depuración" #: editor/project_manager.cpp msgid "The path does not exist." @@ -6033,6 +6030,11 @@ msgid "Imported Project" msgstr "Proyecto importado" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nombre del proyecto:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "No se pudo crear la carpeta." @@ -6214,8 +6216,9 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" -"Ahora mismo no tiene ningún proyecto.\n" -"¿Le gustarÃa explorar los proyectos ejemplo oficiales del Asset Library?" +"Actualmente no tienes ningún proyecto.\n" +"¿Quieres explorar los proyectos de ejemplo oficiales en la Biblioteca de " +"Assets?" #: editor/project_settings_editor.cpp msgid "Key " @@ -6234,10 +6237,13 @@ msgid "Mouse Button" msgstr "Botón del ratón" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nombre de acción inválido. No puede estar vacÃo o contener '/', ':', '=', " +"'\\' or '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6245,11 +6251,11 @@ msgstr "¡La acción «%s» ya existe!" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "Renombrar evento de acción de entrada" +msgstr "Renombrar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "Añadir evento de acción de entrada" +msgstr "Añadir Evento de Acción de Entrada" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Shift+" @@ -6264,8 +6270,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Presiona una tecla.." +msgid "Press a Key..." +msgstr "Presiona una tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6321,11 +6327,11 @@ msgstr "Ãndice de boton del mando:" #: editor/project_settings_editor.cpp msgid "Erase Input Action" -msgstr "Borrar \"Input Action\"" +msgstr "Borrar Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "Borrar evento de acción de entrada" +msgstr "Borrar Evento de Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Add Event" @@ -6385,7 +6391,7 @@ msgstr "Ya existe" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "Añadir acción de entrada" +msgstr "Añadir Acción de Entrada" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -6397,7 +6403,7 @@ msgstr "Los ajustes se han guardado correctamente." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "Sobreescribir para esta caracterÃstica" +msgstr "Sobrescribir la CaracterÃstica" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6448,12 +6454,12 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sobre escribir por.." +msgid "Override For..." +msgstr "Sustituir por..." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "Mapa de entradas" +msgstr "Mapa de Entradas" #: editor/project_settings_editor.cpp msgid "Action:" @@ -6521,7 +6527,7 @@ msgstr "AutoLoad" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "Selecciona un visor" +msgstr "Selecciona un Viewport" #: editor/property_editor.cpp msgid "Ease In" @@ -6544,12 +6550,12 @@ msgid "Easing Out-In" msgstr "Transición salida-entrada" #: editor/property_editor.cpp -msgid "File.." -msgstr "Archivo.." +msgid "File..." +msgstr "Archivo..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Directorio.." +msgid "Dir..." +msgstr "Directorio..." #: editor/property_editor.cpp msgid "Assign" @@ -6557,7 +6563,7 @@ msgstr "Asignar" #: editor/property_editor.cpp msgid "Select Node" -msgstr "Seleccionar nodo" +msgstr "Seleccionar Nodo" #: editor/property_editor.cpp msgid "New Script" @@ -6585,11 +6591,11 @@ msgstr "Error al cargar el archivo: ¡No es un recurso!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "¡El nodo seleccionado no es un visor!" +msgstr "¡El nodo seleccionado no es un Viewport!" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "Selecciona un nodo" +msgstr "Selecciona un Nodo" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -6634,7 +6640,7 @@ msgstr "" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "Reemparentar nodo" +msgstr "Reemparentar Nodo" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" @@ -6707,11 +6713,11 @@ msgstr "Mover Nodos Dentro del Padre" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "Duplicar nodos" +msgstr "Duplicar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)?" -msgstr "¿Quieres borrar los nodos?" +msgstr "¿Eliminar Nodo(s)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -6722,20 +6728,20 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operación no puede realizarse en escenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Guardar nueva escena como.." +msgid "Save New Scene As..." +msgstr "Guardar Nueva Escena Como..." #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "Hijos editables" +msgstr "Hijos Editables" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "Cargar como temporal" +msgstr "Cargar como Temporal" #: editor/scene_tree_dock.cpp msgid "Discard Instancing" -msgstr "Descartar instancia" +msgstr "Descartar Instancia" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" @@ -6751,7 +6757,7 @@ msgstr "¡No se puede operar sobre los nodos heredados por la escena actual!" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Borrar nodos" +msgstr "Eliminar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -6771,27 +6777,27 @@ msgstr "Error al duplicar escena para guardarla." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" -msgstr "Sub-recursos" +msgstr "Sub-Recursos" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "Limpiar heredado" +msgstr "Limpiar Heredado" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Borrar nodos" +msgstr "Eliminar Nodo(s)" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Añadir nodo hijo" +msgstr "Añadir Nodo Hijo" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "Instanciar escena hija" +msgstr "Instanciar Escena Hija" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "Cambiar tipo" +msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -6803,7 +6809,7 @@ msgstr "Quitar script" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Unir desde escena" +msgstr "Unir Desde Escena" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" @@ -6811,15 +6817,15 @@ msgstr "Guardar Rama como Escena" #: editor/scene_tree_dock.cpp msgid "Copy Node Path" -msgstr "Copiar ruta del nodo" +msgstr "Copiar Ruta del Nodo" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "Eliminar (sin confirmar)" +msgstr "Eliminar (Sin Confirmar)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node" -msgstr "Añadir/crear nodo nuevo" +msgstr "Añadir/Crear un Nuevo Nodo" #: editor/scene_tree_dock.cpp msgid "" @@ -6839,7 +6845,7 @@ msgstr "Añadir un script nuevo o existente al nodo seleccionado." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "Borra el script del nodo seleccionado." +msgstr "Borrar el script del nodo seleccionado." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -6874,8 +6880,8 @@ msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión/es y grupo/s\n" -"Haz click para mostrar el panel de señales." +"El nodo tiene conexión(es) y grupo(s)\n" +"Haz clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" @@ -6883,7 +6889,7 @@ msgid "" "Click to show signals dock." msgstr "" "El nodo tiene conexiones.\n" -"Haz click para mostrar el panel de señales." +"Haz clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp msgid "" @@ -6891,7 +6897,7 @@ msgid "" "Click to show groups dock." msgstr "" "El nodo está en el/los grupo(s).\n" -"Click para mostrar el panel de grupos." +"Haz clic para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp msgid "Open script" @@ -6903,7 +6909,7 @@ msgid "" "Click to unlock" msgstr "" "El nodo está bloqueado.\n" -"Click para desbloquear" +"Haz clic para desbloquear" #: editor/scene_tree_editor.cpp msgid "" @@ -6911,7 +6917,7 @@ msgid "" "Click to make selectable" msgstr "" "Los hijos no son seleccionables.\n" -"Haz click para hacerlos seleccionables" +"Haz clic para hacerlos seleccionables" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -6924,7 +6930,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "Renombrar nodo" +msgstr "Renombrar Nodo" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -6932,11 +6938,11 @@ msgstr "Ãrbol de escenas (nodos):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "¡Alerta de configuración de nodos!" +msgstr "¡Alerta de Configuración de Nodos!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "Selecciona un nodo" +msgstr "Selecciona un Nodo" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -6944,7 +6950,7 @@ msgstr "Error al cargar la plantilla '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "Error - No se pudo crear script en el sistema." +msgstr "Error - No se pudo crear script en el sistema de archivos." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -6980,7 +6986,7 @@ msgstr "La extensión no es correcta" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "Extensión seleccionada errónea" +msgstr "Se ha elegido una extensión incorrecta" #: editor/script_create_dialog.cpp msgid "Invalid Path" @@ -7036,7 +7042,7 @@ msgstr "Script integrado" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "Añadir script de nodo" +msgstr "Añadir Script de Nodo" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -7140,7 +7146,7 @@ msgstr "Tipo" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "Format" +msgstr "Formato" #: editor/script_editor_debugger.cpp msgid "Usage" @@ -7152,11 +7158,11 @@ msgstr "Otros" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Controles seleccionados:" +msgstr "Controles Seleccionados:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Tipo de controles seleccionados:" +msgstr "Tipo de Controles Seleccionados:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -7236,7 +7242,7 @@ msgstr "Borrar entrada actual" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "Doble click para crear una nueva entrada" +msgstr "Haz doble clic para crear una nueva entrada" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -7248,15 +7254,15 @@ msgstr "Plataforma" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dynamic Library" -msgstr "LibrerÃa dinámica" +msgstr "LibrerÃa Dinámica" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "Añadir entrada de arquitectura" +msgstr "Añadir una entrada de arquitectura" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "\"GDNativeLibrary\"" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -7290,7 +7296,7 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "¡El argumento «step» es cero!" +msgstr "¡el argumento del paso es cero!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -7330,7 +7336,7 @@ msgstr "El objeto no puede proporcionar una longitud." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" -msgstr "Plano siguiente" +msgstr "Siguiente Plano" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Plane" @@ -7342,7 +7348,7 @@ msgstr "Plano:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "Suelo Posterior" +msgstr "Siguiente Piso" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" @@ -7362,7 +7368,7 @@ msgstr "GridMap Duplicar selección" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" -msgstr "Rejilla" +msgstr "Mapa de CuadrÃcula" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" @@ -7446,7 +7452,7 @@ msgstr "Seleccionar distancia:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nombre de la clase no puede ser una palabra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7490,7 +7496,7 @@ msgstr "Compilaciones" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Build Project" -msgstr "Compilar proyecto" +msgstr "Compilar Proyecto" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Warnings" @@ -7505,7 +7511,7 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"¡Un nodo ejecutó un «yield» sin memoria de trabajo. Prueba leyendo la " +"¡Un nodo ejecutó un yield sin memoria de trabajo. Prueba leyendo la " "documentación sobre cómo utilizar yield!" #: modules/visual_script/visual_script.cpp @@ -7513,8 +7519,8 @@ msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"Un nodo ejecutó un «yield» pero no devolvió un estado de función en la " -"memoria de trabajo original." +"Un nodo ejecutó un yield pero no devolvió un estado de función en la memoria " +"de trabajo original." #: modules/visual_script/visual_script.cpp msgid "" @@ -7540,7 +7546,7 @@ msgstr "Desbordamiento de pila en el nivel: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "Cambiar argumentos de la señal" +msgstr "Cambiar Argumentos de la Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" @@ -7576,35 +7582,35 @@ msgstr "Otra función/variable/señal ya utiliza este nombre:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" -msgstr "Renombrar función" +msgstr "Renombrar Función" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Variable" -msgstr "Renombrar variable" +msgstr "Renombrar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Signal" -msgstr "Renombrar señal" +msgstr "Renombrar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" -msgstr "Añadir función" +msgstr "Añadir Función" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" -msgstr "Añadir variable" +msgstr "Añadir Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Add Signal" -msgstr "Añadir señal" +msgstr "Añadir Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" -msgstr "Cambiar expresión" +msgstr "Cambiar Expresión" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "Añadir nodo" +msgstr "Añadir Nodo" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" @@ -7612,7 +7618,7 @@ msgstr "Quitar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "Duplicar nodos de VisualScript" +msgstr "Duplicar Nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -7632,7 +7638,7 @@ msgstr "Mantén pulsado %s para quitar una referencia simple del nodo." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "Mantén pulsado Ctrl para soltar una referencia al nodo." +msgstr "Mantén pulsado Ctrl para soltar una referencia simple al nodo." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." @@ -7644,19 +7650,19 @@ msgstr "Mantén pulsado Ctrl para soltar un «Setter» de variable." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "Añadir nodo «Preload»" +msgstr "Añadir Nodo Preload" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "Añadir nodo/s desde árbol" +msgstr "Añadir Nodo(s) desde Ãrbol" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "Añadir propiedad «Getter»" +msgstr "Añadir propiedad Getter" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "Añadir propiedad «Setter»" +msgstr "Añadir propiedad Setter" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -7664,15 +7670,15 @@ msgstr "Cambiar tipo base" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "Mover nodo/s" +msgstr "Mover Nodo(s)" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "Quitar nodo de VisualScript" +msgstr "Quitar Nodo de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "Conectar nodos" +msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7700,7 +7706,7 @@ msgstr "Devuelve (\"Return\")" #: modules/visual_script/visual_script_editor.cpp msgid "Call" -msgstr "Call" +msgstr "Llamada (\"Call\")" #: modules/visual_script/visual_script_editor.cpp msgid "Get" @@ -7712,7 +7718,7 @@ msgstr "El script ya contiene la función '%s'" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "Cambiar valor de entrada" +msgstr "Cambiar Valor de Entrada" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." @@ -7728,35 +7734,35 @@ msgstr "Pegar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "Quitar función" +msgstr "Quitar Función" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable" -msgstr "Editar variable" +msgstr "Editar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "Quitar variable" +msgstr "Quitar Variable" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal" -msgstr "Editar señal" +msgstr "Editar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "Quitar señal" +msgstr "Quitar Señal" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" -msgstr "Editando variable:" +msgstr "Editando Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" -msgstr "Editando señal:" +msgstr "Editando Señal:" #: modules/visual_script/visual_script_editor.cpp msgid "Base Type:" -msgstr "Tipo base:" +msgstr "Tipo Base:" #: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" @@ -7772,7 +7778,7 @@ msgstr "Editar argumentos de la señal:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" -msgstr "Editar variable:" +msgstr "Editar Variable:" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -7780,19 +7786,19 @@ msgstr "Quitar seleccionados" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "Buscar tipo de nodo" +msgstr "Buscar Tipo de Nodo" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "Copiar nodos" +msgstr "Copiar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "Cortar nodos" +msgstr "Cortar Nodos" #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "Pegar nodos" +msgstr "Pegar Nodos" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -7812,11 +7818,11 @@ msgstr "Ãndice del nombre de la propiedad inválido." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "¡El objeto base no es un nodo!" +msgstr "¡El objeto base no es un Nodo!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "¡La ruta no apunta a un nodo!" +msgstr "¡La ruta no apunta a un Nodo!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." @@ -7858,7 +7864,7 @@ msgstr "Ejecutar en navegador" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "Ejecutar HTML exportado en el navegador por defecto del sistema." +msgstr "Ejecutar HTML exportado en el navegador predeterminado del sistema." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -7889,8 +7895,8 @@ msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" -"Se debe crear un recurso \"SpriteFrames\" o asignar uno en la propiedad " -"'Frames' para que AnimatedSprite pueda mostrar fotogramas." +"Se debe crear un recurso SpriteFrames o asignar uno en la propiedad 'Frames' " +"para que AnimatedSprite pueda mostrar fotogramas." #: scene/2d/canvas_modulate.cpp msgid "" @@ -7934,9 +7940,8 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2D solo sirve para proveer de una forma de colisión a un nodo " -"derivado de \"CollisionObject2D\". Por favor, úsalo solo como hijo de " -"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc... para dotarlos de " -"forma." +"derivado de CollisionObject2D. Por favor, úsalo solo como hijo de Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. para dotarlos de forma." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -7979,15 +7984,15 @@ msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance debe ser hijo o nieto de un nodo \"Navigation2D\". " +"NavigationPolygonInstance debe ser hijo o nieto de un nodo Navigation2D. " "Solo provee datos de navegación." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"En nodo \"ParallaxLayer\" solo funciona cuando esta posicionado como hijo de " -"un nodo \"ParallaxBackground\"." +"En nodo ParallaxLayer solo funciona cuando esta posicionado como hijo de un " +"nodo ParallaxBackground." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" @@ -8000,8 +8005,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"\"PathFollow2D\" solo funciona cuando está posicionado como hijo de un nodo " -"\"Path2D\"." +"PathFollow2D solo funciona cuando está colocado como hijo de un nodo Path2D." #: scene/2d/physics_body_2d.cpp msgid "" @@ -8090,8 +8094,8 @@ msgid "" msgstr "" "Este nodo no tiene formas hijas, por lo que no puede interactuar con el " "espacio.\n" -"Considera añadir un \"CollisionShape\" o \"CollisionPolygon\" como hijos de " -"este nodo para dotarlo de una forma." +"Considera añadir un CollisionShape o CollisionPolygon como hijos de este " +"nodo para dotarlo de una forma." #: scene/3d/collision_polygon.cpp msgid "" @@ -8114,8 +8118,8 @@ msgid "" "KinematicBody, etc. to give them a shape." msgstr "" "CollisionShape solo sirve para proveer de una forma a un nodo derivado de un " -"CollisionObject. Por favor, úsalo solo como hijo de \"Area\", \"StaticBody" -"\", \"RigidBody\", \"KinematicBody\", etc. para darles dicha forma." +"CollisionObject. Por favor, úsalo solo como hijo de Area, StaticBody, " +"RigidBody, KinematicBody, etc. para darles dicha forma." #: scene/3d/collision_shape.cpp msgid "" @@ -8166,7 +8170,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment necesita un recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8180,6 +8184,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Este WorldEnvironment está siendo ignorado. Agrega un nodo Camera (para " +"escenas 3D) o configura el Background Mode de este entorno en modo Canvas " +"(para escenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8203,7 +8210,7 @@ msgstr "Modo Raw" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" -msgstr "Añadir el color actual como predefinido" +msgstr "Añadir el color actual como predeterminado" #: scene/gui/dialogs.cpp msgid "Alert!" @@ -8211,7 +8218,7 @@ msgstr "¡Alerta!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Confirmar decisión…" +msgstr "Por favor, Confirma..." #: scene/gui/file_dialog.cpp msgid "Select this Folder" @@ -8256,10 +8263,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Este viewport no está configurado como \"render target\". Si tienes " -"intención de que muestre su contenido directamente en la pantalla, hazlo " -"hijo de un Control para que pueda obtener un tamaño. Alternativamente, hazlo " -"un RenderTarget y asigna su textura interna a algún otro nodo para mostrar." +"Este viewport no está configurado como render target. Si quieres que muestre " +"su contenido directamente en la pantalla, hazlo hijo de un Control para que " +"pueda obtener un tamaño. De lo contrario, conviértelo en un RenderTarget y " +"asigna su textura interna a algún nodo para mostrarlo." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8459,8 +8466,8 @@ msgstr "Tamaño de tipografÃa incorrecto." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." -#~ msgstr "Configurando.." +#~ msgid "Setting Up..." +#~ msgstr "Configurando..." #~ msgid "Error loading scene." #~ msgstr "Hubo un error al cargar la escena." @@ -8525,8 +8532,8 @@ msgstr "Tamaño de tipografÃa incorrecto." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Reimportar.." +#~ msgid "Re-Import..." +#~ msgstr "Reimportar..." #~ msgid "No bit masks to import!" #~ msgstr "¡Sin máscaras de bits para importar!" @@ -8925,14 +8932,14 @@ msgstr "Tamaño de tipografÃa incorrecto." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%):" -#~ msgid "Skeleton.." -#~ msgstr "Esqueleto.." +#~ msgid "Skeleton..." +#~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Restablecer zoom" -#~ msgid "Zoom Set.." -#~ msgstr "Ajustar zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Ajustar zoom..." #~ msgid "Set a Value" #~ msgstr "Establecer valor" @@ -9443,7 +9450,7 @@ msgstr "Tamaño de tipografÃa incorrecto." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK del proyecto" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exportar…" #~ msgid "Project Export" @@ -9557,8 +9564,8 @@ msgstr "Tamaño de tipografÃa incorrecto." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Volver a Cargar Script de Herramientas (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Editar Conecciones.." +#~ msgid "Edit Connections..." +#~ msgstr "Editar Conecciones..." #~ msgid "Set Params" #~ msgstr "Setear Params" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 304fc7dbc5..3514b6b2d9 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-03-04 06:03+0000\n" +"PO-Revision-Date: 2018-05-03 14:00+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.20-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -502,8 +502,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Conectar.." +msgid "Connect..." +msgstr "Conectar..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -922,12 +922,12 @@ msgid "Move Audio Bus" msgstr "Mover Bus de Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Guardar Layout de Bus de Audio Como.." +msgid "Save Audio Bus Layout As..." +msgstr "Guardar Layout de Bus de Audio Como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Ubicación para el Nuevo Layout.." +msgid "Location for New Layout..." +msgstr "Ubicación para el Nuevo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1068,12 +1068,12 @@ msgid "Updating Scene" msgstr "Actualizando Escena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Guardando cambios locales.." +msgid "Storing local changes..." +msgstr "Guardando cambios locales..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Actualizando escena.." +msgid "Updating scene..." +msgstr "Actualizando escena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1141,8 +1141,8 @@ msgid "Show In File Manager" msgstr "Mostrar en Gestor de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nueva Carpeta.." +msgid "New Folder..." +msgstr "Nueva Carpeta..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1403,20 +1403,20 @@ msgstr "Limpiar Salida" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "La exportación del proyecto falló con el código de error %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error al guardar el recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar Recurso Como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ya Veo.." +msgid "I see..." +msgstr "Ya Veo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1649,12 +1649,12 @@ msgid "Open Base Scene" msgstr "Abrir Escena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Abrir Escena Rapido.." +msgid "Quick Open Scene..." +msgstr "Abrir Escena Rapido..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Abrir Script Rapido.." +msgid "Quick Open Script..." +msgstr "Abrir Script Rapido..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1665,8 +1665,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Guardar cambios a '%s' antes de cerrar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar Escena Como.." +msgid "Save Scene As..." +msgstr "Guardar Escena Como..." #: editor/editor_node.cpp msgid "No" @@ -1717,8 +1717,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta acción no se puede deshacer. Revertir de todos modos?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Ejecutar Escena Rapido.." +msgid "Quick Run Scene..." +msgstr "Ejecutar Escena Rapido..." #: editor/editor_node.cpp msgid "Quit" @@ -1880,8 +1880,8 @@ msgid "Previous tab" msgstr "Pestaña anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Archivos.." +msgid "Filter Files..." +msgstr "Filtrar Archivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1892,12 +1892,12 @@ msgid "New Scene" msgstr "Nueva Escena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nueva Escena Heredada.." +msgid "New Inherited Scene..." +msgstr "Nueva Escena Heredada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir Escena.." +msgid "Open Scene..." +msgstr "Abrir Escena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1916,16 +1916,16 @@ msgid "Open Recent" msgstr "Abrir Reciente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Convertir A.." +msgid "Convert To..." +msgstr "Convertir A..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2189,8 +2189,8 @@ msgid "Save the currently edited resource." msgstr "Guardar el recurso editado actualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar Como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2298,8 +2298,8 @@ msgid "Creating Mesh Previews" msgstr "Creando Vistas Previas de Mesh/es" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2452,8 +2452,8 @@ msgid "(Current)" msgstr "(Actual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Recuperando mirrors, esperá, por favor.." +msgid "Retrieving mirrors, please wait..." +msgstr "Recuperando mirrors, esperá, por favor..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2530,8 +2530,8 @@ msgid "Error requesting url: " msgstr "Error al pedir el url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Conectando al Mirror.." +msgid "Connecting to Mirror..." +msgstr "Conectando al Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2547,8 +2547,8 @@ msgstr "No se ha podido resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2560,8 +2560,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2697,12 +2697,12 @@ msgid "Collapse all" msgstr "Colapsar todos" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renombrar.." +msgid "Rename..." +msgstr "Renombrar..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover A.." +msgid "Move To..." +msgstr "Mover A..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2713,16 +2713,16 @@ msgid "Instance" msgstr "Instancia" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependencias.." +msgid "Edit Dependencies..." +msgstr "Editar Dependencias..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Ver Dueños.." +msgid "View Owners..." +msgstr "Ver Dueños..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplicar.." +msgid "Duplicate..." +msgstr "Duplicar..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2748,7 +2748,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Examinando Archivos,\n" "Aguardá, por favor." @@ -2816,8 +2816,8 @@ msgid "Import Scene" msgstr "Importar Escena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando Escena.." +msgid "Importing Scene..." +msgstr "Importando Escena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2828,8 +2828,8 @@ msgid "Generating for Mesh: " msgstr "Generando para Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Ejecutando Script Personalizado.." +msgid "Running Custom Script..." +msgstr "Ejecutando Script Personalizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2844,8 +2844,8 @@ msgid "Error running post-import script:" msgstr "Error ejecutando el script de post-importacion:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Guardando.." +msgid "Saving..." +msgstr "Guardando..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2864,8 +2864,8 @@ msgid "Import As:" msgstr "Importar Como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preseteo.." +msgid "Preset..." +msgstr "Preseteo..." #: editor/import_dock.cpp msgid "Reimport" @@ -3284,16 +3284,16 @@ msgid "Transition Node" msgstr "Nodo Transición" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importar Animaciones.." +msgid "Import Animations..." +msgstr "Importar Animaciones..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Editar Filtros de Nodo" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtros.." +msgid "Filters..." +msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3360,8 +3360,8 @@ msgid "Fetching:" msgstr "Obteniendo:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Resolviendo.." +msgid "Resolving..." +msgstr "Resolviendo..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3427,8 +3427,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Soporte.." +msgid "Support..." +msgstr "Soporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3625,8 +3625,9 @@ msgid "Use Rotation Snap" msgstr "Usar Snap de Rotación" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar alineado.." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3721,14 +3722,12 @@ msgid "Show Guides" msgstr "Mostrar guÃas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver Origen" +msgstr "Mostrar OrÃgen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Viewport" +msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4021,7 +4020,7 @@ msgstr "El mesh no tiene una superficie de donde crear contornos(outlines)!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "El tipo de la malla primitiva no es PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4052,8 +4051,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crear Collision Sibling Convexo" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crear Outline Mesh.." +msgid "Create Outline Mesh..." +msgstr "Crear Outline Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4259,8 +4258,8 @@ msgid "Error loading image:" msgstr "Error al cargar la imagen:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Sin pixeles con transparencia > 128 en imagen.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Sin pixeles con transparencia > 128 en imagen..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4620,8 +4619,8 @@ msgid "Import Theme" msgstr "Importar Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Guardar Tema Como.." +msgid "Save Theme As..." +msgstr "Guardar Tema Como..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4717,8 +4716,8 @@ msgstr "Act/Desact. Panel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Encontrar.." +msgid "Find..." +msgstr "Encontrar..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4927,16 +4926,16 @@ msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Reemplazar.." +msgid "Replace..." +msgstr "Reemplazar..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ir a Función.." +msgid "Goto Function..." +msgstr "Ir a Función..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ir a LÃnea.." +msgid "Goto Line..." +msgstr "Ir a LÃnea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5389,12 +5388,8 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Dialogo de Transformación.." +msgid "Transform Dialog..." +msgstr "Dialogo de Transformación..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5646,8 +5641,8 @@ msgid "Remove All" msgstr "Quitar Todos" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5694,14 +5689,12 @@ msgid "Checked Item" msgstr "Item Tildado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Agregar Item" +msgstr "Radio Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item Tildado" +msgstr "Radio Item Tildado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5716,7 +5709,8 @@ msgid "Options" msgstr "Opciones" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Tienes, Muchas, Variadas, Opciones!" #: editor/plugins/theme_editor_plugin.cpp @@ -5910,8 +5904,8 @@ msgid "Presets" msgstr "Presets" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Agregar.." +msgid "Add..." +msgstr "Agregar..." #: editor/project_export.cpp msgid "Resources" @@ -6006,6 +6000,11 @@ msgid "Imported Project" msgstr "Proyecto Importado" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nombre del Proyecto:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "No se pudo crear la carpeta." @@ -6208,10 +6207,13 @@ msgid "Mouse Button" msgstr "Botón de Mouse" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nombre de acción inválido. No puede estar vacÃo o contener '/', ':', '=', " +"'\\' or '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6238,8 +6240,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Presionar una Tecla.." +msgid "Press a Key..." +msgstr "Presionar una Tecla..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6422,8 +6424,8 @@ msgid "Property:" msgstr "Propiedad:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sobreescribir Para.." +msgid "Override For..." +msgstr "Sobreescribir Para..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6518,12 +6520,12 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." -msgstr "Archivo.." +msgid "File..." +msgstr "Archivo..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Dir.." +msgid "Dir..." +msgstr "Dir..." #: editor/property_editor.cpp msgid "Assign" @@ -6696,8 +6698,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operación no puede ser realizada en escenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Guardar Nueva Escena Como.." +msgid "Save New Scene As..." +msgstr "Guardar Nueva Escena Como..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7417,7 +7419,7 @@ msgstr "Elegir Instancia:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "El nombre de la clase no puede ser una palabra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8128,7 +8130,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment necesita un recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8142,6 +8144,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Este WorldEnvironment esta siendo ignorado. Agregá un nodo Camera (para " +"escenas 3D) o configurá el Background Mode de este entorno en modo Canvas " +"(para escenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8413,8 +8418,8 @@ msgstr "Tamaño de tipografÃa inválido." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." -#~ msgstr "Configurando.." +#~ msgid "Setting Up..." +#~ msgstr "Configurando..." #~ msgid "Error loading scene." #~ msgstr "Error al cargar la escena." @@ -8476,8 +8481,8 @@ msgstr "Tamaño de tipografÃa inválido." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Reimportando.." +#~ msgid "Re-Import..." +#~ msgstr "Reimportando..." #~ msgid "No bit masks to import!" #~ msgstr "Sin máscaras de bits para importar!" @@ -8873,14 +8878,14 @@ msgstr "Tamaño de tipografÃa inválido." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%):" -#~ msgid "Skeleton.." -#~ msgstr "Esqueleto.." +#~ msgid "Skeleton..." +#~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Resetear Zoom" -#~ msgid "Zoom Set.." -#~ msgstr "Setear Zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Setear Zoom..." #~ msgid "Set a Value" #~ msgstr "Setear un Valor" @@ -9362,8 +9367,8 @@ msgstr "Tamaño de tipografÃa inválido." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK de Proyecto" -#~ msgid "Export.." -#~ msgstr "Exportar.." +#~ msgid "Export..." +#~ msgstr "Exportar..." #~ msgid "Project Export" #~ msgstr "Exportar Proyecto" @@ -9483,8 +9488,8 @@ msgstr "Tamaño de tipografÃa inválido." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Volver a Cargar Script de Herramientas (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Editar Conecciones.." +#~ msgid "Edit Connections..." +#~ msgstr "Editar Conecciones..." #~ msgid "Set Params" #~ msgstr "Setear Params" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 8b7fdcbb79..be57fa2fca 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -502,7 +502,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "'s%' را از 's%' جدا Ú©Ù†" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "در ØØ§Ù„ اتصال..." #: editor/connections_dialog.cpp @@ -928,11 +928,11 @@ msgid "Move Audio Bus" msgstr "کلید Add را جابجا Ú©Ù†" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1068,11 +1068,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1143,8 +1143,8 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "ساختن پوشه.." +msgid "New Folder..." +msgstr "ساختن پوشه..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1406,12 +1406,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "ذخیره منبع از ..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "من میبینم ..." #: editor/editor_node.cpp @@ -1619,11 +1619,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1635,7 +1635,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "ذخیره صØÙ†Ù‡ در ..." #: editor/editor_node.cpp @@ -1687,7 +1687,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1834,7 +1834,7 @@ msgid "Previous tab" msgstr "زبانه قبلی" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1846,11 +1846,11 @@ msgid "New Scene" msgstr "صØÙ†Ù‡ جدید" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1870,15 +1870,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2124,7 +2124,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "ذخیره در..." #: editor/editor_node.cpp @@ -2233,7 +2233,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2386,7 +2386,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2443,7 +2443,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Request Failed." -msgstr "در ØØ§Ù„ درخواست.." +msgstr "در ØØ§Ù„ درخواست..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2465,7 +2465,7 @@ msgstr "خطای آدرس درخواستی: " #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "در ØØ§Ù„ اتصال..." #: editor/export_template_manager.cpp @@ -2482,8 +2482,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "در ØØ§Ù„ اتصال.." +msgid "Connecting..." +msgstr "در ØØ§Ù„ اتصال..." #: editor/export_template_manager.cpp #, fuzzy @@ -2496,8 +2496,8 @@ msgstr "وصل شده" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "در ØØ§Ù„ درخواست.." +msgid "Requesting..." +msgstr "در ØØ§Ù„ درخواست..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2634,11 +2634,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "تغییر نام.." +msgid "Rename..." +msgstr "تغییر نام..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2651,16 +2651,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "انتخاب شده را به دو تا تکثیر Ú©Ù†" #: editor/filesystem_dock.cpp @@ -2686,7 +2686,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2752,7 +2752,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2764,7 +2764,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2780,7 +2780,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2800,7 +2800,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3217,7 +3217,7 @@ msgid "Transition Node" msgstr "گره جابجای" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3225,7 +3225,7 @@ msgid "Edit Node Filters" msgstr "ویرایش صاÙÛŒ های گره" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3295,7 +3295,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3363,8 +3363,8 @@ msgid "Site:" msgstr "تارنما:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "پشتیبانی.." +msgid "Support..." +msgstr "پشتیبانی..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3553,6 +3553,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3977,7 +3978,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4184,7 +4185,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4550,7 +4551,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4651,7 +4652,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4862,15 +4863,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5330,11 +5331,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5590,7 +5587,7 @@ msgid "Remove All" msgstr "برداشتن" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5659,7 +5656,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5853,7 +5850,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5947,6 +5944,11 @@ msgstr "پروژه واردشده" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "نام پروژه:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ناتوان در ساختن پوشه." @@ -6138,8 +6140,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6167,7 +6169,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6352,7 +6354,7 @@ msgid "Property:" msgstr "ویژگی:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6448,11 +6450,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6628,7 +6630,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 139983464e..091effca5d 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -7,20 +7,22 @@ # Bastian Salmela <bastian.salmela@gmail.com>, 2017. # ekeimaja <ekeimaja@gmail.com>, 2017-2018. # Jarmo Riikonen <amatrelan@gmail.com>, 2017. +# Nuutti Varvikko <nvarvikko@gmail.com>, 2018. # Sami Lehtilä <sami.lehtila@gmail.com>, 2018. +# Tapani Niemi <tapani.niemi@kapsi.fi>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-01-31 04:36+0000\n" -"Last-Translator: Sami Lehtilä <sami.lehtila@gmail.com>\n" +"PO-Revision-Date: 2018-06-05 19:27+0000\n" +"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" "Language: fi\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.19-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -31,9 +33,8 @@ msgid "All Selection" msgstr "Koko valinta" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Animaatio: muuta arvoa" +msgstr "Animaatio: muuta avainruudun aikaa" #: editor/animation_editor.cpp msgid "Anim Change Transition" @@ -44,13 +45,12 @@ msgid "Anim Change Transform" msgstr "Animaatio: muuta siirtymää" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Animaatio: muuta arvoa" +msgstr "Animaatio: muuta avainruudun arvoa" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Anmaatio: Muuta kutsua" +msgstr "Animaatio: Muuta kutsua" #: editor/animation_editor.cpp msgid "Anim Add Track" @@ -245,7 +245,7 @@ msgstr "Animaatio: Lisää kutsuraita" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "Animaation zoom." +msgstr "Animaation lähennystaso." #: editor/animation_editor.cpp msgid "Length (s):" @@ -409,7 +409,7 @@ msgstr "Loitonna" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "Nollaa lähennys" +msgstr "Palauta oletuslähennystaso" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" @@ -503,7 +503,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Katkaise yhteys '%s' '%s':n" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Yhdistä..." #: editor/connections_dialog.cpp @@ -619,9 +619,8 @@ msgid "Open" msgstr "Avaa" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owners Of:" -msgstr "Omistajat:" +msgstr "Omistajat kohteelle:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" @@ -638,7 +637,6 @@ msgstr "" "Poistetaanko silti? (ei mahdollisuutta kumota)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" msgstr "Ei voida poistaa:" @@ -697,14 +695,12 @@ msgid "Delete" msgstr "Poista" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Key" -msgstr "Vaihda taulukon avainta" +msgstr "Vaihda hakurakenteen avainta" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" -msgstr "Vaihda taulukon arvoa" +msgstr "Vaihda hakurakenteen arvoa" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -727,9 +723,8 @@ msgid "Lead Developer" msgstr "Pääkehittäjä" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "Projektinhallinta" +msgstr "Projektipäällikkö " #: editor/editor_about.cpp msgid "Developers" @@ -838,9 +833,8 @@ msgid "Rename Audio Bus" msgstr "Nimeä väylä uudelleen" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Ääniväylä sooloksi" +msgstr "Muuta ääniväylän voimakkuutta" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -856,7 +850,7 @@ msgstr "Käytä ääniväylän efektejä" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Valitse ääniväylän lähtö" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" @@ -905,7 +899,7 @@ msgstr "Poista efekti" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Äänet" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -932,11 +926,11 @@ msgid "Move Audio Bus" msgstr "Siirrä ääniväylää" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Tallenna ääniväylän asettelu nimellä..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Sijainti uudelle asettelulle..." #: editor/editor_audio_buses.cpp @@ -1082,21 +1076,20 @@ msgid "Updating Scene" msgstr "Päivitetään skeneä" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Varastoidaan paikalliset muutokset..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Päivitetään skeneä..." #: editor/editor_data.cpp -#, fuzzy msgid "[empty]" -msgstr "(tyhjä)" +msgstr "[tyhjä]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "[ei tallennettu]" +msgstr "[tallentamaton]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" @@ -1136,18 +1129,16 @@ msgid "Packing" msgstr "Pakataan" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Mallitiedostoa ei löytynyt:\n" +msgstr "Mallitiedostoa ei löytynyt:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" msgstr "Tiedosto on jo olemassa, korvaa?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select Current Folder" -msgstr "Luo kansio" +msgstr "Valitse nykyinen kansio" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1158,7 +1149,7 @@ msgid "Show In File Manager" msgstr "Näytä tiedostonhallinnassa" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Luo kansio..." #: editor/editor_file_dialog.cpp @@ -1239,9 +1230,8 @@ msgid "Move Favorite Down" msgstr "Siirrä suosikkia alas" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder" -msgstr "Kansiota ei voitu luoda." +msgstr "Siirry yläkansioon" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1257,9 +1247,8 @@ msgid "File:" msgstr "Tiedosto:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Must use a valid extension." -msgstr "Käytä sopivaa laajennusta" +msgstr "Käytä sopivaa tiedostopäätettä." #: editor/editor_file_system.cpp msgid "ScanSources" @@ -1271,9 +1260,8 @@ msgstr "Tuodaan (uudelleen) Assetteja" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Help" -msgstr "Hae oppaasta" +msgstr "Etsi ohjeesta" #: editor/editor_help.cpp msgid "Class List:" @@ -1305,18 +1293,16 @@ msgid "Brief Description:" msgstr "Lyhyt kuvaus:" #: editor/editor_help.cpp -#, fuzzy msgid "Members" -msgstr "Jäsenet:" +msgstr "Jäsenet" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Jäsenet:" #: editor/editor_help.cpp -#, fuzzy msgid "Public Methods" -msgstr "Julkiset metodit:" +msgstr "Julkiset metodit" #: editor/editor_help.cpp msgid "Public Methods:" @@ -1324,66 +1310,59 @@ msgstr "Julkiset metodit:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "GUI teeman osat" +msgstr "Käyttöliittymäteeman osat" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "GUI teeman osat:" +msgstr "Käyttöliittymäteeman osat:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Signaalit:" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Animaatiot" +msgstr "Enumeraatiot" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations:" -msgstr "Animaatiot" +msgstr "Enumeraatiot:" #: editor/editor_help.cpp msgid "enum " -msgstr "enum" +msgstr "enum " #: editor/editor_help.cpp -#, fuzzy msgid "Constants" -msgstr "Vakiot:" +msgstr "Vakiot" #: editor/editor_help.cpp msgid "Constants:" msgstr "Vakiot:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Kuvaus:" +msgstr "Kuvaus" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Oppaat" +msgstr "Online-oppaat:" #: editor/editor_help.cpp -#, fuzzy msgid "" "There are currently no tutorials for this class, you can [color=$color][url=" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Tälle metodille ei vielä löydy kuvailua. Voit auttaa meitä [color=$color]" -"[url=$url]kirjoittamalla sellaisen[/url][/color]!" +"Tälle luokalle ei vielä löydy kuvausta. Voit [color=$color][url=$url]auttaa " +"luomalla sellaisen[/url][/color] tai [color=$color][url=$url2]pyytää " +"sellaisen[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Properties" -msgstr "Ominaisuudet:" +msgstr "Ominaisuudet" #: editor/editor_help.cpp -#, fuzzy msgid "Property Description:" msgstr "Ominaisuuden kuvaus:" @@ -1396,9 +1375,8 @@ msgstr "" "$url]kirjoittamalla sellaisen[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Methods" -msgstr "Metodilista:" +msgstr "Metodit" #: editor/editor_help.cpp msgid "Method Description:" @@ -1421,9 +1399,8 @@ msgid "Find" msgstr "Etsi" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" -msgstr " Tuloste:" +msgstr "Tuloste:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp @@ -1433,25 +1410,24 @@ msgid "Clear" msgstr "Tyhjennä" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Tuloste" +msgstr "Tyhjennä tuloste" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projektin vienti epäonnistui virhekoodilla %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Virhe tallennettaessa resurssia!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Tallenna resurssi nimellä..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Ymmärrän..." #: editor/editor_node.cpp @@ -1467,28 +1443,24 @@ msgid "Error while saving." msgstr "Virhe tallennettaessa." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open '%s'." -msgstr "Yhdistä..." +msgstr "Ei voida avata tiedostoa '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Error while parsing '%s'." -msgstr "Virhe tallennettaessa." +msgstr "Virhe jäsennettäessä tiedostoa '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." msgstr "Odottamaton loppu tiedostossa '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Missing '%s' or its dependencies." -msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" +msgstr "Tiedosto '%s' tai jokin sen riippuvuuksista puuttuu." #: editor/editor_node.cpp -#, fuzzy msgid "Error while loading '%s'." -msgstr "Virhe tallennettaessa." +msgstr "Virhe ladattaessa tiedostoa '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -1503,16 +1475,16 @@ msgid "Creating Thumbnail" msgstr "Luodaan pienoiskuvaa" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." -msgstr "Tätä toimintoa ei voi tehdä ilman Sceneä." +msgstr "Tätä toimintoa ei voi tehdä ilman että puun juuri on olemassa." #: editor/editor_node.cpp -#, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." -msgstr "Sceneä ei voitu tallentaa. Riippuvuuksia ei voitu tyydyttää." +msgstr "" +"Skeneä ei voitu tallentaa. Mahdollisia riippuvuuksia (ilmentymiä tai " +"perintää) ei voida toteuttaa." #: editor/editor_node.cpp msgid "Failed to load resource." @@ -1565,9 +1537,9 @@ msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" -"Tämä resurssi kuuluu skeneen josta on luotu instanssi, tai joka on " +"Tämä resurssi kuuluu skeneen, josta on luotu ilmentymä, tai joka on " "periytyvä.\n" -"Muutokset tähän eivät ole pysyviä, kun tallennat nykyisen skenen." +"Muutokset siihen eivät ole pysyviä, kun tallennat nykyisen skenen." #: editor/editor_node.cpp msgid "" @@ -1585,9 +1557,10 @@ msgid "" "understand this workflow." msgstr "" "Tämä skene on tuotu, joten siihen tehtyjä muutoksia ei säilytetä.\n" -"Instanssin, tai periytyvän skenen luominen mahdollistaa tämän.\n" -"Ole hyvä ja lue tarkemmat ohjeet skenejen tuomisesta jotta ymmärrät paremmin " -"tämän työnkulun." +"Ilmentymän tai periytyvän skenen luominen siitä mahdollistaa muutoksien " +"tekemisen siihen.\n" +"Ole hyvä ja lue dokumentaatiosta tarkemmat ohjeet skenejen tuomisesta, jotta " +"ymmärrät paremmin tämän työnkulun." #: editor/editor_node.cpp msgid "" @@ -1599,14 +1572,12 @@ msgstr "" "Ole hyvä ja lue ohjeet testaamisesta ymmärtääksesi paremmin tämän työnkulun." #: editor/editor_node.cpp -#, fuzzy msgid "Expand all properties" -msgstr "Laajenna kaikki" +msgstr "Laajenna kaikki ominaisuudet" #: editor/editor_node.cpp -#, fuzzy msgid "Collapse all properties" -msgstr "Pienennä kaikki" +msgstr "Tiivistä kaikki ominaisuudet" #: editor/editor_node.cpp msgid "Copy Params" @@ -1630,9 +1601,8 @@ msgid "Make Built-In" msgstr "Tee sisäänrakennettu" #: editor/editor_node.cpp -#, fuzzy msgid "Make Sub-Resources Unique" -msgstr "Tee ali-resursseista yksilöllisiä." +msgstr "Tee aliresursseista yksilöllisiä" #: editor/editor_node.cpp msgid "Open in Help" @@ -1643,14 +1613,13 @@ msgid "There is no defined scene to run." msgstr "Suoritettavaa sceneä ei ole määritetty." #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Pääsceneä ei ole määritetty, haluatko valita sen?\n" -"Voit muuttaa sitä myöhemmin projektin asetuksista." +"Pääskeneä ei ole määritetty, haluatko valita sen?\n" +"Voit muuttaa sen myöhemmin projektin asetuksista, kohdasta 'Application'." #: editor/editor_node.cpp msgid "" @@ -1688,11 +1657,11 @@ msgid "Open Base Scene" msgstr "Avaa kantascene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Nopea skenen avaus..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Nopea skriptin avaus..." #: editor/editor_node.cpp @@ -1700,12 +1669,11 @@ msgid "Save & Close" msgstr "Tallenna ja sulje" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes to '%s' before closing?" -msgstr "Tallennetaanko muutokset '%s' ennen sulkemista?" +msgstr "Tallennetaanko muutokset tiedostoon '%s' ennen sulkemista?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Tallenna scene nimellä..." #: editor/editor_node.cpp @@ -1757,7 +1725,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tätä toimintoa ei voida peruttaa. Palauta joka tapauksessa?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Nopea skenen käynnistys..." #: editor/editor_node.cpp @@ -1770,7 +1738,7 @@ msgstr "Poistu editorista?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "Projektienhallinta" +msgstr "Avataanko projektinhallinta?" #: editor/editor_node.cpp msgid "Save & Quit" @@ -1804,7 +1772,7 @@ msgstr "Lisäosan '%s' aktivointi epäonnistui, virheellinen asetustiedosto." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "" +msgstr "Skriptikenttää ei löytynyt lisäosan tiedostosta: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." @@ -1911,7 +1879,7 @@ msgid "Previous tab" msgstr "Edellinen välilehti" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Suodata tiedostot..." #: editor/editor_node.cpp @@ -1923,11 +1891,11 @@ msgid "New Scene" msgstr "Uusi skene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Uusi peritty skene..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Avaa skene..." #: editor/editor_node.cpp @@ -1947,15 +1915,15 @@ msgid "Open Recent" msgstr "Avaa viimeaikainen" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Muunna..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MalliKirjasto..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -1977,9 +1945,8 @@ msgid "Miscellaneous project or scene-wide tools." msgstr "Sekalaiset projekti- tai skenetyökalut." #: editor/editor_node.cpp -#, fuzzy msgid "Project" -msgstr "Uusi projekti" +msgstr "Projekti" #: editor/editor_node.cpp msgid "Project Settings" @@ -2007,7 +1974,7 @@ msgstr "Testaa" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Julkaise etätestauksen kasnsa" +msgstr "Julkaise etätestauksen kanssa" #: editor/editor_node.cpp msgid "" @@ -2019,7 +1986,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Kevyt käyttöönotto verkkolevyn avulla" #: editor/editor_node.cpp msgid "" @@ -2038,9 +2005,8 @@ msgstr "" "kohdalla." #: editor/editor_node.cpp -#, fuzzy msgid "Visible Collision Shapes" -msgstr "Näytä osuma-alueet" +msgstr "Näytä törmäysmuodot" #: editor/editor_node.cpp msgid "" @@ -2059,8 +2025,8 @@ msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"Navigaatiomuodot ja -polygonit ovat näkyvillä peliä ajettaessa tämän ollessa " -"valittuna." +"Navigointiverkot ja niiden polygonit ovat näkyvillä peliä ajettaessa tämän " +"ollessa valittuna." #: editor/editor_node.cpp msgid "Sync Scene Changes" @@ -2083,7 +2049,6 @@ msgid "Sync Script Changes" msgstr "Synkronoi skriptin muutokset" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is turned on, any script that is saved will be reloaded on " "the running game.\n" @@ -2092,13 +2057,11 @@ msgid "" msgstr "" "Jos tämä on valittu, kaikki tallennetut skriptit ladataan uudelleen pelin " "käynnistyessä.\n" -"Mikäli peli ajetaan etälaitteella, on tehokkaampaa käyttää " -"verkkotiedostojärjestelmää ." +"Mikäli peli ajetaan etälaitteella, on tehokkaampaa käyttää verkkolevyä." #: editor/editor_node.cpp -#, fuzzy msgid "Editor" -msgstr "Muokkaa" +msgstr "Editori" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -2114,7 +2077,7 @@ msgstr "Siirry koko näytön tilaan" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "Hallitse vietäviä Templateja" +msgstr "Hallinnoi vientimalleja" #: editor/editor_node.cpp msgid "Help" @@ -2136,9 +2099,8 @@ msgid "Online Docs" msgstr "Dokumentaatio" #: editor/editor_node.cpp -#, fuzzy msgid "Q&A" -msgstr "Kysy&Vastaa" +msgstr "Kysymykset ja vastaukset" #: editor/editor_node.cpp msgid "Issue Tracker" @@ -2154,12 +2116,11 @@ msgstr "Tietoja" #: editor/editor_node.cpp msgid "Play the project." -msgstr "Käynnistä projekti" +msgstr "Käynnistä projekti." #: editor/editor_node.cpp -#, fuzzy msgid "Play" -msgstr "Toista" +msgstr "Pelaa" #: editor/editor_node.cpp msgid "Pause the scene" @@ -2226,7 +2187,7 @@ msgid "Save the currently edited resource." msgstr "Tallenna tällä hetkellä muokattu resurssi." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Tallenna nimellä..." #: editor/editor_node.cpp @@ -2336,7 +2297,7 @@ msgid "Creating Mesh Previews" msgstr "Luodaan mallien esikatseluita" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Pienoiskuva..." #: editor/editor_plugin_settings.cpp @@ -2369,13 +2330,12 @@ msgid "Start Profiling" msgstr "Aloita profilointi" #: editor/editor_profiler.cpp -#, fuzzy msgid "Measure:" -msgstr "Mittayksikkö:" +msgstr "Mittaa:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "Framen aika (sek)" +msgstr "Kuvaruudun aika (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" @@ -2383,12 +2343,11 @@ msgstr "Keskimääräinen aika (sek)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "Frame %" +msgstr "Kuvaruutujen %" #: editor/editor_profiler.cpp -#, fuzzy msgid "Physics Frame %" -msgstr "Kiinteä Frame %" +msgstr "Fysiikkaruutujen %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2396,7 +2355,7 @@ msgstr "Aika:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "Sisältävä" #: editor/editor_profiler.cpp msgid "Self" @@ -2407,14 +2366,12 @@ msgid "Frame #:" msgstr "Ruutu #:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Time" -msgstr "Aika:" +msgstr "Aika" #: editor/editor_profiler.cpp -#, fuzzy msgid "Calls" -msgstr "Kutsu" +msgstr "Kutsuja" #: editor/editor_run_native.cpp msgid "Select device from the list" @@ -2493,7 +2450,7 @@ msgid "(Current)" msgstr "(Nykyinen)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Noudetaan peilipalvelimia, hetkinen..." #: editor/export_template_manager.cpp @@ -2513,13 +2470,12 @@ msgid "No version.txt found inside templates." msgstr "version.txt -tiedostoa ei löytynyt." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "Virhe luotaessa polkua mallille:\n" +msgstr "Virhe luotaessa polkua malleille:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "Puretaan vientipohjia." +msgstr "Puretaan vientimalleja" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2550,7 +2506,6 @@ msgstr "Ei vastausta." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request Failed." msgstr "Pyyntö epäonnistui." @@ -2565,29 +2520,24 @@ msgid "Failed:" msgstr "Epäonnistui:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." -msgstr "Lataa" +msgstr "Lataus valmis." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting url: " -msgstr "Virhe tallennettaessa atlas-kuvaa:" +msgstr "Virhe pyydettäessä osoitetta: " #: editor/export_template_manager.cpp -#, fuzzy -msgid "Connecting to Mirror.." -msgstr "Yhdistä..." +msgid "Connecting to Mirror..." +msgstr "Yhdistetään peilipalvelimeen..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Disconnected" -msgstr "Katkaise yhteys" +msgstr "Yhteys katkaistu" #: editor/export_template_manager.cpp -#, fuzzy msgid "Resolving" -msgstr "Tallennetaan..." +msgstr "Selvitetään" #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2595,29 +2545,25 @@ msgstr "Yhdistäminen epäonnistui" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Connecting.." -msgstr "Yhdistä..." +msgid "Connecting..." +msgstr "Yhdistetään..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" msgstr "Ei voitu yhdistää" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" -msgstr "Yhdistä" +msgstr "Yhdistetty" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Pyydetään..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Downloading" -msgstr "Lataa" +msgstr "Ladataan" #: editor/export_template_manager.cpp msgid "Connection Error" @@ -2648,14 +2594,12 @@ msgid "Select template file" msgstr "Valitse mallin tiedosto" #: editor/export_template_manager.cpp -#, fuzzy msgid "Export Template Manager" msgstr "Vientimallien hallinta" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Poista malli" +msgstr "Lataa mallit" #: editor/export_template_manager.cpp msgid "Select mirror from list: " @@ -2665,7 +2609,7 @@ msgstr "Valitse peilipalvelin listasta: " msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" "Tiedostoa file_type_cache.cch ei voitu avata kirjoittamista varten. " -"Välimuistia ei tallenneta. " +"Välimuistia ei tallenneta!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -2682,79 +2626,65 @@ msgid "View items as a list" msgstr "Listanäkymä" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"\n" -"Tila: Tuonti epäonnistui. Ole hyvä, korjaa tiedosto, ja tuo uudelleen." +"Tila: Tuonti epäonnistui. Ole hyvä, korjaa tiedosto ja tuo se uudelleen." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." msgstr "Ei voitu siirtää/nimetä uudelleen resurssien päätasoa." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Cannot move a folder into itself." -msgstr "Hakemistoa ei voi siirtää itsensä sisään.\n" +msgstr "Kansiota ei voi siirtää itsensä sisään." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Virhe tuotaessa:" +msgstr "Virhe siirrettäessä:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Virhe ladatessa:" +msgstr "Virhe kahdennettaessa:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "Scenellä '%s' on rikkinäisiä riippuvuuksia:" +msgstr "Ei voida päivittää riippuvuuksia:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "No name provided" msgstr "Nimeä ei annettu" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Provided name contains invalid characters" -msgstr "Annettu nimi sisältää laittomia kirjaimia" +msgstr "Annettu nimi sisältää virheellisiä kirjainmerkkejä" #: editor/filesystem_dock.cpp -#, fuzzy msgid "No name provided." -msgstr "Nimeä uudelleen tai siirrä..." +msgstr "Nimeä ei annettu." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Name contains invalid characters." -msgstr "Kelvolliset merkit:" +msgstr "Nimi sisältää virheellisiä kirjainmerkkejä." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." msgstr "Tällä nimellä löytyy jo kansio tai tiedosto." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Nimeä muuttuja uudelleen" +msgstr "Nimetään tiedosto uudelleen:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming folder:" -msgstr "Nimeä Node uudelleen" +msgstr "Nimetään kansio uudelleen:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Monista" +msgstr "Kahdennetaan tiedosto:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "Nimeä Node uudelleen" +msgstr "Kahdennetaan kansio:" #: editor/filesystem_dock.cpp msgid "Expand all" @@ -2765,35 +2695,32 @@ msgid "Collapse all" msgstr "Pienennä kaikki" #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Rename.." -msgstr "Nimeä uudelleen" +msgid "Rename..." +msgstr "Nimeä uudelleen..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Siirrä..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scene(s)" -msgstr "Avaa scene" +msgstr "Avaa skene tai skenejä" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "Instanssi" +msgstr "Luo ilmentymä" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Muokkaa riippuvuuksia..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Tarkastele omistajia..." #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate.." -msgstr "Monista" +msgid "Duplicate..." +msgstr "Kahdenna..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2805,7 +2732,7 @@ msgstr "Seuraava hakemisto" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Skannaa tiedostojärjestelmä uudelleen" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" @@ -2813,13 +2740,13 @@ msgstr "Merkitse kansio suosikkeihin" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Luo valituista skeneistä instanssi valitun noden alle." +msgstr "Luo valituista skeneistä ilmentymä valitun noden alle." #: editor/filesystem_dock.cpp #, fuzzy msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Selataan tiedostoja,\n" "Hetkinen..." @@ -2842,49 +2769,40 @@ msgid "Remove from Group" msgstr "Poista ryhmästä" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Tuodaan Scene..." +msgstr "Tuo yhtenä skenenä" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" -msgstr "Tuo animaatiot..." +msgstr "Tuo erillisten animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials" msgstr "Tuo erillisten materiaalien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects" msgstr "Tuo erillisten objektien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials" msgstr "Tuo erillisten objektien ja materiaalien kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Animations" msgstr "Tuo erillisten objektien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials+Animations" msgstr "Tuo erillisten materiaalien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials+Animations" msgstr "Tuo erillisten objektien, materiaalien ja animaatioiden kanssa" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes" -msgstr "Tuo 3D Scene" +msgstr "Tuo useina skeneinä" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" @@ -2896,7 +2814,7 @@ msgid "Import Scene" msgstr "Tuo Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Tuodaan Scene..." #: editor/import/resource_importer_scene.cpp @@ -2910,32 +2828,33 @@ msgid "Generating for Mesh: " msgstr "Luo AABB" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Suorita valitsemasi skripti..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "Ei voitu ladata tuonnin jälkeistä skriptiä: " +msgstr "Ei voitu ladata tuonnin jälkeistä skriptiä:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "Viallinen tuonnin jälkeinen skripti (tarkista konsoli) : " +msgstr "" +"Virheellinen tai viallinen tuonnin jälkeinen skripti (tarkista konsoli):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "Virhe ajettaessa tuonnin jälkeistä skriptiä: " +msgstr "Virhe ajettaessa tuonnin jälkeistä skriptiä:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Tallennetaan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Aseta oletus valinnalle '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "Poista oletus valinnalta '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2946,7 +2865,7 @@ msgid "Import As:" msgstr "Tuo nimellä:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Esiasetus..." #: editor/import_dock.cpp @@ -3055,11 +2974,11 @@ msgstr "Lisää animaatio" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "Sekoita seuraavaan vaihdettu" +msgstr "Sulauta seuraavaan vaihdettu" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Muuta sulautusaikaa" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -3115,7 +3034,7 @@ msgstr "Animaation sijainti (sekunneissa)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Skaalaa animaation toistoa globaalisti nodelle." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." @@ -3143,7 +3062,7 @@ msgstr "Toista automaattisesti" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Target Blend Times" -msgstr "" +msgstr "Muokkaa kohteen sulautusaikoja" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -3199,7 +3118,7 @@ msgstr "Pakota valkoisen modulaatio" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "Näytä 3D-muokkaimet" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -3345,11 +3264,11 @@ msgstr "Sulautus2 node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Sulautus3 node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Sulautus4 node" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" @@ -3364,7 +3283,7 @@ msgid "Transition Node" msgstr "Siirtymänode" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Tuo animaatiot..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3372,7 +3291,7 @@ msgid "Edit Node Filters" msgstr "Muokkaa noden suodattimia" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Suodattimet..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3389,9 +3308,8 @@ msgid "Contents:" msgstr "Sisällöt:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "View Files" -msgstr " Tiedostot" +msgstr "Näytä tiedostot" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -3402,18 +3320,16 @@ msgid "Connection error, please try again." msgstr "Yhteysvirhe, ole hyvä ja yritä uudelleen." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect to host:" -msgstr "Yhdistä Nodeen:" +msgstr "Isäntään yhdistäminen epäonnistui:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "Ei vastausta isännältä: " +msgstr "Ei vastausta isännältä:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, return code:" -msgstr "Pyydetty tiedostomuoto tuntematon:" +msgstr "Pyyntö epäonnistui, virhekoodi:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -3444,14 +3360,12 @@ msgid "Fetching:" msgstr "Noudetaan:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Resolving.." -msgstr "Tallennetaan..." +msgid "Resolving..." +msgstr "Selvitetään..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "Virhe tallennettaessa resurssia!" +msgstr "Virhe pyynnön luonnissa" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3462,9 +3376,8 @@ msgid "Retry" msgstr "Yritä uudelleen" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Download Error" -msgstr "Lataa" +msgstr "Latausvirhe" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" @@ -3514,7 +3427,7 @@ msgid "Site:" msgstr "Sivu:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Tuki..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3585,36 +3498,31 @@ msgstr "Siirrä keskikohtaa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Action" -msgstr "Siirrä " +msgstr "Siirrä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move vertical guide" msgstr "Siirrä pystysuuntaista apuviivaa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new vertical guide" -msgstr "Luo uusi skripti" +msgstr "Luo uusi pystysuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove vertical guide" -msgstr "Poista muuttuja" +msgstr "Poista pystysuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move horizontal guide" -msgstr "Siirrä pistettä käyrällä" +msgstr "Siirrä vaakasuoraa apuviivaa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create new horizontal guide" -msgstr "Luo uusi skripti" +msgstr "Luo uusi vaakasuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove horizontal guide" -msgstr "Poista virheelliset avaimet" +msgstr "Poista vaakasuora apuviiva" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" @@ -3629,14 +3537,12 @@ msgid "Edit CanvasItem" msgstr "Muokkaa CanvasItemiä" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Anchors only" -msgstr "Ankkuri" +msgstr "Vain ankkurit" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Anchors and Margins" -msgstr "Muuta ankkureita" +msgstr "Muuta ankkureita ja marginaaleja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" @@ -3689,7 +3595,7 @@ msgstr "Klikkaa vaihtaaksesi objektin kääntökeskiötä." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "" +msgstr "Panorointitila" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggles snapping" @@ -3700,9 +3606,8 @@ msgid "Use Snap" msgstr "Käytä tarttumista" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snapping options" -msgstr "Animaation asetukset" +msgstr "Tarttumisen asetukset" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to grid" @@ -3713,6 +3618,7 @@ msgid "Use Rotation Snap" msgstr "Tartu käännettäessä" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Määrittele tarttuminen..." @@ -3729,28 +3635,24 @@ msgid "Smart snapping" msgstr "Älykäs tarttuminen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to parent" -msgstr "Laajenna Parentiin" +msgstr "Tartu isäntään" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to node anchor" msgstr "Tartu noden ankkuriin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to node sides" -msgstr "Tartu noden sivustoihin" +msgstr "Tartu noden reunoihin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to other nodes" msgstr "Tartu muihin nodeihin" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to guides" -msgstr "Laajenna Parentiin" +msgstr "Tartu apuviivoihin" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3768,7 +3670,7 @@ msgstr "Varmistaa ettei objektin lapsia voi valita." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "" +msgstr "Palauttaa objektin aliobjektien mahdollisuuden tulla valituksi." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Bones" @@ -3792,9 +3694,8 @@ msgstr "Tyhjennä IK ketju" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View" -msgstr "Näytä/Tarkastele" +msgstr "Näytä" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3802,9 +3703,8 @@ msgid "Show Grid" msgstr "Näytä ruudukko" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Helpers" -msgstr "Näytä luut" +msgstr "Näytä avustimet" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -3815,14 +3715,12 @@ msgid "Show Guides" msgstr "Näytä apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "Näytä origo" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 näyttöruutu" +msgstr "Näytä näyttöikkuna" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3883,11 +3781,11 @@ msgstr "Lisätään %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" -msgstr "" +msgstr "Ok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Ei voida luoda ilmentymiä useasta nodesta ilman juurta." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3897,7 +3795,7 @@ msgstr "Luo Node" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" -msgstr "Virhe luotaessa instanssia kohteesta %s" +msgstr "Virhe luotaessa ilmentymää kohteesta %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change default type" @@ -3921,19 +3819,17 @@ msgstr "Aseta kahva" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Remove item %d?" -msgstr "" +msgstr "Poistetaanko kohde %d?" #: editor/plugins/cube_grid_theme_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Item" -msgstr "Lisää" +msgstr "Lisää kohde" #: editor/plugins/cube_grid_theme_editor_plugin.cpp -#, fuzzy msgid "Remove Selected Item" -msgstr "Poista valitut" +msgstr "Poista valitut kohteet" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" @@ -3952,17 +3848,16 @@ msgid "Flat1" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease in" -msgstr "Framen valinta" +msgstr "Kiihdytä alussa" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "" +msgstr "Hidasta lopussa" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "" +msgstr "Pehmeä askellus" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" @@ -4002,7 +3897,7 @@ msgstr "Poista käyrän piste" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" -msgstr "" +msgstr "Aseta käyrälle lineaarinen tangentti" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" @@ -4023,22 +3918,22 @@ msgstr "Muokkaa väriliukumaa" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" -msgstr "" +msgstr "Kohde %d" #: editor/plugins/item_list_editor_plugin.cpp msgid "Items" -msgstr "" +msgstr "Sisältö" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "" +msgstr "Sisällön muokkaus" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "" "No OccluderPolygon2D resource on this node.\n" "Create and assign one?" msgstr "" -"Tälle nodelle ei ole OccluderPolygon2D:tä.\n" +"Tälle nodelle ei ole OccluderPolygon2D resurssia.\n" "Luodaanko sellainen?" #: editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -4059,7 +3954,7 @@ msgstr "VHP: Siirrä pistettä." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Ctrl+LMB: Split Segment." -msgstr "Ctrl+Vasen hiirennappi: Puolita osa" +msgstr "Ctrl+Vasen hiirennappi: Puolita osa." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "RMB: Erase Point." @@ -4067,32 +3962,31 @@ msgstr "OHP: Pyyhi piste." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Mesh on tyhjä!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" -msgstr "" +msgstr "Luo konveksi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "This doesn't work on scene root!" -msgstr "Tämä ei toimi root-Scenessä!" +msgstr "Tämä ei toimi skenen juuressa!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Shape" -msgstr "" +msgstr "Luo konkaavi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape" -msgstr "" +msgstr "Luo konveksi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "" +msgstr "Luo navigointiverkko" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." @@ -4108,19 +4002,19 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "" +msgstr "Mallilla ei ole UV-kanavaa tällä kerroksella" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "" +msgstr "MeshInstance nodelta puuttuu Mesh!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "" +msgstr "Meshillä ei ole pintaa, josta ääriviivat voitaisiin luoda!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Meshin primitiivityyppi ei ole PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4136,33 +4030,31 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "" +msgstr "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Static Body" -msgstr "" +msgstr "Luo konveksi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "" +msgstr "Luo konkaavi törmäysmuoto sisareksi" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Collision Sibling" -msgstr "" +msgstr "Luo konveksi törmäysmuoto sisareksi" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV1" -msgstr "Näytä/Tarkastele" +msgstr "Näytä UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "View UV2" -msgstr "Näytä/Tarkastele" +msgstr "Näytä UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" @@ -4199,19 +4091,19 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "" +msgstr "Pinnan lähdettä ei ole määritelty." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (virheellinen polku)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (geometria puuttuu)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "" +msgstr "Pinnan lähde on virheellinen (tahkot puuttuvat)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Parent has no solid faces to populate." @@ -4227,11 +4119,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "" +msgstr "Valitse kohdepinta:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "" +msgstr "Täytä pinta" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -4239,7 +4131,7 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "Kohdepinta:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" @@ -4279,15 +4171,15 @@ msgstr "" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake!" -msgstr "" +msgstr "Kehitä!" #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Bake the navigation mesh." -msgstr "" +msgstr "Kehitä navigointiverkko." #: editor/plugins/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Tyhjennä navigointiverkko." #: editor/plugins/navigation_mesh_generator.cpp msgid "Setting up Configuration..." @@ -4299,45 +4191,43 @@ msgstr "Lasketaan ruudukon kokoa..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Luodaan korkeuskenttää..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Marking walkable triangles..." -msgstr "Varastoidaan paikalliset muutokset..." +msgstr "Merkitään kuljettavat kolmiot..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Rakennetaan tiivistä korkeuskenttää..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Syövytetään kuljettavaa aluetta..." #: editor/plugins/navigation_mesh_generator.cpp -#, fuzzy msgid "Partitioning..." -msgstr "Varoitus" +msgstr "Ositetaan..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Luodaan korkeuskäyriä..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Luodaan polymesh..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Muunnetaan alkuperäiseksi navigointiverkoksi..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Navigointiverkon generaattorin asetukset:" #: editor/plugins/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Jäsentää geometriaa…" #: editor/plugins/navigation_mesh_generator.cpp msgid "Done!" @@ -4345,13 +4235,12 @@ msgstr "Valmis!" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "Luo navigointipolygoni" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generating AABB" -msgstr "Luo AABB" +msgstr "Luodaan AABB" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -4362,12 +4251,12 @@ msgid "Error loading image:" msgstr "Virhe ladattaessa kuvaa:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "" +msgid "No pixels with transparency > 128 in image..." +msgstr "Kuvassa ei ole pikseleitä, joiden läpinäkyvyys on enemmän kuin 128." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "" +msgstr "Kartoita näkyvä alue" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" @@ -4375,7 +4264,7 @@ msgstr "Lataa emissiomaski" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "" +msgstr "Tyhjennä emissiomaski" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -4388,18 +4277,16 @@ msgstr "Luotujen pisteiden määrä:" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generation Time (sec):" -msgstr "Keskimääräinen aika (sek)" +msgstr "Luontiaika (s):" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" msgstr "Emission maski" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Capture from Pixel" -msgstr "Luo Scenestä" +msgstr "Nappaa pikselistä" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" @@ -4411,11 +4298,11 @@ msgstr "Node ei sisällä geometriaa." #: editor/plugins/particles_editor_plugin.cpp msgid "Node does not contain geometry (faces)." -msgstr "" +msgstr "Nodelta puuttuu geometria (tahkot)." #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "" +msgstr "Tarvitaan 'ParticlesMaterial' tyyppinen prosessorimateriaali." #: editor/plugins/particles_editor_plugin.cpp msgid "Faces contain no area!" @@ -4431,11 +4318,11 @@ msgstr "Luo AABB" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "" +msgstr "Luo säteilypisteet meshistä" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Luo säteilypisteet nodesta" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -4460,26 +4347,23 @@ msgstr "Äänenvoimakkuus" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "Emission lähde:" +msgstr "Emission lähde: " #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility AABB" -msgstr "Luo AABB" +msgstr "Kartoita näkyvä alue" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" msgstr "Poista pisteet käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control from Curve" -msgstr "Poista pisteet käyrästä" +msgstr "Poista lähtöohjain käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control from Curve" -msgstr "Poista pisteet käyrästä" +msgstr "Poista tulo-ohjain käyrästä" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4492,11 +4376,11 @@ msgstr "Siirrä pistettä käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "" +msgstr "Siirrä tulo-ohjainta käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "" +msgstr "Siirrä lähtöohjainta käyrällä" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -4547,19 +4431,16 @@ msgid "Curve Point #" msgstr "Käyrän piste #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyräpisteen sijainti" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyrän aloitussijainti" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Siirrä pistettä" +msgstr "Aseta käyrän lopetussijainti" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4570,14 +4451,12 @@ msgid "Remove Path Point" msgstr "Poista polun piste" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Poista polygoni ja piste" +msgstr "Poista lähtöohjaimen piste" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove In-Control Point" -msgstr "Poista polygoni ja piste" +msgstr "Poista tulo-ohjaimen piste" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -4682,7 +4561,7 @@ msgstr "Avaa editorissa" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp msgid "Instance:" -msgstr "" +msgstr "Ilmentymä:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp @@ -4703,21 +4582,16 @@ msgid "Paste" msgstr "Liitä" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Resurssi" +msgstr "Resurssien esilataaja" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Files" -msgstr "Tyhjennä luut" +msgstr "Tyhjennä viimeisimpien tiedostojen luettelo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close and save changes?" -msgstr "" -"Sulje ja tallenna muutokset?\n" -"\"" +msgstr "Sulje ja tallenna muutokset?" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -4740,7 +4614,7 @@ msgid "Import Theme" msgstr "Tuo teema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Tallenna teema nimellä..." #: editor/plugins/script_editor_plugin.cpp @@ -4748,9 +4622,8 @@ msgid " Class Reference" msgstr " Luokan referenssi" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Lajittele:" +msgstr "Lajittele" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp @@ -4786,15 +4659,13 @@ msgstr "Tallenna kaikki" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "" +msgstr "Lataa skripti uudelleen kevyesti" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Copy Script Path" -msgstr "Kopioi polku" +msgstr "Kopioi skriptin polku" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Show In File System" msgstr "Näytä tiedostojärjestelmässä" @@ -4840,7 +4711,7 @@ msgstr "Näytä/piilota skriptipaneeli" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Etsi..." #: editor/plugins/script_editor_plugin.cpp @@ -4931,16 +4802,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Vain tiedostojärjestelmän resursseja voi raahata ja pudottaa." #: editor/plugins/script_text_editor.cpp msgid "Pick Color" msgstr "Poimi väri" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Case" -msgstr "Muunnetaan kuvia" +msgstr "Muunna aakkoslaji" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4952,7 +4822,7 @@ msgstr "Pienet kirjaimet" #: editor/plugins/script_text_editor.cpp msgid "Capitalize" -msgstr "" +msgstr "Isot alkukirjaimet" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -4971,9 +4841,8 @@ msgid "Select All" msgstr "Valitse kaikki" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "Poista piste" +msgstr "Poista rivi" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -4988,9 +4857,8 @@ msgid "Toggle Comment" msgstr "Näytä/Piilota kommentit" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "Avaa rivi" +msgstr "Laskosta tai avaa rivi" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -5010,7 +4878,7 @@ msgstr "Täydennä symbooli" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "" +msgstr "Poista välilyönnit lopusta" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent To Spaces" @@ -5027,7 +4895,7 @@ msgstr "Automaattinen sisennys" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "" +msgstr "Aseta tai poista breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" @@ -5042,106 +4910,104 @@ msgid "Goto Previous Breakpoint" msgstr "Mene edelliseen breakpointiin" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Uppercase" -msgstr "Muunna..." +msgstr "Muunna isoiksi kirjaimiksi" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert To Lowercase" -msgstr "Muunna..." +msgstr "Muunna pieniksi kirjaimiksi" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Etsi edellinen" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Korvaa..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Mene funktioon..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Mene riville..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "Asiayhteydellinen ohje" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" -msgstr "" +msgstr "Sävytin" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Constant" -msgstr "" +msgstr "Muuta skalaarivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Constant" -msgstr "" +msgstr "Muuta vektorivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Constant" -msgstr "" +msgstr "Muuta RGB-värivakiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Operator" -msgstr "" +msgstr "Muuta skalaarioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Operator" -msgstr "" +msgstr "Muuta vektorioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Scalar Operator" -msgstr "" +msgstr "Muuta vektori- ja skalaarioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Operator" -msgstr "" +msgstr "Muuta RGB-värioperaattoria" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Toggle Rot Only" -msgstr "" +msgstr "Vain kierto" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Function" -msgstr "" +msgstr "Muuta skalaarifunktiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Function" -msgstr "" +msgstr "Muuta vektorifunktiota" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Scalar Uniform" -msgstr "" +msgstr "Muuta skalaariuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Vec Uniform" -msgstr "" +msgstr "Muuta vektoriuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change RGB Uniform" -msgstr "" +msgstr "Muuta RGB-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Default Value" -msgstr "" +msgstr "Muuta oletusarvoa" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change XForm Uniform" -msgstr "" +msgstr "Muuta XForm-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Texture Uniform" -msgstr "" +msgstr "Muuta tekstuuriuniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Cubemap Uniform" -msgstr "" +msgstr "Muuta Cubemap-uniformia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Change Comment" @@ -5149,7 +5015,7 @@ msgstr "Vaihda kommenttia" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Color Ramp" -msgstr "" +msgstr "Lisää tai poista väriluiskalta" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" @@ -5165,11 +5031,11 @@ msgstr "Vaihda syötteen nimi" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Connect Graph Nodes" -msgstr "" +msgstr "Yhdistä graafin nodet" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Disconnect Graph Nodes" -msgstr "" +msgstr "Erota graafin nodet" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Remove Shader Graph Node" @@ -5181,7 +5047,7 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Duplicate Graph Node(s)" -msgstr "" +msgstr "Kahdenna graafin node(t)" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Delete Shader Graph Node(s)" @@ -5189,11 +5055,11 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Cyclic Connection Link" -msgstr "" +msgstr "Virhe: syklinen kytkentä" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Error: Missing Input Connections" -msgstr "" +msgstr "Virhe: syöteliitännät puuttuvat" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add Shader Graph Node" @@ -5213,29 +5079,27 @@ msgstr "Muunnos keskeytetty." #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." -msgstr "" +msgstr "X-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "Y-Axis Transform." -msgstr "" +msgstr "Y-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "Z-Axis Transform." -msgstr "" +msgstr "Z-akselin muunnos." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Näkymätason muunnos." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " -msgstr "Skaalaus:" +msgstr "Skaalataan: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "Siirtymä" +msgstr "Siirretään: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -5251,35 +5115,31 @@ msgstr "Animaatioavain lisätty." #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "" +msgstr "Kappaleita piirretty" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" -msgstr "Päivitä muutokset" +msgstr "Materiaalimuutokset" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Päivitä muutokset" +msgstr "Sävytinmuutokset" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "Päivitä muutokset" +msgstr "Pintamuutokset" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "" +msgstr "Piirtokutsuja" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices" -msgstr "Ominaisuudet:" +msgstr "Kärkipisteet" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -5322,9 +5182,8 @@ msgid "Rear View." msgstr "Takanäkymä." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear" -msgstr "Taka/perä" +msgstr "Taka" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align with view" @@ -5336,7 +5195,7 @@ msgstr "Asia kunnossa :(" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "" +msgstr "Isäntää, jonka alle ilmentymä luodaan, ei ole valittu." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." @@ -5352,76 +5211,67 @@ msgstr "Näytä rautalankamalli" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "Näytä ylipiirto" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Display Unshaded" -msgstr "Näytä varjoton" +msgstr "Näytä sävyttämätön" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Environment" -msgstr "Ympäristö" +msgstr "Näytä ympäristö" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Gizmos" -msgstr "Näytä ruudukko" +msgstr "Näytä muokkaimet" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" msgstr "Näytä tiedot" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View FPS" -msgstr " Tiedostot" +msgstr "Näytä FPS" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Half Resolution" -msgstr "Skaalaa valintaa" +msgstr "Puolikas näyttötarkkuus" #: editor/plugins/spatial_editor_plugin.cpp msgid "Audio Listener" -msgstr "" +msgstr "Äänikuuntelija" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Doppler Enable" -msgstr "Ota käyttöön" +msgstr "Doppler käytössä" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "Liiku vasemmalle" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "Liiku oikealle" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Mene eteenpäin" +msgstr "Liiku eteenpäin" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Taaksepäin" +msgstr "Liiku taaksepäin" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "Liiku ylös" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Rulla alas." +msgstr "Liiku alas" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Liikkumisen nopeussäädin" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5461,9 +5311,8 @@ msgid "Local Space Mode (%s)" msgstr "Skaalaustila (R)" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Mode (%s)" -msgstr "Tarttumisen tila:" +msgstr "Tarttumisen tila (%s)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -5510,41 +5359,32 @@ msgid "Align Selection With View" msgstr "Kohdista valinta näkymään" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Valitse" +msgstr "Valintatyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "Siirrä" +msgstr "Siirtotyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "Ctrl: Pyöritä/kierrä" +msgstr "Kiertotyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "Skaalaus:" +msgstr "Skaalaustyökalu" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" -msgstr "Siirry koko näytön tilaan" +msgstr "Kytke liikkuminen päälle/pois" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "Muunna" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Määrittele tarttuminen..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "" +msgid "Transform Dialog..." +msgstr "Muunnosikkuna..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5585,7 +5425,7 @@ msgstr "Asetukset" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" -msgstr "" +msgstr "Luurankomuokkaimen näkyvyys" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -5613,19 +5453,19 @@ msgstr "Näkökentän perspektiivi (ast.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "Minimi etäisyys:" +msgstr "Pienin etäisyys:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "Maksimi etäisyys:" +msgstr "Suurin etäisyys:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Muunnoksen muutos" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "Käännä:" +msgstr "Siirrä:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" @@ -5637,7 +5477,7 @@ msgstr "Skaalaa (kuvasuhde):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "Muunnoksen tyyppi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" @@ -5657,7 +5497,7 @@ msgstr "Lisää frame" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "" +msgstr "Resurssileikepöytä on tyhjä tai ei sisällä tekstuuria!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -5688,9 +5528,8 @@ msgid "Speed (FPS):" msgstr "Nopeus (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Loop" -msgstr "Toisto" +msgstr "Toista" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" @@ -5705,14 +5544,12 @@ msgid "Insert Empty (After)" msgstr "Syötä tyhjä (jälkeen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Poista Node(t)" +msgstr "Siirrä (ennen)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (After)" -msgstr "Siirry vasemmalle" +msgstr "Siirrä (jälkeen)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy @@ -5804,7 +5641,7 @@ msgid "Remove All" msgstr "Poista kaikki" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Muokkaa teemaa..." #: editor/plugins/theme_editor_plugin.cpp @@ -5813,11 +5650,11 @@ msgstr "Teeman muokkaus." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "" +msgstr "Lisää luokka" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "" +msgstr "Poista luokka" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" @@ -5876,7 +5713,7 @@ msgstr "Asetukset" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "On,Monia,Useita,Asetuksia" #: editor/plugins/theme_editor_plugin.cpp @@ -5922,7 +5759,7 @@ msgstr "Framen valinta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "" +msgstr "Täytä ruudukko" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -5930,7 +5767,7 @@ msgstr "Viivan piirto" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Suorakaidetäyttö" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -5938,11 +5775,11 @@ msgstr "Täyttö" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" -msgstr "" +msgstr "Tyhjennä ruudukko" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" -msgstr "" +msgstr "Tyhjennä valinta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" @@ -5950,7 +5787,7 @@ msgstr "Etsi tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "" +msgstr "Transponoi" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" @@ -6012,7 +5849,7 @@ msgstr "Luo skenestä" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Yhdistä skenestä" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" @@ -6034,6 +5871,8 @@ msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" +"Hiiren vasen: aseta bitti päälle.\n" +"Hiiren oikea: aseta bitti pois päältä." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -6054,7 +5893,7 @@ msgstr "Suoritettava" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" -msgstr "" +msgstr "Poista päivitys '%s' listasta?" #: editor/project_export.cpp msgid "Delete preset '%s'?" @@ -6062,14 +5901,14 @@ msgstr "Poista esiasetus '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " -msgstr "" +msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia: " #: editor/project_export.cpp msgid "Presets" msgstr "Esiasetukset" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Lisää..." #: editor/project_export.cpp @@ -6112,25 +5951,23 @@ msgstr "" #: editor/project_export.cpp msgid "Patches" -msgstr "" +msgstr "Päivitykset" #: editor/project_export.cpp msgid "Make Patch" -msgstr "Tee patchi" +msgstr "Luo päivitys" #: editor/project_export.cpp -#, fuzzy msgid "Features" -msgstr "Tekstuuri" +msgstr "Ominaisuudet" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "" +msgstr "Mukautettu (pilkulla erotettu):" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Metodilista:" +msgstr "Ominaisuuslista:" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -6142,7 +5979,7 @@ msgstr "Tälle alustalle ei löytynyt vientipohjia:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "" +msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia:" #: editor/project_export.cpp msgid "Export With Debug" @@ -6157,9 +5994,8 @@ msgid "Please choose a 'project.godot' file." msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "Ole hyvä ja valitse 'project.godot' tiedosto." +msgstr "Ole hyvä ja valitse tyhjä kansio." #: editor/project_manager.cpp msgid "Imported Project" @@ -6167,12 +6003,16 @@ msgstr "Tuotu projekti" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Projektin nimi:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Kansiota ei voitu luoda." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Polusta löytyy jo kansio annetulla nimellä." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6216,34 +6056,30 @@ msgid "Import Existing Project" msgstr "Tuo olemassaoleva projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Tuo & Avaa" +msgstr "Tuo ja muokkaa" #: editor/project_manager.cpp msgid "Create New Project" msgstr "Luo uusi projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Create & Edit" -msgstr "Luo säteilijä/lähetin" +msgstr "Luo ja muokkaa" #: editor/project_manager.cpp msgid "Install Project:" msgstr "Asenna projekti:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Asenna" +msgstr "Asenna ja muokkaa" #: editor/project_manager.cpp msgid "Project Name:" msgstr "Projektin nimi:" #: editor/project_manager.cpp -#, fuzzy msgid "Create folder" msgstr "Luo kansio" @@ -6337,14 +6173,12 @@ msgid "Exit" msgstr "Poistu" #: editor/project_manager.cpp -#, fuzzy msgid "Restart Now" -msgstr "Käynnistä uudelleen (s):" +msgstr "Käynnistä uudelleen nyt" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" -msgstr "Yhdistä..." +msgstr "Projektia ei voida käynnistää" #: editor/project_manager.cpp msgid "" @@ -6356,7 +6190,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "Näppäin... " +msgstr "Näppäin " #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -6371,10 +6205,13 @@ msgid "Mouse Button" msgstr "Hiiren painike" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Virheellinen toiminnon nimi. Se ei voi olla tyhjä eikä voi sisältää merkkejä " +"'/', ':', '=', '\\' tai '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6401,7 +6238,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Paina näppäintä..." #: editor/project_settings_editor.cpp @@ -6466,9 +6303,8 @@ msgid "Erase Input Action Event" msgstr "Tyhjennä syöttötapahtuma" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Event" -msgstr "Lisää tyhjä" +msgstr "Lisää tapahtuma" #: editor/project_settings_editor.cpp msgid "Device" @@ -6504,7 +6340,7 @@ msgstr "Lisää yleinen ominaisuus" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "Valitse asetus ensin!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -6512,12 +6348,11 @@ msgstr "Ominaisuutta '%s' ei löytynyt." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "Asetus '%s' on sisäinen, eikä sitä voi poistaa." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Poista syöte" +msgstr "Poista kohde" #: editor/project_settings_editor.cpp msgid "Already existing" @@ -6537,7 +6372,7 @@ msgstr "Asetukset tallennettu onnistuneesti." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Ominaisuuden ohitus" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6549,37 +6384,35 @@ msgstr "Poista käännös" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Lisää korvaavuuspolku" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Lisää resurssin korvaavuus" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Vaihda resurssin korvaavuuskieli" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Poista resurssin korvaavuus" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Poista resurssin korvaavuusvalinta" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Muuta kameran kokoa" +msgstr "Vaihdettu kielisuodatin" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "" +msgstr "Vaihdettu kielisuodattimen tila" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Project Settings (project.godot)" -msgstr "Projektin asetukset" +msgstr "Projektin asetukset (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -6590,12 +6423,12 @@ msgid "Property:" msgstr "Ominaisuus:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "" +msgid "Override For..." +msgstr "Ohita alustalle..." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Syötekartta" #: editor/project_settings_editor.cpp msgid "Action:" @@ -6623,7 +6456,7 @@ msgstr "Käännökset:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "" +msgstr "Korvaavuudet" #: editor/project_settings_editor.cpp msgid "Resources:" @@ -6631,7 +6464,7 @@ msgstr "Resurssit:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Korvaavuudet kielikohtaisesti:" #: editor/project_settings_editor.cpp msgid "Locale" @@ -6667,15 +6500,15 @@ msgstr "Valitse näyttöruutu" #: editor/property_editor.cpp msgid "Ease In" -msgstr "" +msgstr "Kiihdytä alussa" #: editor/property_editor.cpp msgid "Ease Out" -msgstr "" +msgstr "Hidasta lopussa" #: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "Nolla" #: editor/property_editor.cpp msgid "Easing In-Out" @@ -6686,21 +6519,20 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Tiedosto..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Hakemisto..." #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "Aseta" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Valitse Node" +msgstr "Valitse node" #: editor/property_editor.cpp msgid "New Script" @@ -6711,9 +6543,8 @@ msgid "New %s" msgstr "Uusi %s" #: editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "Tee luut" +msgstr "Tee ainutkertaiseksi" #: editor/property_editor.cpp msgid "Show in File System" @@ -6738,16 +6569,15 @@ msgstr "Poimi node" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bitti %d, arvo %d." #: editor/property_editor.cpp msgid "On" msgstr "Päällä" #: editor/property_editor.cpp -#, fuzzy msgid "[Empty]" -msgstr "Lisää tyhjä" +msgstr "[Tyhjä]" #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Set" @@ -6771,11 +6601,11 @@ msgstr "Valitse metodi" #: editor/pvrtc_compress.cpp msgid "Could not execute PVRTC tool:" -msgstr "" +msgstr "PVRTC-työkalun suoritus ei onnistunut:" #: editor/pvrtc_compress.cpp msgid "Can't load back converted image using PVRTC tool:" -msgstr "" +msgstr "Muunnettua kuva ei voitu ladata takaisin PVRTC-työkalulla:" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" @@ -6787,7 +6617,7 @@ msgstr "Valitse uusi isäntä:" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Pidä globaali muunnos" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" @@ -6795,7 +6625,7 @@ msgstr "Uusi isäntä" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Käynnistystila:" #: editor/run_settings_dialog.cpp msgid "Current Scene" @@ -6816,37 +6646,39 @@ msgstr "Scenen suorittamisasetukset" #: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp #: scene/gui/dialogs.cpp msgid "OK" -msgstr "" +msgstr "OK" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "" +msgstr "Nodea, jonka alle skenen ilmentymä luodaan, ei ole valittu." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Virhe ladattaessa skeneä paikasta %s" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Skenestä '%s' ei voida luoda ilmentymää, koska nykyinen skene on olemassa " +"jossakin sen nodeista." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "" +msgstr "Luo ilmentymä skenestä tai skeneistä" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +msgstr "Tätä toimenpidettä ei voi tehdä puun juurelle." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Siirrä node isännän alle" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Siirrä nodet isännän alle" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -6858,27 +6690,27 @@ msgstr "Poista Node(t)?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Ei voi tehdä juurinodelle." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Tätä toimintoa ei voi tehdä skenejen ilmentymille." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Tallenna uusi scene nimellä..." #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "Muokattavat alinodet" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Lataa paikanpitäjäksi" #: editor/scene_tree_dock.cpp msgid "Discard Instancing" -msgstr "" +msgstr "Hylkää ilmentymä" #: editor/scene_tree_dock.cpp msgid "Makes Sense!" @@ -6901,6 +6733,8 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Skeneä ei voitu tallentaa. Mahdollisia riippuvuuksia (ilmentymiä) ei voida " +"toteuttaa." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -6908,16 +6742,15 @@ msgstr "Virhe tallennettaessa sceneä." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Virhe kahdennettaessa skeneä sen tallentamiseksi." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" -msgstr "Resurssit" +msgstr "Aliresurssit" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Poista perintä" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -6929,7 +6762,7 @@ msgstr "Lisää lapsinode" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Luo aliskenen ilmentymä" #: editor/scene_tree_dock.cpp msgid "Change Type" @@ -6949,7 +6782,7 @@ msgstr "Yhdistä scenestä" #: editor/scene_tree_dock.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Tallenna haara skenenä" #: editor/scene_tree_dock.cpp msgid "Copy Node Path" @@ -6968,19 +6801,20 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Luo skenetiedostosta ilmentymän nodeksi. Luo periytetyn skenen jos " +"juurinodea ei ole olemassa." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Suodattimet" +msgstr "Suodata nodeja" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "Liitä uusi tai olemassa oleva skripti valitulle nodelle." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "Poista skripti valitulta nodelta." #: editor/scene_tree_dock.cpp #, fuzzy @@ -6988,13 +6822,12 @@ msgid "Remote" msgstr "Poista" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Local" -msgstr "Skaalaus:" +msgstr "Paikallinen" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Poistetaanko perintä? (Ei voi perua!)" #: editor/scene_tree_dock.cpp msgid "Clear!" @@ -7010,50 +6843,59 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Noden konfiguroinnin varoitus:" #: editor/scene_tree_editor.cpp msgid "" "Node has connection(s) and group(s)\n" "Click to show signals dock." msgstr "" +"Nodella on liitäntöjä ja ryhmiä\n" +"Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp msgid "" "Node has connections.\n" "Click to show signals dock." msgstr "" +"Nodella on liitäntöjä.\n" +"Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp msgid "" "Node is in group(s).\n" "Click to show groups dock." msgstr "" +"Node kuuluu ryhmään.\n" +"Napsauta näyttääksesi ryhmätelakan." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open script" -msgstr "Seuraava skripti" +msgstr "Avaa skripti" #: editor/scene_tree_editor.cpp msgid "" "Node is locked.\n" "Click to unlock" msgstr "" +"Node on lukittu.\n" +"Napsauta lukituksen avaamiseksi" #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable" msgstr "" +"Alinodet eivät ole valittavissa.\n" +"Napsauta niiden tekemiseksi valittavaksi" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Aseta näkyvyys" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "" +msgstr "Virheellinen noden nimi, seuraavat merkit eivät ole sallittuja:" #: editor/scene_tree_editor.cpp msgid "Rename Node" @@ -7061,25 +6903,23 @@ msgstr "Nimeä Node uudelleen" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Skenepuu (nodet):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Noden konfigurointivaroitus!" #: editor/scene_tree_editor.cpp msgid "Select a Node" msgstr "Valitse Node" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Virhe ladattaessa kuvaa:" +msgstr "Virhe ladattaessa mallia '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Ei voitu luoda skriptiä tiedostojärjestelmään." +msgstr "Virhe - Ei voitu luoda skriptiä tiedostojärjestelmään." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -7087,7 +6927,7 @@ msgstr "Virhe ladattaessa skripti %s:stä" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "Ei mitään" #: editor/script_create_dialog.cpp msgid "Path is empty" @@ -7099,16 +6939,15 @@ msgstr "Polku ei ole paikallinen" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Virheellinen kantapolku" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" msgstr "Samanniminen hakemisto on jo olemassa" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Tiedosto on jo olemassa, korvaa?" +msgstr "Tiedosto on jo olemassa, käytetään uudelleen" #: editor/script_create_dialog.cpp msgid "Invalid extension" @@ -7116,12 +6955,11 @@ msgstr "Virheellinen laajennus" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Valittu väärä tiedostopääte" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Virheellinen polku." +msgstr "Virheellinen polku" #: editor/script_create_dialog.cpp msgid "Invalid class name" @@ -7129,51 +6967,45 @@ msgstr "Virheellinen luokan nimi" #: editor/script_create_dialog.cpp msgid "Invalid inherited parent name or path" -msgstr "" +msgstr "Virheellinen peritty isännän nimi tai polku" #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Skripti kelpaa" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Sallittu: a-z, A-Z, 0-9 ja _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Sisäänrakennettu skripti (skenetiedostoon)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Luo uusi skripti" +msgstr "Luo uusi skriptitiedosto" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load existing script file" -msgstr "Lataa olemassaoleva skripti" +msgstr "Lataa olemassaoleva skriptitiedosto" #: editor/script_create_dialog.cpp msgid "Language" msgstr "Kieli" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Perii:" +msgstr "Perii" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Luokan nimi:" +msgstr "Luokan nimi" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Poista malli" +msgstr "Malli" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script" msgstr "Sisäänrakennettu skripti" @@ -7182,9 +7014,8 @@ msgid "Attach Node Script" msgstr "Liitä Noden skripti" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Poista" +msgstr "Etäinen " #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7208,7 +7039,7 @@ msgstr "Funktio:" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgstr "Valitse yksi tai useampi kohde listasta näyttääksesi graafin." #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" @@ -7216,20 +7047,19 @@ msgstr "Virheet" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" -msgstr "Lapsiprosessi yhdistetty" +msgstr "Aliprosessi yhdistetty" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Lataa virheet" +msgstr "Kopiointivirhe" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "Tarkastele edellistä instanssia" +msgstr "Tarkastele edellistä ilmentymää" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "Tarkastele seuraavaa instanssia" +msgstr "Tarkastele seuraavaa ilmentymää" #: editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -7245,15 +7075,15 @@ msgstr "Virheet:" #: editor/script_editor_debugger.cpp msgid "Stack Trace (if applicable):" -msgstr "" +msgstr "Metodipino (jos soveltuva):" #: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profiloija" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Monitoroija" #: editor/script_editor_debugger.cpp msgid "Value" @@ -7261,11 +7091,11 @@ msgstr "Arvo" #: editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Monitoroijat" #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Lista näyttömuistin käytöstä resurssikohtaisesti:" #: editor/script_editor_debugger.cpp msgid "Total:" @@ -7273,11 +7103,11 @@ msgstr "Yhteensä:" #: editor/script_editor_debugger.cpp msgid "Video Mem" -msgstr "" +msgstr "Näyttömuisti" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Resurssipolku" #: editor/script_editor_debugger.cpp msgid "Type" @@ -7293,23 +7123,23 @@ msgstr "Käyttö" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Sekalaista" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Napsautettu kontrolli:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Napsautetun kontrollin tyyppi:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Juuren suora muokkaus:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "Aseta puusta" #: editor/settings_config_dialog.cpp msgid "Shortcuts" @@ -7317,7 +7147,7 @@ msgstr "Pikakuvakkeet" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Sidonta" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -7325,7 +7155,7 @@ msgstr "Muuta valon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Muuta AudioStreamPlayer3D noden suuntausta" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -7337,19 +7167,19 @@ msgstr "Muuta kameran kokoa" #: editor/spatial_editor_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "Muuta pallon sädettä" +msgstr "Muuta pallomuodon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "" +msgstr "Muuta laatikkomuodon ulottuvuuksia" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Muuta kapselimuodon sädettä" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Muuta kapselimuodon korkeutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" @@ -7357,11 +7187,11 @@ msgstr "Vaihda säteen muodon pituutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier Extents" -msgstr "" +msgstr "Muuta ilmoittajan kattavuutta" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Muuta partikkelien AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" @@ -7369,20 +7199,19 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Valitse dynaaminen kirjasto tälle kohteelle" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Valitse kirjaston riippuvuudet tälle kohteelle" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Poista käyrän piste" +msgstr "Poista nykyinen kohde" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Kaksoisnapsauta luodaksesi uuden kohteen" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -7393,119 +7222,117 @@ msgid "Platform" msgstr "Alusta" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dynamic Library" -msgstr "Vie kirjasto" +msgstr "Dynaaminen kirjasto" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Lisää arkkitehtuurikohde" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "GDNativeLibrary" -msgstr "Vie kirjasto" +msgstr "GDNativeLibrary" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Library" -msgstr "Vie kirjasto" +msgstr "Kirjasto" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Status" -msgstr "Tila:" +msgstr "Tila" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Kirjastot: " #: modules/gdnative/register_types.cpp +#, fuzzy msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" +"Virheellinen tyyppiargumentti convert() metodille, käytä TYPE_* vakioita." #: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Ei tarpeeksi tavuja tavujen purkamiseksi tai virheellinen formaatti." #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" -msgstr "" +msgstr "askeleen argumentti on nolla!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" -msgstr "" +msgstr "Ei ole skripti, jolla on ilmentymä" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a script" -msgstr "" +msgstr "Ei pohjaudu skriptiin" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a resource file" -msgstr "" +msgstr "Ei pohjaudu resurssitiedostoon" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "" +msgstr "Virheellinen ilmentymän sanakirjaformaatti (puuttuu @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" +"Virheellinen ilmentymän sanakirjaformaatti (ei voida ladata skriptiä polusta " +"@path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" msgstr "" +"Virheellinen ilmentymän sanakirjaformaatti (virheellinen skripti kohdassa " +"@path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "" +msgstr "Virheellinen ilmentymän sanakirja (virheelliset aliluokat)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objektille ei voida määrittää pituutta." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "Seuraava välilehti" +msgstr "Seuraava taso" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Edellinen välilehti" +msgstr "Edellinen taso" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "Taso:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "" +msgstr "Seuraava kerros" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Floor" -msgstr "Edellinen välilehti" +msgstr "Edellinen kerros" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" -msgstr "" +msgstr "Kerros:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Poista valitut" +msgstr "Poista valinta" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Duplicate Selection" -msgstr "Monista valinta" +msgstr "Kahdenna valinta" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7518,17 +7345,16 @@ msgid "Snap View" msgstr "Huippunäkymä" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Poistettu käytöstä" +msgstr "Leikkaus poistettu käytöstä" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Leikkaa yläpuolelta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Leikkaa alapuolelta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" @@ -7574,23 +7400,20 @@ msgid "Cursor Clear Rotation" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Luo uusi" +msgstr "Luo alue" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Luo uusi projekti" +msgstr "Luo ulkoliitin" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Erase Area" -msgstr "" +msgstr "Tyhjennä alue" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Valinta keskikohtaan" +msgstr "Tyhjennä valinta" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -7598,72 +7421,64 @@ msgid "GridMap Settings" msgstr "Näyttöruudun asetukset" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance:" -msgstr "Poimi tile" +msgstr "Poimi etäisyys:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Luokan nimi ei voi olla varattu avainsana" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "" +msgstr "Luodaan ratkaisua..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." msgstr "Luodaan C# projekti..." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create solution." -msgstr "Ääriviivoja ei voitu luoda!" +msgstr "Ratkaisun luonti epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to save solution." -msgstr "Resurssin lataaminen epäonnistui." +msgstr "Ratkaisun tallennus epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Done" -msgstr "Valmis!" +msgstr "Valmis" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Failed to create C# project." -msgstr "Resurssin lataaminen epäonnistui." +msgstr "C# projektin luonti epäonnistui." #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "Lisätietoja C# tuesta" #: modules/mono/editor/godotsharp_editor.cpp -#, fuzzy msgid "Create C# solution" -msgstr "Luo ääriviivat" +msgstr "Luo C# ratkaisu" #: modules/mono/editor/mono_bottom_panel.cpp msgid "Builds" -msgstr "" +msgstr "Käännökset" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Build Project" -msgstr "Uusi projekti" +msgstr "Käännä projekti" #: modules/mono/editor/mono_bottom_panel.cpp -#, fuzzy msgid "Warnings" -msgstr "Varoitus" +msgstr "Varoitukset" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "Sisemmän poikkeuksen kutsupinon loppu" #: modules/visual_script/visual_script.cpp msgid "" @@ -7682,6 +7497,8 @@ msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" +"Paluuarvo täytyy sijoittaa työmuistin ensimmäiselle elementille! Ole hyvä ja " +"korjaa nodesi." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -7693,16 +7510,15 @@ msgstr "" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " -msgstr "" +msgstr "Pinon ylivuoto pinosyvyydellä: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "" +msgstr "Muuta signaalin argumentit" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Vaihda taulukon arvon tyyppiä" +msgstr "Vaihda argumentin tyyppiä" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" @@ -7710,12 +7526,11 @@ msgstr "Vaihda argumentin nimi" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "" +msgstr "Aseta muuttujan oletusarvo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Muokkaa muuttujaa:" +msgstr "Aseta muuttujan tyyppi" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7766,13 +7581,12 @@ msgid "Add Node" msgstr "Lisää Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Poista virheelliset avaimet" +msgstr "Poista VisualScript nodet" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "" +msgstr "Kahdenna VisualScript nodet" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -7800,7 +7614,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "" +msgstr "Lisää esiladattu node" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -7808,31 +7622,27 @@ msgstr "Lisää Nodet puusta" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "" +msgstr "Lisää palauttajaominaisuus" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "" +msgstr "Lisää asettajaominaisuus" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Muuta tyyppiä" +msgstr "Muuta kantatyyppiä" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Poista Node(t)" +msgstr "Siirrä node(t)" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Poista muuttuja" +msgstr "Poista VisualScript node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Yhdistä Nodeen:" +msgstr "Kytke nodet" #: modules/visual_script/visual_script_editor.cpp msgid "Condition" @@ -7840,7 +7650,7 @@ msgstr "Ehtolause" #: modules/visual_script/visual_script_editor.cpp msgid "Sequence" -msgstr "" +msgstr "Sarja" #: modules/visual_script/visual_script_editor.cpp msgid "Switch" @@ -7868,44 +7678,39 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "" +msgstr "Skriptillä on jo funktio '%s'" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Input Value" -msgstr "Vaihda syötteen nimi" +msgstr "Vaihda syötteen arvo" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Ei voida kopioida funktionodea." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Clipboard is empty!" -msgstr "Resurssien leikepöytä on tyhjä!" +msgstr "Leikepöytä on tyhjä!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Liitä Nodet" +msgstr "Liitä VisualScript nodet" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Poista funktio" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Muokkaa muuttujaa:" +msgstr "Muokkaa muuttujaa" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Poista muuttuja" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Muokataan signaalia:" +msgstr "Muokkaa signaalia" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7921,7 +7726,7 @@ msgstr "Muokataan signaalia:" #: modules/visual_script/visual_script_editor.cpp msgid "Base Type:" -msgstr "" +msgstr "Kantatyyppi:" #: modules/visual_script/visual_script_editor.cpp msgid "Available Nodes:" @@ -7929,11 +7734,11 @@ msgstr "Saatavilla olevat Nodet:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit graph" -msgstr "" +msgstr "Valitse tai luo funktio graafin muokkaamiseksi" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Signal Arguments:" -msgstr "" +msgstr "Muokkaa signaalin argumentteja:" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Variable:" @@ -7961,23 +7766,23 @@ msgstr "Liitä Nodet" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " -msgstr "" +msgstr "Syötetyyppi ei ole iteroitavissa: " #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" -msgstr "" +msgstr "Iteraattori muuttui epäkelvoksi" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid: " -msgstr "" +msgstr "Iteraattori muuttui epäkelvoksi: " #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name." -msgstr "" +msgstr "Virheellinen osoitinominaisuuden nimi." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "" +msgstr "Kantaobjekti ei ole Node!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" @@ -7985,11 +7790,11 @@ msgstr "Polku ei vie Nodeen!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "" +msgstr "Virheellinen osoitinominaisuuden nimi '%s' nodessa %s." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr "" +msgstr ": Virheellinen argumentti tyyppiä: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " @@ -7997,21 +7802,24 @@ msgstr ": Virheelliset argumentit: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "" +msgstr "VariableGet ei löytynyt skriptistä: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "" +msgstr "VariableSet ei löytynyt skriptistä: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." msgstr "" +"Mukautetulla nodella ei ole _step() metodia, graafia ei voida käsitellä." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" +"Virheellinen paluuarvo _step() metodilta, täytyy olla kokonaisluku (seq out) " +"tai merkkijono (virhe)." #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8022,46 +7830,44 @@ msgid "Run exported HTML in the system's default browser." msgstr "Suorita viety HTML järjestelmän oletusselaimessa." #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Ei voitu kirjoittaa tiedostoa:\n" +msgstr "Ei voitu kirjoittaa tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Kansiota ei voitu luoda." +msgstr "Mallin avaus vientiin epäonnistui:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Hallitse vietäviä Templateja" +msgstr "Virheellinen vientimalli:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Ei voitu lukea mukautettua HTML tulkkia:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Ei voitu lukea käynnistyskuvan tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Ei voitu lukea tiedostoa:\n" +msgstr "Käytetään oletuskäynnistyskuvaa." #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite to display frames." msgstr "" +"SpriteFrames resurssi on luotava tai asetettava 'Frames' ominaisuudelle, " +"jotta AnimatedSprite voi näyttää ruutuja." #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" +"Vain yksi CanvasModulate on sallittu per skene (tai per skeneilmentymien " +"joukko). Ensimmäisenä luotu toimii ja loput jätetään huomioimatta." #: scene/2d/collision_object_2d.cpp msgid "" @@ -8069,6 +7875,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Tämän noden alaisuudessa ei ole muotoja, joten se ei voi olla " +"vuorovaikutuksessa avaruuden kanssa.\n" +"Harkitse CollisionShape2D tai CollisionPolygon2D noden lisäämistä alinodeksi " +"muodon määrittämiseksi." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8076,6 +7886,9 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionPolygon2D toimii törmäysmuotona ainoastaan CollisionObject2D " +"nodesta perityille nodeille. Käytä sitä ainoastaan Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, jne. alla antaaksesi niille muodon." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." @@ -8087,50 +7900,68 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" +"CollisionShape2D toimii törmäysmuotona ainoastaan CollisionObject2D nodesta " +"perityille nodeille. Käytä sitä ainoastaan Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, jne. alla antaaksesi niille muodon." #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" +"CollisionShape2D nodella täytyy olla muoto, jotta se toimisi. Ole hyvä ja " +"luo sille muotoresurssi!" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the 'texture' " "property." msgstr "" +"Tekstuuri, jolta löytyy valon muoto, täytyy antaa 'texture' ominaisuudella." #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" +"Toimimiseksi tälle peittäjälle on asetettava (tai piirrettävä) peittävä " +"monikulmio." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" msgstr "" +"Peittävä monikulmio tälle peittäjälle on tyhjä. Ole hyvä ja piirrä " +"monikulmio!" #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" +"Tälle nodelle on asetettava tai luotava NavigationPolygon resurssi, jotta se " +"toimisi. Ole hyvä ja aseta ominaisuus tai piirrä monikulmio." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" +"NavigationPolygonInstance noden täytyy olla Navigation2D noden alaisuudessa. " +"Se tarjoaa vain navigointidataa." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" +"ParallaxLayer node toimii ainoastaan, jos se on ParallaxBackground noden " +"alla." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Materiaalia partikkeleiden käsittelemiseksi ei ole määritetty, joten mitään " +"ei tapahdu." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -8154,34 +7985,40 @@ msgid "" "VisibilityEnable2D works best when used with the edited scene root directly " "as parent." msgstr "" +"VisibilityEnable2D toimii parhaiten, kun sitä käytetään suoraan muokatun " +"skenen juuren isäntänä." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRCamera noden isännän täytyy olla ARVROrigin" #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRController noden isännän täytyy olla ARVROrigin node" #: scene/3d/arvr_nodes.cpp msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Ohjaimen tunnus ei saa olla 0, tai tämä ohjain ei ole sidottu oikeaan " +"ohjaimeen" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "" +msgstr "ARVRAnchor noden isännän täytyy olla ARVROrigin node" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"Ankkurin tunnus ei saa olla 0, tai tämä ankkuri ei ole sidottu oikeaan " +"ankkuriin" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" -msgstr "" +msgstr "ARVROrigin tarvitsee ARVRCamera noden alinodeksi" #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -8189,7 +8026,7 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(Aikaa jäljellä: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8201,7 +8038,7 @@ msgstr "" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "" +msgstr "Viimeistellään piirto" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " @@ -8213,6 +8050,10 @@ msgid "" "Consider adding CollisionShape or CollisionPolygon children nodes to define " "its shape." msgstr "" +"Tällä nodella ei ole alimuotoja, joten se ei voi olla vuorovaikutuksessa " +"avaruuden kanssa.\n" +"Harkitse CollisionShape tai CollisionPolygon noden lisäämistä sen alinodeksi " +"määritelläksesi sen muodon." #: scene/3d/collision_polygon.cpp msgid "" @@ -8220,6 +8061,9 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" +"CollisionPolygon node antaa ainoastaan törmäysmuodon CollisionObject nodesta " +"periytyville nodeille. Käytä sitä Area, StaticBody, RigidBody, " +"KinematicBody, jne. nodejen alla antaaksesi niille muodon." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." @@ -8231,12 +8075,17 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" +"CollisionShape node antaa ainoastaan törmäysmuodon CollisionObject nodesta " +"periytyville nodeille. Käytä sitä Area, StaticBody, RigidBody, " +"KinematicBody, jne. nodejen alla antaaksesi niille muodon." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it!" msgstr "" +"CollisionShape nodelle täytyy antaa muoto, jotta se toimisi. Ole hyvä ja luo " +"sille muotoresurssi!" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -8245,17 +8094,23 @@ msgstr "" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" +"Tälle nodelle täytyy asettaa tai luoda NavigationMesh resurssi, jotta se " +"toimisi." #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" +"NavigationMeshInstance noden täytyy olla Navigation noden alaisuudessa. Se " +"tarjoaa vain navigointidataa." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Mitään ei näy, koska mesheille ei ole asetettu piirtopyyhkäisyjä (draw " +"passes)." #: scene/3d/physics_body.cpp msgid "" @@ -8266,39 +8121,47 @@ msgstr "" #: scene/3d/remote_transform.cpp msgid "Path property must point to a valid Spatial node to work." -msgstr "" +msgstr "Polkuominaisuuden täytyy osoittaa Spatial nodeen toimiakseen." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment tarvitsee Environment resurssin." #: scene/3d/scenario_fx.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" +"Vain yksi WorldEnvironment on sallittu per skene (tai per skeneilmentymien " +"joukko)." #: scene/3d/scenario_fx.cpp msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Tämä WorldEnvironment jätetään huomioimatta. Lisää joko Camera (3D-" +"skeneille) tai aseta tälle ympäristölle Background Mode asetukseksi Canvas " +"(2D-skeneille)." #: scene/3d/sprite_3d.cpp msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" +"AnimatedSprite3D nodelle täytyy luoda tai asettaa 'Frames' ominaisuudeksi " +"SpriteFrames resurssi ruutujen näyttämiseksi." #: scene/3d/vehicle_body.cpp msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" +"VehicleWheel node tarjoaa rengasjärjestelmän VehicleBody nodelle. Ole hyvä " +"ja käytä sitä VehicleBody noden alla." #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw Mode" -msgstr "Kääntötila" +msgstr "Raakatila" #: scene/gui/color_picker.cpp msgid "Add current color as a preset" @@ -8313,9 +8176,8 @@ msgid "Please Confirm..." msgstr "Ole hyvä ja vahvista..." #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "Valitse metodi" +msgstr "Valitse tämä kansio" #: scene/gui/popup.cpp msgid "" @@ -8342,13 +8204,12 @@ msgid "(Other)" msgstr "(Muu)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"Projektin asetuksissa määriteltyä oletusympäristöä (Renderöinti -> Näkymä -" -"> Oletusympäristö) ei voitu ladata." +"Projektin asetuksissa määriteltyä oletusympäristöä (Rendering -> " +"Environment -> Default Environment) ei voitu ladata." #: scene/main/viewport.cpp msgid "" @@ -8564,7 +8425,7 @@ msgstr "Virheellinen fonttikoko." #~ msgid "Info" #~ msgstr "Tietoja" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Tuo uudelleen..." #~ msgid "Target path is empty." @@ -8816,13 +8677,13 @@ msgstr "Virheellinen fonttikoko." #~ msgid "Zoom (%):" #~ msgstr "Lähennä (%):" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Luuranko..." #~ msgid "Zoom Reset" #~ msgstr "Palauta lähennys" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Aseta Zoomaus..." #~ msgid "Set a Value" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 56969fe974..4c380d0b18 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -13,17 +13,20 @@ # finkiki <specialpopol@gmx.fr>, 2016. # Gilles Roudiere <gilles.roudiere@gmail.com>, 2017-2018. # Hugo Locurcio <hugo.l@openmailbox.org>, 2016-2018. +# Javier Ocampos <xavier.ocampos@gmail.com>, 2018. # John Bernier <john.bp@unknit.net>, 2018. -# Kanabenki <lucien.menassol@gmail.com>, 2017. +# Kanabenki <lucien.menassol@gmail.com>, 2017, 2018. # keltwookie <keltwookie@protonmail.com>, 2017-2018. # LL <lu.lecocq@free.fr>, 2018. # Luc Stepniewski <lior@gradstein.info>, 2017. # Marc <marc.gilleron@gmail.com>, 2016-2017. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2017. +# Nathan Vallet <nathanvalletmarseille@gmail.com>, 2018. # Nicolas <flaithotw@gmail.com>, 2017. # Nicolas Lehuen <nicolas@lehuen.com>, 2016. # Nobelix <noe.le.cam@laposte.net>, 2017. -# Omicron <tritonic.dev@gmail.com>, 2016, 2018. +# Nocta Senestra <nocta@net-c.com>, 2018. +# Omicron <omicron666.dev@gmail.com>, 2016, 2018. # Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016. # Przemyslaw Gasinski <gasinski.przemek@protonmail.ch>, 2017. # rafeu <duchainer@gmail.com>, 2016-2017. @@ -41,8 +44,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-05-02 21:48+0000\n" -"Last-Translator: Omicron <omicron666.dev@gmail.com>\n" +"PO-Revision-Date: 2018-06-05 19:27+0000\n" +"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -50,7 +53,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -532,7 +535,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Déconnecter « %s » de « %s »" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Connecter…" #: editor/connections_dialog.cpp @@ -858,19 +861,19 @@ msgstr "Ajouter effet" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "Renommer bus audio" +msgstr "Renommer le bus audio" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "Modifier le volume audio du bus" +msgstr "Modifier le volume du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "Activer/désactiver le mode solo pour le bus audio" +msgstr "Activer/désactiver le mode solo du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "Activer/désactiver le mode muet pour le bus audio" +msgstr "Activer/désactiver le mode muet du bus audio" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" @@ -878,11 +881,11 @@ msgstr "Activer/désactiver le contournement du bus audio" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "Sélectionner l'envoi de tranport audio" +msgstr "Sélectionner l'envoi du bus audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Ajouter effet de tranport audio" +msgstr "Ajouter un effet bus audio" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -894,7 +897,7 @@ msgstr "Supprimer l'effet de transport" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Transport audio, glisser-déposer pour réorganiser." +msgstr "Bus audio, glisser-déposer pour réorganiser." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -931,19 +934,19 @@ msgstr "Audio" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "Ajouter un transport audio" +msgstr "Ajouter un bus audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "Le transport maître ne peut pas être supprimé !" +msgstr "Le bus maître ne peut pas être supprimé !" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "Supprimer le transport audio" +msgstr "Supprimer le bus audio" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "Dupliquer le transport audio" +msgstr "Dupliquer le bus audio" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" @@ -951,19 +954,19 @@ msgstr "Réinitialiser le volume de bus" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "Déplacer le transport audio" +msgstr "Déplacer le bus audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Enregistrer l'agencement du transport audio sous.." +msgid "Save Audio Bus Layout As..." +msgstr "Enregistrer la disposition des bus audio sous…" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Emplacement du nouvel agencement.." +msgid "Location for New Layout..." +msgstr "Emplacement du nouvel agencement..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Ouvrir agencement de transport audio" +msgstr "Ouvrir une disposition de bus audio" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -971,11 +974,11 @@ msgstr "Il n'existe aucun 'res://default_bus_layout.tres'." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "Fichier invalide, pas un agencement de transport audio." +msgstr "Fichier invalide, pas une disposition de bus audio." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "Ajouter un transport" +msgstr "Ajouter un bus" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." @@ -1100,11 +1103,11 @@ msgid "Updating Scene" msgstr "Mise à jour de la scène" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Stockage des modifications locales…" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Mise à jour de la scène…" #: editor/editor_data.cpp @@ -1173,8 +1176,8 @@ msgid "Show In File Manager" msgstr "Montrer dans le gestionnaire de fichiers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nouveau dossier.." +msgid "New Folder..." +msgstr "Nouveau dossier..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1435,19 +1438,19 @@ msgstr "Effacer la sortie" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "L'export du projet a échoué avec le code erreur %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erreur d'enregistrement de la ressource !" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Enregistrer la ressource sous…" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Je vois…" #: editor/editor_node.cpp @@ -1520,11 +1523,11 @@ msgstr "Erreur d'enregistrement de la MeshLibrary !" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Impossible de charger la TileSet pour fusion !" +msgstr "Impossible de charger le TileSet pour fusion !" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "Erreur d'enregistrement de la TileSet !" +msgstr "Erreur d'enregistrement du TileSet !" #: editor/editor_node.cpp msgid "Error trying to save layout!" @@ -1682,11 +1685,11 @@ msgid "Open Base Scene" msgstr "Ouvrir scène de base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Ouvrir une scène rapidement…" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Ouvrir un script rapidement…" #: editor/editor_node.cpp @@ -1698,7 +1701,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Sauvegarder modifications de '%s' avant de quitter ?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Enregistrer la scène sous…" #: editor/editor_node.cpp @@ -1728,7 +1731,7 @@ msgstr "Cette opération ne peut être réalisée sans noeud parent." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Exporter un ensemble de tuiles" +msgstr "Exporter le TileSet" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." @@ -1751,7 +1754,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Cette action ne peut être annulée. Réinitialiser quand même ?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Lancer une scène rapidement…" #: editor/editor_node.cpp @@ -1918,8 +1921,8 @@ msgid "Previous tab" msgstr "Onglet precedent" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer Fichiers.." +msgid "Filter Files..." +msgstr "Filtrer Fichiers..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1930,11 +1933,11 @@ msgid "New Scene" msgstr "Nouvelle scène" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nouvelle scène héritée…" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Ouvrir une scène…" #: editor/editor_node.cpp @@ -1954,15 +1957,15 @@ msgid "Open Recent" msgstr "Fichiers récents" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Convertir vers…" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary…" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet…" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2025,7 +2028,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Petit déploiement avec le réseau" +msgstr "Déploiement minime avec système de fichier réseau" #: editor/editor_node.cpp msgid "" @@ -2228,7 +2231,7 @@ msgid "Save the currently edited resource." msgstr "Enregistrer la ressource actuellement modifiée." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Enregistrer sous…" #: editor/editor_node.cpp @@ -2337,7 +2340,7 @@ msgid "Creating Mesh Previews" msgstr "Création des prévisualisations des maillages" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Aperçu…" #: editor/editor_plugin_settings.cpp @@ -2490,8 +2493,8 @@ msgid "(Current)" msgstr "(Actuel)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Récupération des miroirs, veuillez patienter.." +msgid "Retrieving mirrors, please wait..." +msgstr "Récupération des miroirs, veuillez patienter..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2568,7 +2571,7 @@ msgid "Error requesting url: " msgstr "Erreur lors de la requête de l’URL : " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Connexion au miroir" #: editor/export_template_manager.cpp @@ -2585,8 +2588,8 @@ msgstr "Impossible à résoudre" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connexion en cours.." +msgid "Connecting..." +msgstr "Connexion en cours..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2598,8 +2601,8 @@ msgstr "Connecté" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Envoi d'une requête.." +msgid "Requesting..." +msgstr "Envoi d'une requête..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2736,11 +2739,11 @@ msgid "Collapse all" msgstr "Réduire tout" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renommer.." +msgid "Rename..." +msgstr "Renommer..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Déplacer vers…" #: editor/filesystem_dock.cpp @@ -2752,15 +2755,15 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Modifier les dépendances…" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Voir les propriétaires…" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Dupliquer…" #: editor/filesystem_dock.cpp @@ -2788,7 +2791,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Analyse des fichiers en cours,\n" "Veuillez patienter..." @@ -2856,7 +2859,7 @@ msgid "Import Scene" msgstr "Importer une scène" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Importation de la scène…" #: editor/import/resource_importer_scene.cpp @@ -2865,10 +2868,10 @@ msgstr "Génération des lightmaps :" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "Généreration pour le Mesh : " +msgstr "Génération pour le Mesh : " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Lancement du script personnalisé…" #: editor/import/resource_importer_scene.cpp @@ -2885,7 +2888,7 @@ msgid "Error running post-import script:" msgstr "Erreur d'exécution du script de post-importation :" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Enregistrement…" #: editor/import_dock.cpp @@ -2905,7 +2908,7 @@ msgid "Import As:" msgstr "Importer comme :" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Pré-réglage…" #: editor/import_dock.cpp @@ -3324,7 +3327,7 @@ msgid "Transition Node" msgstr "NÅ“ud Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importer des animations…" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3332,7 +3335,7 @@ msgid "Edit Node Filters" msgstr "Modifier les filtres de nÅ“ud" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtres…" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3400,8 +3403,8 @@ msgid "Fetching:" msgstr "Récupération:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Résolution.." +msgid "Resolving..." +msgstr "Résolution..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3467,7 +3470,7 @@ msgid "Site:" msgstr "Site :" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Support…" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3666,6 +3669,7 @@ msgid "Use Rotation Snap" msgstr "Rotation alignée" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configurer le magnétisme…" @@ -3762,14 +3766,12 @@ msgid "Show Guides" msgstr "Montrer les guides" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "Afficher l'origine" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 vue" +msgstr "Afficher la Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4062,7 +4064,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Le type de maillage primitif n'est pas PRIMITIVE_TRIANGLES !" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4093,7 +4095,7 @@ msgid "Create Convex Collision Sibling" msgstr "Créer une collision convexe" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Créer un maillage de contour…" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4263,7 +4265,7 @@ msgstr "Partitionnement..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "Création des coutours..." +msgstr "Création des contours..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Creating polymesh..." @@ -4304,8 +4306,8 @@ msgid "Error loading image:" msgstr "Erreur de chargement d'image :" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Pas de pixels avec transparence > 128 dans l'image.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Pas de pixels avec transparence > 128 dans l'image..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4556,7 +4558,7 @@ msgstr "Mettre à l'échelle le polygone" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Modifier" +msgstr "Édition" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -4665,7 +4667,7 @@ msgid "Import Theme" msgstr "Importer un thème" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Enregistrer le thème sous…" #: editor/plugins/script_editor_plugin.cpp @@ -4758,11 +4760,11 @@ msgstr "Lancer" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Afficher/Cacher la panneau des scripts" +msgstr "Afficher/Cacher le panneau des scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Trouver…" #: editor/plugins/script_editor_plugin.cpp @@ -4860,7 +4862,7 @@ msgstr "Prélever une couleur" #: editor/plugins/script_text_editor.cpp msgid "Convert Case" -msgstr "Cas de conversion" +msgstr "Modifier la casse" #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4969,18 +4971,18 @@ msgstr "Convertir en minuscule" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" -msgstr "trouver précédente" +msgstr "Trouver le précédent" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Remplacer…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Aller à la fonction…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Aller à la ligne…" #: editor/plugins/script_text_editor.cpp @@ -5436,11 +5438,7 @@ msgid "Transform" msgstr "Transformation" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurer la grille…" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Dialogue de transformation…" #: editor/plugins/spatial_editor_plugin.cpp @@ -5693,7 +5691,7 @@ msgid "Remove All" msgstr "Supprimer tout" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Éditer le thème..." #: editor/plugins/theme_editor_plugin.cpp @@ -5741,14 +5739,12 @@ msgid "Checked Item" msgstr "Item coché" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Ajouter un item" +msgstr "Item radio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item coché" +msgstr "Item radio coché" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5763,7 +5759,8 @@ msgid "Options" msgstr "Options" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Ont,Plusieurs,Possibilités,D'options !" #: editor/plugins/theme_editor_plugin.cpp @@ -5832,7 +5829,7 @@ msgstr "Supprimer la sélection" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" -msgstr "Chercher une case" +msgstr "Trouver une tuile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -5888,7 +5885,7 @@ msgstr "Fusionner depuis la scène ?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Tile Set" -msgstr "Ensemble de cases" +msgstr "Jeu de tuiles" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5904,31 +5901,31 @@ msgstr "Erreur" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" -msgstr "Coupe automatique" +msgstr "Autotiles" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings." msgstr "" -"Sélectionne une ressource à utiliser comme icône, celle-ci sera aussi " -"utilisée sur les liaisons autotile invalides." +"Sélectionner une sous-tuile à utiliser comme icône, celle-ci sera aussi " +"utilisée pour les liaisons de tuiles automatiques invalides." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "LMB: set bit on.\n" "RMB: set bit off." msgstr "" -"Clic gauche : Activer\n" -"Clic droit : Désactiver" +"Clic-gauche : Activer\n" +"Clic-droit : Désactiver" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select current edited sub-tile." -msgstr "Enregistrer la ressource en cours de modification." +msgstr "Sélectionner la sous-tuile en cours d'édition." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "Sélectionner une sous-case pour changer sa priorité." +msgstr "Sélectionner une sous-tuile pour changer sa priorité." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" @@ -5955,7 +5952,7 @@ msgid "Presets" msgstr "Pré-réglages" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Ajouter…" #: editor/project_export.cpp @@ -6049,6 +6046,11 @@ msgid "Imported Project" msgstr "Projet importé" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nom du projet :" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Impossible de créer le dossier." @@ -6251,10 +6253,13 @@ msgid "Mouse Button" msgstr "Bouton de souris" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nom d'action invalide. Il ne peux être vide ou contenir '/', ':', '=', '\\' " +"ou '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6281,7 +6286,7 @@ msgid "Control+" msgstr "Contrôle+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Appuyez sur une touche…" #: editor/project_settings_editor.cpp @@ -6414,7 +6419,7 @@ msgstr "Paramètres enregistrés avec succès." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "Remplacement de fonctionnalité" +msgstr "Écrasement d'un paramètre, dédié à un tag de fonctionnalité" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -6465,8 +6470,8 @@ msgid "Property:" msgstr "Propriété :" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Remplacement pour.." +msgid "Override For..." +msgstr "Écraser pour…" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6561,11 +6566,11 @@ msgid "Easing Out-In" msgstr "Ease out-in" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Fichier…" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Répertoire…" #: editor/property_editor.cpp @@ -6739,7 +6744,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Cette opération ne peut être réalisée sur des scènes instanciées." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Enregistrer la nouvelle scène sous…" #: editor/scene_tree_dock.cpp @@ -7170,11 +7175,11 @@ msgstr "Divers" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Control cliqué :" +msgstr "Contrôle cliqué :" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Type de Control cliqué :" +msgstr "Type de contrôle cliqué :" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -7461,7 +7466,7 @@ msgstr "Choisissez distance :" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Le nom de la classe ne peut pas être un mot clé réservé" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7469,7 +7474,7 @@ msgstr "Génération de la solution en cours..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "Création du projet C# ..." +msgstr "Création du projet C#..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create solution." @@ -8178,7 +8183,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "L'environnement mondial a besoin d'une ressource environnementale." #: scene/3d/scenario_fx.cpp msgid "" @@ -8192,6 +8197,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Cet WorldEnvironment est ignoré. Ajoutez une caméra (pour les scènes 3D) ou " +"définissez le mode Background Mode de cet environnement sur Canvas (pour les " +"scènes 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8469,7 +8477,7 @@ msgstr "Taille de police invalide." #~ msgid "Exporting for %s" #~ msgstr "Exportation pour %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Configuration…" #~ msgid "Error loading scene." @@ -8532,7 +8540,7 @@ msgstr "Taille de police invalide." #~ msgid "Info" #~ msgstr "Information" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Ré-importer…" #~ msgid "No bit masks to import!" @@ -8929,13 +8937,13 @@ msgstr "Taille de police invalide." #~ msgid "Zoom (%):" #~ msgstr "Zoom (%) :" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Squelette…" #~ msgid "Zoom Reset" #~ msgstr "Réinitialiser le zoom" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Définir le zoom…" #~ msgid "Set a Value" @@ -9413,7 +9421,7 @@ msgstr "Taille de police invalide." #~ msgid "Export Project PCK" #~ msgstr "Exporter le PCK du projet" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exporter…" #~ msgid "Project Export" @@ -9508,7 +9516,7 @@ msgstr "Taille de police invalide." #~ msgid "Method In Node:" #~ msgstr "Méthode dans le nÅ“ud :" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "Modifier les connexions..." #~ msgid "Set Params" @@ -9563,5 +9571,5 @@ msgstr "Taille de police invalide." #~ "modifiez les options d'exportation par la suite. Vous pouvez également " #~ "générer des atlas à l'exportation." -#~ msgid "Merging.." +#~ msgid "Merging..." #~ msgstr "Fusion..." diff --git a/editor/translations/he.po b/editor/translations/he.po index ee0a66cec1..3a86197ef5 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -498,7 +498,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -908,11 +908,11 @@ msgid "Move Audio Bus" msgstr "הזזת ×פיק שמע" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "שמירת פריסת ×פיקי השמע בתור…" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "×ž×™×§×•× ×œ×¤×¨×™×¡×” החדשה…" #: editor/editor_audio_buses.cpp @@ -1048,11 +1048,11 @@ msgid "Updating Scene" msgstr "×”×¡×¦× ×” ×ž×ª×¢×“×›× ×ª" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "×”×©×™× ×•×™×™× ×”×ž×§×•×ž×™×™× ×ž××•×—×¡× ×™×…" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "×”×¡×¦× ×” ×ž×ª×¢×“×›× ×ªâ€¦" #: editor/editor_data.cpp @@ -1121,7 +1121,7 @@ msgid "Show In File Manager" msgstr "הצגה ×‘×ž× ×”×œ הקבצי×" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "תיקייה חדשה…" #: editor/editor_file_dialog.cpp @@ -1383,12 +1383,12 @@ msgid "Error saving resource!" msgstr "שגי××” בשמירת המש×ב!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "שמירת המש×ב בתור…" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "×× ×™ רו×ה…" #: editor/editor_node.cpp @@ -1597,11 +1597,11 @@ msgid "Open Base Scene" msgstr "פתיחת ×¡×¦× ×ª בסיס" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "פתיחת ×¡×¦× ×” מהירה…" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "פתיחת סקריפט מהירה…" #: editor/editor_node.cpp @@ -1613,7 +1613,7 @@ msgid "Save changes to '%s' before closing?" msgstr "לשמור ×ת ×”×©×™× ×•×™×™× ×œÖ¾â€š%s’ ×œ×¤× ×™ הסגירה?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "שמירת ×¡×¦× ×” בש×…" #: editor/editor_node.cpp @@ -1665,7 +1665,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "×œ× × ×™×ª×Ÿ לבטל פעולה זו. לשחזר בכל ×–×ת?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1812,7 +1812,7 @@ msgid "Previous tab" msgstr "×”×œ×©×•× ×™×ª הקודמת" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,11 +1824,11 @@ msgid "New Scene" msgstr "×¡×¦× ×” חדשה" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "×¡×¦× ×” חדשה בירושה…" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "פתיחת ×¡×¦× ×”â€¦" #: editor/editor_node.cpp @@ -1848,15 +1848,15 @@ msgid "Open Recent" msgstr "פתיחה מה××—×¨×•× ×™×" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "המרה ×ל…" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2103,7 +2103,7 @@ msgid "Save the currently edited resource." msgstr "שמירת המש×ב ×©× ×¢×¨×š כרגע." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "שמירה בש×…" #: editor/editor_node.cpp @@ -2212,7 +2212,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "×ª×ž×•× ×” ממוזערת…" #: editor/editor_plugin_settings.cpp @@ -2363,7 +2363,7 @@ msgid "(Current)" msgstr "(× ×•×›×—×™)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2439,7 +2439,7 @@ msgid "Error requesting url: " msgstr "שגי××” בבקשת כתובת: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2456,7 +2456,7 @@ msgstr "×œ× × ×™×ª×Ÿ לפתור" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "מתבצעת התחברות…" #: editor/export_template_manager.cpp @@ -2469,7 +2469,7 @@ msgstr "מחובר" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "מוגשת בקשה…" #: editor/export_template_manager.cpp @@ -2602,11 +2602,11 @@ msgid "Collapse all" msgstr "×œ×¦×ž×¦× ×”×›×•×œ" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "×©×™× ×•×™ ש×…" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "העברה ×ל…" #: editor/filesystem_dock.cpp @@ -2618,15 +2618,15 @@ msgid "Instance" msgstr "עותק" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "עריכת תלויות…" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "צפייה בבעלי×…" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "שכפול…" #: editor/filesystem_dock.cpp @@ -2652,7 +2652,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "×”×§×‘×¦×™× × ×¡×¨×§×™×,\n" "× × ×œ×”×ž×ª×™×Ÿâ€¦" @@ -2720,7 +2720,7 @@ msgid "Import Scene" msgstr "×™×™×‘×•× ×¡×¦× ×”" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "×¡×¦× ×” מיוב×ת…" #: editor/import/resource_importer_scene.cpp @@ -2732,7 +2732,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "מופעל סקריפט מות×× ×ישית…" #: editor/import/resource_importer_scene.cpp @@ -2748,7 +2748,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "שמירה…" #: editor/import_dock.cpp @@ -2768,7 +2768,7 @@ msgid "Import As:" msgstr "×™×™×‘×•× ×‘×ª×•×¨:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "ערכה מוגדרת…" #: editor/import_dock.cpp @@ -3182,7 +3182,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3190,7 +3190,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3258,7 +3258,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3325,7 +3325,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3512,8 +3512,9 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "הגדרת הצמדה…" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3933,7 +3934,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4138,7 +4139,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4499,7 +4500,7 @@ msgid "Import Theme" msgstr "×™×™×‘×•× ×¢×¨×›×ª עיצוב" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "שמירת ערכת עיצוב בש×…" #: editor/plugins/script_editor_plugin.cpp @@ -4596,7 +4597,7 @@ msgstr "החלפת תצוגת ×—×œ×•× ×™×ª סקריפטי×" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "×יתור…" #: editor/plugins/script_editor_plugin.cpp @@ -4804,15 +4805,15 @@ msgid "Find Previous" msgstr "×יתור הקוד×" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "החלפה…" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "מעבר ×œ×¤×•× ×§×¦×™×”â€¦" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "מעבר לשורה…" #: editor/plugins/script_text_editor.cpp @@ -5266,11 +5267,7 @@ msgid "Transform" msgstr "התמרה" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "הגדרת הצמדה…" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5523,7 +5520,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5591,7 +5588,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5779,7 +5776,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5869,6 +5866,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "×©× ×©×’×•×™." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6057,8 +6059,8 @@ msgstr "כפתור עכבר" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6086,7 +6088,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "× × ×œ×œ×—×•×¥ על מקש…" #: editor/project_settings_editor.cpp @@ -6270,7 +6272,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6366,11 +6368,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6541,7 +6543,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/hi.po b/editor/translations/hi.po index e017935860..3340f13471 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -511,8 +511,8 @@ msgstr "जà¥à¤¡à¤¿à¤¯à¥‡ '%s' to '%s'" #: editor/connections_dialog.cpp #, fuzzy -msgid "Connect.." -msgstr "जà¥à¤¡à¤¿à¤¯à¥‡.." +msgid "Connect..." +msgstr "जà¥à¤¡à¤¿à¤¯à¥‡..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -946,11 +946,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1086,11 +1086,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1159,7 +1159,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1421,12 +1421,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1631,11 +1631,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1647,7 +1647,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1699,7 +1699,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1844,7 +1844,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1856,11 +1856,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1880,15 +1880,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2133,7 +2133,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2242,7 +2242,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2393,7 +2393,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2469,7 +2469,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2486,7 +2486,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2500,7 +2500,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2637,11 +2637,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2653,16 +2653,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" #: editor/filesystem_dock.cpp @@ -2688,7 +2688,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2754,7 +2754,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2766,7 +2766,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2782,7 +2782,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2802,7 +2802,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3217,7 +3217,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3225,7 +3225,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3293,7 +3293,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3360,7 +3360,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3547,6 +3547,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3968,7 +3969,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4173,7 +4174,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4535,7 +4536,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4632,7 +4633,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4838,15 +4839,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5297,11 +5298,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5554,7 +5551,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5622,7 +5619,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5810,7 +5807,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5900,6 +5897,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "गलत फॉणà¥à¤Ÿ का आकार |" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6088,8 +6090,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6117,7 +6119,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6301,7 +6303,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6397,11 +6399,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6572,7 +6574,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/hu.po b/editor/translations/hu.po index b6151574e9..28cc68be24 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -500,7 +500,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s' Lecsatlakoztatása '%s'-ról" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Kapcsolás..." #: editor/connections_dialog.cpp @@ -920,12 +920,12 @@ msgid "Move Audio Bus" msgstr "Hangbusz Ãthelyezése" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Hangbusz Elrendezés Mentése Másként.." +msgid "Save Audio Bus Layout As..." +msgstr "Hangbusz Elrendezés Mentése Másként..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Új Elrendezés Helye.." +msgid "Location for New Layout..." +msgstr "Új Elrendezés Helye..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1061,12 +1061,12 @@ msgid "Updating Scene" msgstr "Scene FrissÃtése" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Helyi módosÃtások eltárolása.." +msgid "Storing local changes..." +msgstr "Helyi módosÃtások eltárolása..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scene frissÃtése.." +msgid "Updating scene..." +msgstr "Scene frissÃtése..." #: editor/editor_data.cpp msgid "[empty]" @@ -1134,8 +1134,8 @@ msgid "Show In File Manager" msgstr "Mutat FájlkezelÅ‘ben" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Új Mappa.." +msgid "New Folder..." +msgstr "Új Mappa..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1403,13 +1403,13 @@ msgid "Error saving resource!" msgstr "Hiba történt az erÅ‘forrás mentésekor!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "ErÅ‘forrás Mentése Másként.." +msgid "Save Resource As..." +msgstr "ErÅ‘forrás Mentése Másként..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Értem.." +msgid "I see..." +msgstr "Értem..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1645,11 +1645,11 @@ msgid "Open Base Scene" msgstr "Alap Scene megnyitás" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Scene gyors megnyitás" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Szkript gyors megnyitás" #: editor/editor_node.cpp @@ -1661,7 +1661,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Bezárás elÅ‘tt menti a '%s'-n végzett módosÃtásokat?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Scene mentés másként" #: editor/editor_node.cpp @@ -1713,7 +1713,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Ez a művelet nem vonható vissza. VisszaállÃtja mindenképp?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Scene gyors futtatás" #: editor/editor_node.cpp @@ -1875,8 +1875,8 @@ msgid "Previous tab" msgstr "ElÅ‘zÅ‘ fül" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Fájlok Szűrése.." +msgid "Filter Files..." +msgstr "Fájlok Szűrése..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1887,11 +1887,11 @@ msgid "New Scene" msgstr "Új Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Új örökölt Scene" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Scene megnyitása" #: editor/editor_node.cpp @@ -1911,16 +1911,16 @@ msgid "Open Recent" msgstr "Legutóbbi Megnyitása" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Ãtkonvertálás.." +msgid "Convert To..." +msgstr "Ãtkonvertálás..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary-ra.." +msgid "MeshLibrary..." +msgstr "MeshLibrary-ra..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet-re.." +msgid "TileSet..." +msgstr "TileSet-re..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2184,8 +2184,8 @@ msgid "Save the currently edited resource." msgstr "A jelenleg szerkesztett erÅ‘forrás elmentése." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Mentés Másként.." +msgid "Save As..." +msgstr "Mentés Másként..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2293,8 +2293,8 @@ msgid "Creating Mesh Previews" msgstr "Háló ElÅ‘nézetek Létrehozása" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Indexkép.." +msgid "Thumbnail..." +msgstr "Indexkép..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2446,8 +2446,8 @@ msgid "(Current)" msgstr "(Jelenlegi)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Tükrök letöltése, kérjük várjon.." +msgid "Retrieving mirrors, please wait..." +msgstr "Tükrök letöltése, kérjük várjon..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2524,8 +2524,8 @@ msgid "Error requesting url: " msgstr "Hiba történt az url lekérdezésekor: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Csatlakozás Tükörhöz.." +msgid "Connecting to Mirror..." +msgstr "Csatlakozás Tükörhöz..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2541,8 +2541,8 @@ msgstr "Nem Megoldható" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Csatlakozás.." +msgid "Connecting..." +msgstr "Csatlakozás..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2554,8 +2554,8 @@ msgstr "Csatlakozva" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Lekérdezés.." +msgid "Requesting..." +msgstr "Lekérdezés..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2690,12 +2690,12 @@ msgid "Collapse all" msgstr "Összes összecsukása" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Ãtnevezés.." +msgid "Rename..." +msgstr "Ãtnevezés..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Ãthelyezés.." +msgid "Move To..." +msgstr "Ãthelyezés..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2706,16 +2706,16 @@ msgid "Instance" msgstr "Példány" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "FüggÅ‘ségek Szerkesztése.." +msgid "Edit Dependencies..." +msgstr "FüggÅ‘ségek Szerkesztése..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Tulajdonosok Megtekintése.." +msgid "View Owners..." +msgstr "Tulajdonosok Megtekintése..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "MegkettÅ‘zés.." +msgid "Duplicate..." +msgstr "MegkettÅ‘zés..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2740,10 +2740,10 @@ msgstr "Kiválasztott Scene(k) példányosÃtása a kiválasztott Node gyermekek #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Fájlok Vizsgálata,\n" -"Kérem Várjon.." +"Kérem Várjon..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2808,7 +2808,7 @@ msgid "Import Scene" msgstr "Scene importálás" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Scene importálás" #: editor/import/resource_importer_scene.cpp @@ -2820,8 +2820,8 @@ msgid "Generating for Mesh: " msgstr "Létrehozás a KövetkezÅ‘ Hálóhoz: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "TetszÅ‘leges Szkript Futtatása.." +msgid "Running Custom Script..." +msgstr "TetszÅ‘leges Szkript Futtatása..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,8 +2837,8 @@ msgid "Error running post-import script:" msgstr "Hiba történt az importálás utána szkript futtatásakor:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Mentés.." +msgid "Saving..." +msgstr "Mentés..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2857,8 +2857,8 @@ msgid "Import As:" msgstr "Importálás Mint:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "BeépÃtett BeállÃtások.." +msgid "Preset..." +msgstr "BeépÃtett BeállÃtások..." #: editor/import_dock.cpp msgid "Reimport" @@ -3276,16 +3276,16 @@ msgid "Transition Node" msgstr "Ãtmenet Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animációk Importálása.." +msgid "Import Animations..." +msgstr "Animációk Importálása..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Node szűrÅ‘k szerkesztés" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "SzűrÅ‘k.." +msgid "Filters..." +msgstr "SzűrÅ‘k..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3354,8 +3354,8 @@ msgid "Fetching:" msgstr "Lekérés:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Megoldás.." +msgid "Resolving..." +msgstr "Megoldás..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3421,8 +3421,8 @@ msgid "Site:" msgstr "Oldal:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Támogatás.." +msgid "Support..." +msgstr "Támogatás..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3621,6 +3621,7 @@ msgid "Use Rotation Snap" msgstr "Forgatási Illesztés Használata" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Illesztés BeállÃtása..." @@ -4049,8 +4050,8 @@ msgid "Create Convex Collision Sibling" msgstr "Konvex Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Körvonalháló Létrehozása.." +msgid "Create Outline Mesh..." +msgstr "Körvonalháló Létrehozása..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4255,8 +4256,8 @@ msgid "Error loading image:" msgstr "Hiba a kép betöltésekor:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Nem létezik egyetlen pixel sem >128-as átlátszósággal a képben.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Nem létezik egyetlen pixel sem >128-as átlátszósággal a képben..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4616,8 +4617,8 @@ msgid "Import Theme" msgstr "Téma Importálása" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Téma Mentése Másként.." +msgid "Save Theme As..." +msgstr "Téma Mentése Másként..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4713,8 +4714,8 @@ msgstr "Szkript Panel MegjelenÃtése" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Keresés.." +msgid "Find..." +msgstr "Keresés..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4923,16 +4924,16 @@ msgid "Find Previous" msgstr "ElÅ‘zÅ‘ Keresése" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Csere.." +msgid "Replace..." +msgstr "Csere..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ugrás Funkcióra.." +msgid "Goto Function..." +msgstr "Ugrás Funkcióra..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ugrás Sorra.." +msgid "Goto Line..." +msgstr "Ugrás Sorra..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5382,11 +5383,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5639,7 +5636,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5708,7 +5705,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5896,7 +5893,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5986,6 +5983,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Érvénytelen név." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6172,8 +6174,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6201,7 +6203,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6385,7 +6387,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6481,11 +6483,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6656,7 +6658,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/id.po b/editor/translations/id.po index 21d333009f..26a9739169 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -9,6 +9,7 @@ # Damar Inderajati <damarind@gmail.com>, 2017. # Damar S. M <the.last.walla@gmail.com>, 2017. # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. +# Reza Hidayat Bayu Prabowo <rh.bayu.prabowo@gmail.com>, 2018. # Romi Kusuma Bakti <romikusumab@gmail.com>, 2017. # Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018. # Tito <ijavadroid@gmail.com>, 2018. @@ -18,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-18 16:38+0000\n" -"Last-Translator: Tito <ijavadroid@gmail.com>\n" +"PO-Revision-Date: 2018-05-31 16:39+0000\n" +"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -506,8 +507,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Memutuskan '%s' dari '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Menyambungkan.." +msgid "Connect..." +msgstr "Menyambungkan..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -701,9 +702,8 @@ msgid "Change Dictionary Key" msgstr "Ubah Kunci Kamus" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" -msgstr "Ubah Nilai Dictionary" +msgstr "Ubah Nilai Kamus" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -931,12 +931,12 @@ msgid "Move Audio Bus" msgstr "Pindahkan Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Simpan Layout Suara Bus Ke.." +msgid "Save Audio Bus Layout As..." +msgstr "Simpan Layout Suara Bus Ke..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Lokasi untuk Layout Baru.." +msgid "Location for New Layout..." +msgstr "Lokasi untuk Layout Baru..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1074,12 +1074,12 @@ msgid "Updating Scene" msgstr "Memperbaharui Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Menyimpan perubahan-perubahan lokal.." +msgid "Storing local changes..." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Memperbaharui scene.." +msgid "Updating scene..." +msgstr "Memperbaharui scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1147,7 +1147,7 @@ msgid "Show In File Manager" msgstr "Tampilkan di Manajer Berkas" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Buat Direktori..." #: editor/editor_file_dialog.cpp @@ -1411,21 +1411,21 @@ msgstr "Bersihkan Luaran" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Ekspor proyek gagal dengan kode kesalahan% d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error menyimpan resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Simpan Resource Sebagai.." +msgid "Save Resource As..." +msgstr "Simpan Resource Sebagai..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "Aku tahu.." +msgid "I see..." +msgstr "Aku tahu..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1571,11 +1571,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "Perluas semua properti" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "Ciutkan semua properti" #: editor/editor_node.cpp msgid "Copy Params" @@ -1658,12 +1658,12 @@ msgid "Open Base Scene" msgstr "Buka Scene Dasar" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Buka Cepat Scene.." +msgid "Quick Open Scene..." +msgstr "Buka Cepat Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Buka Cepat Script.." +msgid "Quick Open Script..." +msgstr "Buka Cepat Script..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1674,8 +1674,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Simpan perubahan '%s' sebelum tutup?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Simpan Scene Sebagai.." +msgid "Save Scene As..." +msgstr "Simpan Scene Sebagai..." #: editor/editor_node.cpp msgid "No" @@ -1726,8 +1726,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Jalankan Cepat Scene.." +msgid "Quick Run Scene..." +msgstr "Jalankan Cepat Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1802,9 +1802,8 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Ugh" -msgstr "Wadoo" +msgstr "Duh" #: editor/editor_node.cpp msgid "" @@ -1885,8 +1884,8 @@ msgid "Previous tab" msgstr "Tab sebelumnya" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Saring berkas.." +msgid "Filter Files..." +msgstr "Saring berkas..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1897,12 +1896,12 @@ msgid "New Scene" msgstr "Scene Baru" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Scene Turunan Baru.." +msgid "New Inherited Scene..." +msgstr "Scene Turunan Baru..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Buka Scene.." +msgid "Open Scene..." +msgstr "Buka Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1921,16 +1920,16 @@ msgid "Open Recent" msgstr "Buka baru-baru ini" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Ubah ke.." +msgid "Convert To..." +msgstr "Ubah ke..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "" +msgid "MeshLibrary..." +msgstr "PerpustakaanMesh..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1976,7 +1975,7 @@ msgstr "Keluar ke daftar proyek" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Debug" -msgstr "" +msgstr "\"Debug\"" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -2193,8 +2192,8 @@ msgid "Save the currently edited resource." msgstr "Simpan sumber yang sedang diatur." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Simpan Sebagai.." +msgid "Save As..." +msgstr "Simpan Sebagai..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2223,7 +2222,7 @@ msgstr "Impor" #: editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Node" #: editor/editor_node.cpp msgid "FileSystem" @@ -2302,8 +2301,8 @@ msgid "Creating Mesh Previews" msgstr "Buat Pratinjau Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" +msgid "Thumbnail..." +msgstr "Thumbnail..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2348,7 +2347,7 @@ msgstr "Waktu Rata-rata (sec)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Bingkai %" #: editor/editor_profiler.cpp msgid "Physics Frame %" @@ -2455,8 +2454,8 @@ msgid "(Current)" msgstr "(Kondisi Saat Ini)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Mendapatkan informasi cermin, silakan tunggu.." +msgid "Retrieving mirrors, please wait..." +msgstr "Mendapatkan informasi cermin, silakan tunggu..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2516,8 +2515,9 @@ msgstr "Permintaan Gagal." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Redirect Loop." -msgstr "" +msgstr "Mengarahkan Loop" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2533,8 +2533,8 @@ msgid "Error requesting url: " msgstr "Kesalahan saat meminta url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Menyambungkan.." +msgid "Connecting to Mirror..." +msgstr "Menyambungkan..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2542,16 +2542,16 @@ msgstr "Terputus" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "Menyelesaikan" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Tidak Bisa Menyelesaikan" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Menyambungkan.." +msgid "Connecting..." +msgstr "Menyambungkan..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2563,8 +2563,8 @@ msgstr "Terhubung" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Melakukan permintaan.." +msgid "Requesting..." +msgstr "Melakukan permintaan..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2693,19 +2693,19 @@ msgstr "Menggandakan folder:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "Perluas semua" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "Ciutkan semua" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Ubah Nama.." +msgid "Rename..." +msgstr "Ubah Nama..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Pindahkan ke.." +msgid "Move To..." +msgstr "Pindahkan ke..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2716,16 +2716,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Sunting Dependensi.." +msgid "Edit Dependencies..." +msgstr "Sunting Dependensi..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Tampilkan Pemilik Berkas.." +msgid "View Owners..." +msgstr "Tampilkan Pemilik Berkas..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Gandakan.." +msgid "Duplicate..." +msgstr "Gandakan..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2750,10 +2750,10 @@ msgstr "Instance scene terpilih sebagai anak node saat ini." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Memindai Berkas,\n" -"Silakan Tunggu.." +"Silakan Tunggu..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2818,8 +2818,8 @@ msgid "Import Scene" msgstr "Impor Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Mengimpor scene.." +msgid "Importing Scene..." +msgstr "Mengimpor scene..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2832,8 +2832,8 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Running Custom Script.." -msgstr "Menjalankan Skrip Buatan.." +msgid "Running Custom Script..." +msgstr "Menjalankan Skrip Buatan..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2848,8 +2848,8 @@ msgid "Error running post-import script:" msgstr "Kesalahan saat menjalankan skrip post-import:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Menyimpan.." +msgid "Saving..." +msgstr "Menyimpan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2868,7 +2868,7 @@ msgid "Import As:" msgstr "Impor sebagai:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -2877,7 +2877,7 @@ msgstr "Impor ulang" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Set MultiNode" #: editor/node_dock.cpp msgid "Groups" @@ -2987,7 +2987,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "" +msgstr "Ubah Waktu Blend" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -3093,8 +3093,9 @@ msgid "Copy Animation" msgstr "Salin Animasi" #: editor/plugins/animation_player_editor_plugin.cpp +#, fuzzy msgid "Onion Skinning" -msgstr "" +msgstr "Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" @@ -3306,8 +3307,8 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Impor Animasi.." +msgid "Import Animations..." +msgstr "Impor Animasi..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3315,8 +3316,8 @@ msgid "Edit Node Filters" msgstr "Sunting Filter Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Penyaring.." +msgid "Filters..." +msgstr "Penyaring..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3388,7 +3389,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3455,8 +3456,8 @@ msgid "Site:" msgstr "Situs:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Dukungan.." +msgid "Support..." +msgstr "Dukungan..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3654,6 +3655,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4086,7 +4088,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4238,7 +4240,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "Menyimpan perubahan-perubahan lokal.." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4294,7 +4296,7 @@ msgid "Error loading image:" msgstr "Galat saat memuat gambar:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4663,7 +4665,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4764,8 +4766,8 @@ msgstr "Beralih Favorit" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Cari.." +msgid "Find..." +msgstr "Cari..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4976,15 +4978,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5175,7 +5177,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Material Changes" -msgstr "Menyimpan perubahan-perubahan lokal.." +msgstr "Menyimpan perubahan-perubahan lokal..." #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5448,11 +5450,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5709,8 +5707,8 @@ msgid "Remove All" msgstr "Hapus" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Sunting tema.." +msgid "Edit theme..." +msgstr "Sunting tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5779,7 +5777,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5908,7 +5906,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5975,7 +5973,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6070,6 +6068,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Nama Projek:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Tidak dapat membuat folder." @@ -6161,7 +6164,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "Menyambungkan.." +msgstr "Menyambungkan..." #: editor/project_manager.cpp #, fuzzy @@ -6242,7 +6245,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "Menyambungkan.." +msgstr "Menyambungkan..." #: editor/project_manager.cpp msgid "" @@ -6268,8 +6271,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6297,7 +6300,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6487,7 +6490,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6584,11 +6587,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Berkas.." +msgid "File..." +msgstr "Berkas..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6769,7 +6772,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -6939,7 +6942,7 @@ msgstr "" #: editor/scene_tree_editor.cpp #, fuzzy msgid "Open script" -msgstr "Buka Cepat Script.." +msgstr "Buka Cepat Script..." #: editor/scene_tree_editor.cpp msgid "" @@ -8284,9 +8287,8 @@ msgid "Please Confirm..." msgstr "Mohon konfirmasi..." #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Select this Folder" -msgstr "Metode Publik:" +msgstr "Pilih Folder ini" #: scene/gui/popup.cpp msgid "" @@ -8307,7 +8309,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(Yang Lain)" #: scene/main/scene_tree.cpp #, fuzzy @@ -8319,7 +8321,6 @@ msgstr "" "> Lingkungan Baku) tidak dapat dimuat" #: scene/main/viewport.cpp -#, fuzzy msgid "" "This viewport is not set as render target. If you intend for it to display " "its contents directly to the screen, make it a child of a Control so it can " @@ -8328,9 +8329,9 @@ msgid "" msgstr "" "Viewport ini tidak diatur sebagai target render. Jika anda berniat untuk " "menampilkan konten-kontennya secara langsung ke layar, buatlah sebuah child " -"dari kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah " -"sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node " -"untuk ditampilkan." +"dari Kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah " +"sebuah RenderTarget dan tetapkan tekstur internal untuk beberapa node untuk " +"ditampilkan." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8410,7 +8411,7 @@ msgstr "Ukuran font tidak sah." #, fuzzy #~ msgid "Setting '" -#~ msgstr "Mengatur.." +#~ msgstr "Mengatur..." #, fuzzy #~ msgid "Selection -> Duplicate" @@ -8459,8 +8460,8 @@ msgstr "Ukuran font tidak sah." #~ msgid "Exporting for %s" #~ msgstr "Mengekspor untuk %s" -#~ msgid "Setting Up.." -#~ msgstr "Mengatur.." +#~ msgid "Setting Up..." +#~ msgstr "Mengatur..." #~ msgid "Error loading scene." #~ msgstr "Gagal memuat scene." @@ -8484,8 +8485,8 @@ msgstr "Ukuran font tidak sah." #~ msgid "No files selected!" #~ msgstr "Tidak ada berkas dipilih!" -#~ msgid "Re-Import.." -#~ msgstr "Impor Ulang.." +#~ msgid "Re-Import..." +#~ msgstr "Impor Ulang..." #, fuzzy #~ msgid "Root Node Name:" diff --git a/editor/translations/is.po b/editor/translations/is.po index eb4f29126c..98a376edca 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -4,138 +4,165 @@ # This file is distributed under the same license as the Godot source code. # # Jóhannes G. Þorsteinsson <johannesg@johannesg.com>, 2017. +# Kaan Gül <qaantum@hotmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-05 21:47+0000\n" -"Last-Translator: Jóhannes G. Þorsteinsson <johannesg@johannesg.com>\n" +"PO-Revision-Date: 2018-06-05 05:39+0000\n" +"Last-Translator: Kaan Gül <qaantum@hotmail.com>\n" "Language-Team: Icelandic <https://hosted.weblate.org/projects/godot-engine/" "godot/is/>\n" "Language: is\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp +#, fuzzy msgid "Disabled" msgstr "Óvirkt" #: editor/animation_editor.cpp msgid "All Selection" -msgstr "Allt Val" +msgstr "Allt úrvalið" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Change Keyframe Time" -msgstr "Hreyfimynd Breyta Gildi" +msgstr "Anim breyta lyklagrind tÃmi" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Transition" -msgstr "Hreyfimynd Breyta Stöðuskiptum" +msgstr "Anim breyting umskipti" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Transform" -msgstr "Hreyfimynd Breyta Ummyndun" +msgstr "Breyta umbreytingu" #: editor/animation_editor.cpp #, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Hreyfimynd Breyta Gildi" +msgstr "Anim breyta lyklagrind gildi" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Change Call" -msgstr "Hreyfimynd Breyta Kalli" +msgstr "Útkall breyting sÃmtal" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Add Track" -msgstr "Hreyfimynd Bæta Við Rás" +msgstr "Anim bæta við lag" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Duplicate Keys" -msgstr "Hreyfimynd Tvöfalda Lykla" +msgstr "TvÃteknir lyklar" #: editor/animation_editor.cpp +#, fuzzy msgid "Move Anim Track Up" -msgstr "Færa Hreyfimynda Rás Upp" +msgstr "Færa Anim track upp" #: editor/animation_editor.cpp +#, fuzzy msgid "Move Anim Track Down" -msgstr "Færa Hreyfimynda Rás Niður" +msgstr "Færa Anim track niður" #: editor/animation_editor.cpp +#, fuzzy msgid "Remove Anim Track" -msgstr "Fjarlægja Hreyfimynda Rás" +msgstr "Fjarlægja Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Set Transitions to:" -msgstr "Sitja Stöðuskipti á:" +msgstr "Stillið breyting á:" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Rename" -msgstr "Endurnefna Hreyfimyndarás" +msgstr "Endurnefning Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Interpolation" -msgstr "Breyta Brúun á Hreyfimyndarás" +msgstr "Breytingar á Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Breyta gildisstilling à Anim track" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Track Change Wrap Mode" -msgstr "" +msgstr "Anim track breyta hulum ham" #: editor/animation_editor.cpp +#, fuzzy msgid "Edit Node Curve" -msgstr "" +msgstr "Breyta hnútnum Ferill" #: editor/animation_editor.cpp +#, fuzzy msgid "Edit Selection Curve" -msgstr "" +msgstr "Breyta valferil" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Delete Keys" -msgstr "" +msgstr "Anim DELETE-lyklar" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "Duplicate Selection" -msgstr "" +msgstr "Afrita val" #: editor/animation_editor.cpp +#, fuzzy msgid "Duplicate Transposed" -msgstr "" +msgstr "TvÃskipt transposed" #: editor/animation_editor.cpp +#, fuzzy msgid "Remove Selection" -msgstr "" +msgstr "Fjarlægja val" #: editor/animation_editor.cpp +#, fuzzy msgid "Continuous" -msgstr "" +msgstr "Samfellt" #: editor/animation_editor.cpp +#, fuzzy msgid "Discrete" -msgstr "" +msgstr "Afmarkað" #: editor/animation_editor.cpp +#, fuzzy msgid "Trigger" -msgstr "" +msgstr "Kveikja:" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Add Key" -msgstr "" +msgstr "Anim bæta við lykli" #: editor/animation_editor.cpp +#, fuzzy msgid "Anim Move Keys" -msgstr "" +msgstr "Færa lykla af Anim" #: editor/animation_editor.cpp +#, fuzzy msgid "Scale Selection" -msgstr "" +msgstr "Val á kvarða" #: editor/animation_editor.cpp msgid "Scale From Cursor" @@ -496,7 +523,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -906,11 +933,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1046,11 +1073,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1119,7 +1146,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1381,12 +1408,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1591,11 +1618,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1607,7 +1634,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1659,7 +1686,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1804,7 +1831,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1816,11 +1843,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1840,15 +1867,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2093,7 +2120,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2202,7 +2229,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2353,7 +2380,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2429,7 +2456,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2446,7 +2473,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2459,7 +2486,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2591,11 +2618,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2607,16 +2634,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Hreyfimynd Tvöfalda Lykla" #: editor/filesystem_dock.cpp @@ -2642,7 +2669,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2708,7 +2735,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2720,7 +2747,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2736,7 +2763,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2756,7 +2783,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3170,7 +3197,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3178,7 +3205,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3246,7 +3273,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3313,7 +3340,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3500,6 +3527,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3921,7 +3949,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4126,7 +4154,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4487,7 +4515,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4584,7 +4612,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4790,15 +4818,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5249,11 +5277,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5506,7 +5530,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5574,7 +5598,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5762,7 +5786,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5852,6 +5876,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6038,8 +6066,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6067,7 +6095,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6251,7 +6279,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,11 +6375,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6522,7 +6550,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/it.po b/editor/translations/it.po index 85f4e665a1..9e6833e576 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -3,6 +3,7 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # +# Alessio Corridori <alessiocorridori@hotmail.com>, 2018. # Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017. # Dario D'Ambra <legione0@gmail.com>, 2017. # dariocavada <cavada@ectrlsolutions.com>, 2017. @@ -19,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-05-02 10:38+0000\n" -"Last-Translator: Samuele Zolfanelli <samdazel@gmail.com>\n" +"PO-Revision-Date: 2018-05-18 16:39+0000\n" +"Last-Translator: Alessio Corridori <alessiocorridori@hotmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -511,8 +512,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Disconnetti '%s' da '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Connetti.." +msgid "Connect..." +msgstr "Connetti..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -934,12 +935,12 @@ msgid "Move Audio Bus" msgstr "Sposta bus audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Salva Layout Bus Audio Come..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Posizione per Nuovo Layout.." +msgid "Location for New Layout..." +msgstr "Posizione per Nuovo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1080,12 +1081,12 @@ msgid "Updating Scene" msgstr "Aggiornamento Scena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Memorizzando i cambiamenti locali.." +msgid "Storing local changes..." +msgstr "Memorizzando i cambiamenti locali..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aggiornando la scena.." +msgid "Updating scene..." +msgstr "Aggiornando la scena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1154,8 +1155,8 @@ msgid "Show In File Manager" msgstr "Mostra nel File Manager" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nuova Cartella.." +msgid "New Folder..." +msgstr "Nuova Cartella..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1424,13 +1425,13 @@ msgid "Error saving resource!" msgstr "Errore salvando la Risorsa!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Salva Risorsa Come.." +msgid "Save Resource As..." +msgstr "Salva Risorsa Come..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Capisco.." +msgid "I see..." +msgstr "Capisco..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1666,12 +1667,12 @@ msgid "Open Base Scene" msgstr "Apri Scena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Apri scena rapido.." +msgid "Quick Open Scene..." +msgstr "Apri scena rapido..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Apri Script Rapido.." +msgid "Quick Open Script..." +msgstr "Apri Script Rapido..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1682,8 +1683,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Salvare le modifiche a '%s' prima di chiudere?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Salva Scena Come.." +msgid "Save Scene As..." +msgstr "Salva Scena Come..." #: editor/editor_node.cpp msgid "No" @@ -1734,8 +1735,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Questa azione non può essere annullata. Ripristinare comunque?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Esegui Scena Rapido.." +msgid "Quick Run Scene..." +msgstr "Esegui Scena Rapido..." #: editor/editor_node.cpp msgid "Quit" @@ -1895,8 +1896,8 @@ msgid "Previous tab" msgstr "Scheda precedente" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtra Files.." +msgid "Filter Files..." +msgstr "Filtra Files..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1907,12 +1908,12 @@ msgid "New Scene" msgstr "Nuova scena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nuova Scena Ereditata.." +msgid "New Inherited Scene..." +msgstr "Nuova Scena Ereditata..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Apri Scena.." +msgid "Open Scene..." +msgstr "Apri Scena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1931,16 +1932,16 @@ msgid "Open Recent" msgstr "Apri Recente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Converti In.." +msgid "Convert To..." +msgstr "Converti In..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2203,8 +2204,8 @@ msgid "Save the currently edited resource." msgstr "Salva la risorsa in modifica." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Salva Come.." +msgid "Save As..." +msgstr "Salva Come..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2312,8 +2313,8 @@ msgid "Creating Mesh Previews" msgstr "Creazione Anteprime Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2468,7 +2469,7 @@ msgid "(Current)" msgstr "(Corrente)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Recupero dei mirror, attendi..." #: editor/export_template_manager.cpp @@ -2547,8 +2548,8 @@ msgid "Error requesting url: " msgstr "Errore di connessione all'URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Connessione al mirror in corso.." +msgid "Connecting to Mirror..." +msgstr "Connessione al mirror in corso..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2564,8 +2565,8 @@ msgstr "Impossibile risolvere" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Connettendo.." +msgid "Connecting..." +msgstr "Connettendo..." #: editor/export_template_manager.cpp #, fuzzy @@ -2578,8 +2579,8 @@ msgstr "Connesso" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Richiedendo.." +msgid "Requesting..." +msgstr "Richiedendo..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2718,12 +2719,12 @@ msgid "Collapse all" msgstr "Comprimi tutto" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Rinomina.." +msgid "Rename..." +msgstr "Rinomina..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Sposta in.." +msgid "Move To..." +msgstr "Sposta in..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2735,16 +2736,16 @@ msgid "Instance" msgstr "Istanza" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Modifica Dipendenze.." +msgid "Edit Dependencies..." +msgstr "Modifica Dipendenze..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vedi Proprietari.." +msgid "View Owners..." +msgstr "Vedi Proprietari..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplica.." +msgid "Duplicate..." +msgstr "Duplica..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2769,10 +2770,10 @@ msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Scansione File,\n" -"Si prega di attendere.." +"Si prega di attendere..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2837,8 +2838,8 @@ msgid "Import Scene" msgstr "Importa Scena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importando Scena.." +msgid "Importing Scene..." +msgstr "Importando Scena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2850,8 +2851,8 @@ msgid "Generating for Mesh: " msgstr "Generando per Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Eseguendo Script Personalizzato.." +msgid "Running Custom Script..." +msgstr "Eseguendo Script Personalizzato..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2866,8 +2867,8 @@ msgid "Error running post-import script:" msgstr "Errore di esecuzione dello script di post-import:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Salvataggio.." +msgid "Saving..." +msgstr "Salvataggio..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2886,8 +2887,8 @@ msgid "Import As:" msgstr "Importa Come:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "Preset..." #: editor/import_dock.cpp msgid "Reimport" @@ -3308,16 +3309,16 @@ msgid "Transition Node" msgstr "Nodo Transizione" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importa animazioni.." +msgid "Import Animations..." +msgstr "Importa animazioni..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Modifica Filtri Nodi" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtri.." +msgid "Filters..." +msgstr "Filtri..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3385,8 +3386,8 @@ msgid "Fetching:" msgstr "Recupero:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Risolvendo.." +msgid "Resolving..." +msgstr "Risolvendo..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3452,8 +3453,8 @@ msgid "Site:" msgstr "Sito:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Supporta.." +msgid "Support..." +msgstr "Supporta..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3652,6 +3653,7 @@ msgid "Use Rotation Snap" msgstr "Usa lo Snap di Rotazione" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configura Snap..." @@ -4100,8 +4102,8 @@ msgid "Create Convex Collision Sibling" msgstr "Crea Fratello di Collisione Convessa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Crea Mesh di Outline.." +msgid "Create Outline Mesh..." +msgstr "Crea Mesh di Outline..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4258,7 +4260,7 @@ msgstr "Creazione Octree Luci" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "Stringhe Traducibili.." +msgstr "Stringhe Traducibili..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4280,7 +4282,7 @@ msgstr "Creazione Octree Texture" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "Crea Mesh di Outline.." +msgstr "Crea Mesh di Outline..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4321,8 +4323,8 @@ msgid "Error loading image:" msgstr "Errore di caricamento immagine:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Nessun pixel con trasparenza >128 nell'immagine.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Nessun pixel con trasparenza >128 nell'immagine..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4688,8 +4690,8 @@ msgid "Import Theme" msgstr "Importa Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Salva Tema Come.." +msgid "Save Theme As..." +msgstr "Salva Tema Come..." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4791,8 +4793,8 @@ msgstr "Attiva Preferito" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Trova.." +msgid "Find..." +msgstr "Trova..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5006,16 +5008,16 @@ msgid "Find Previous" msgstr "Trova Precedente" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Rimpiazza.." +msgid "Replace..." +msgstr "Rimpiazza..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Vai a Funzione.." +msgid "Goto Function..." +msgstr "Vai a Funzione..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Vai a Linea.." +msgid "Goto Line..." +msgstr "Vai a Linea..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5475,12 +5477,8 @@ msgid "Transform" msgstr "Transform" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configura Snap..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Finestra di Transform.." +msgid "Transform Dialog..." +msgstr "Finestra di Transform..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5739,7 +5737,7 @@ msgid "Remove All" msgstr "Rimuovi" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Modifica Tema…" #: editor/plugins/theme_editor_plugin.cpp @@ -5810,7 +5808,8 @@ msgid "Options" msgstr "Opzioni" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Ha, Molte, Diverse, Opzioni!" #: editor/plugins/theme_editor_plugin.cpp @@ -5940,7 +5939,7 @@ msgstr "Unisci da scena?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6007,7 +6006,7 @@ msgid "Presets" msgstr "Presets" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Aggiungi..." #: editor/project_export.cpp @@ -6108,6 +6107,11 @@ msgstr "Progetto Importato" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Nome Progetto:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Impossibile creare cartella." @@ -6318,8 +6322,8 @@ msgstr "Pulsante Mouse" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,8 +6351,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Premi un tasto.." +msgid "Press a Key..." +msgstr "Premi un tasto..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6530,15 +6534,15 @@ msgstr "Impostazioni Progetto (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Generali" +msgstr "Informazioni Generali" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "Proprietà :" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Sovrascrivi Per.." +msgid "Override For..." +msgstr "Sovrascrivi Per..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6637,12 +6641,12 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." -msgstr "File.." +msgid "File..." +msgstr "File..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Dir.." +msgid "Dir..." +msgstr "Dir..." #: editor/property_editor.cpp msgid "Assign" @@ -6673,7 +6677,7 @@ msgstr "Mostra nel File System" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "Converti In.." +msgstr "Converti In..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6820,8 +6824,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Questa operazione no può essere eseguita su scene istanziate." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Salva Nuova Scena Come.." +msgid "Save New Scene As..." +msgstr "Salva Nuova Scena Come..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7353,12 +7357,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "Copia A Piattaforma.." +msgstr "Copia A Piattaforma..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7372,7 +7376,7 @@ msgstr "GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -8623,8 +8627,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Exporting for %s" #~ msgstr "Esportando per %s" -#~ msgid "Setting Up.." -#~ msgstr "Impostando.." +#~ msgid "Setting Up..." +#~ msgstr "Impostando..." #~ msgid "Error loading scene." #~ msgstr "Errore di caricamento della scena." @@ -8688,8 +8692,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Info" #~ msgstr "Info" -#~ msgid "Re-Import.." -#~ msgstr "Re-Importa.." +#~ msgid "Re-Import..." +#~ msgstr "Re-Importa..." #~ msgid "No bit masks to import!" #~ msgstr "Nessuna bit mask da importare!" @@ -9084,14 +9088,14 @@ msgstr "Dimensione font Invalida." #~ msgid "Zoom (%):" #~ msgstr "Zoom(%):" -#~ msgid "Skeleton.." -#~ msgstr "Scheletro.." +#~ msgid "Skeleton..." +#~ msgstr "Scheletro..." #~ msgid "Zoom Reset" #~ msgstr "Zoom Reset" -#~ msgid "Zoom Set.." -#~ msgstr "Imposta Zoom.." +#~ msgid "Zoom Set..." +#~ msgstr "Imposta Zoom..." #~ msgid "Set a Value" #~ msgstr "Imposta un Valore" @@ -9566,8 +9570,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Export Project PCK" #~ msgstr "Esporta Progetto PCK" -#~ msgid "Export.." -#~ msgstr "Esporta.." +#~ msgid "Export..." +#~ msgstr "Esporta..." #~ msgid "Project Export" #~ msgstr "Esportazione Progetto" @@ -9687,8 +9691,8 @@ msgstr "Dimensione font Invalida." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Ricarica Tool Script (Soft)" -#~ msgid "Edit Connections.." -#~ msgstr "Modifica Connessioni.." +#~ msgid "Edit Connections..." +#~ msgstr "Modifica Connessioni..." #~ msgid "Set Params" #~ msgstr "Imposta parametri" @@ -9742,5 +9746,5 @@ msgstr "Dimensione font Invalida." #~ msgid "Next Time:" #~ msgstr "Prossima Volta:" -#~ msgid "Merging.." -#~ msgstr "Unione.." +#~ msgid "Merging..." +#~ msgstr "Unione..." diff --git a/editor/translations/ja.po b/editor/translations/ja.po index e05530b258..71b68636f6 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -4,28 +4,30 @@ # This file is distributed under the same license as the Godot source code. # # akirakido <achts.y@gmail.com>, 2016-2017. -# D_first <dntk.daisei@gmail.com>, 2017. -# Daisuke Saito <d.saito@coriginate.com>, 2017. +# D_first <dntk.daisei@gmail.com>, 2017, 2018. +# Daisuke Saito <d.saito@coriginate.com>, 2017, 2018. # h416 <shinichiro.hirama@gmail.com>, 2017. -# hopping tappy (ãŸã£ã´ã•ã‚“) <hopping.tappy@gmail.com>, 2016-2017. -# Jun Shiozawa <haresecret@gmail.com>, 2017. +# hopping tappy (ãŸã£ã´ã•ã‚“) <hopping.tappy@gmail.com>, 2016-2017, 2018. +# Jun Shiozawa <haresecret@gmail.com>, 2017, 2018. # Lexi Grafen <shfeedly@gmail.com>, 2017. # NoahDigital <taku_58@hotmail.com>, 2017. +# Shinsuke Masuda <shinsuke.masuda@gmail.com>, 2018. # Tetsuji Ochiai <ochiaixp@gmail.com>, 2017. # Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>, 2017-2018. +# zukkun <zukkun@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-02 08:38+0000\n" -"Last-Translator: Tohru Ike (rokujyouhitoma) <rokujyouhitomajp@gmail.com>\n" +"PO-Revision-Date: 2018-05-30 15:39+0000\n" +"Last-Translator: Shinsuke Masuda <shinsuke.masuda@gmail.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2.20-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -41,14 +43,12 @@ msgid "Anim Change Keyframe Time" msgstr "Anim 値を変更" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transition" -msgstr "Anim é·ç§»ï¼ˆãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ï¼‰" +msgstr "アニメーション 変化ã¨ãã®ç§»ã‚Šå¤‰ã‚り(トランジション)" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Transform" -msgstr "Anim 変形(トランスフォーム)" +msgstr "アニメーションã®ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォーム(変形)" #: editor/animation_editor.cpp #, fuzzy @@ -66,9 +66,8 @@ msgid "Anim Add Track" msgstr "Anim ãƒˆãƒ©ãƒƒã‚¯ã‚’è¿½åŠ " #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Duplicate Keys" -msgstr "Anim ã‚ーを複製" +msgstr "アニメーションã®ã‚ーフレームを複製" #: editor/animation_editor.cpp msgid "Move Anim Track Up" @@ -84,7 +83,7 @@ msgstr "Anim トラックを削除" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "ã“れã«ãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ã‚’è¨å®š:" +msgstr "トランジションをè¨å®š:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -114,7 +113,7 @@ msgstr "é¸æŠžæ›²ç·šã‚’ç·¨é›†" #: editor/animation_editor.cpp msgid "Anim Delete Keys" -msgstr "Anim ã‚ー削除" +msgstr "アニメーションã®ã‚ーフレームを削除" #: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -536,8 +535,8 @@ msgstr "'%s' ã‚’ '%s' ã«æŽ¥ç¶š" #: editor/connections_dialog.cpp #, fuzzy -msgid "Connect.." -msgstr "接続.." +msgid "Connect..." +msgstr "接続..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -855,14 +854,12 @@ msgstr "" "ãƒãƒ¼ãƒãƒ³ãƒˆã®è‘—作権ãŠã‚ˆã³ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã§ã™ã€‚" #: editor/editor_about.cpp -#, fuzzy msgid "All Components" -msgstr "コンテンツ:" +msgstr "ã™ã¹ã¦ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(æ§‹æˆéƒ¨åˆ†)" #: editor/editor_about.cpp -#, fuzzy msgid "Components" -msgstr "コンテンツ:" +msgstr "コンãƒãƒ¼ãƒãƒ³ãƒˆ(æ§‹æˆéƒ¨åˆ†)" #: editor/editor_about.cpp #, fuzzy @@ -870,9 +867,8 @@ msgid "Licenses" msgstr "ライセンス" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in zip format." -msgstr "zipå½¢å¼ã§ãªã„ãŸã‚パッケージをファイルを開ãéš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" +msgstr "パッケージファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ zip å½¢å¼ã§ã¯ã‚りã¾ã›ã‚“。" #: editor/editor_asset_installer.cpp #, fuzzy @@ -896,9 +892,8 @@ msgid "Install" msgstr "インストール" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Installer" -msgstr "パッケージインストールæˆåŠŸ!" +msgstr "パッケージインストーラー" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -922,24 +917,23 @@ msgstr "オーディオãƒã‚¹ã‚’ソãƒã«åˆ‡ã‚Šæ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "オーディオãƒã‚¹ã‚’ミュートã«åˆ‡ã‚Šæ›¿ãˆ" +msgstr "オーディオãƒã‚¹ã‚’ミュート(無音)ã«åˆ‡ã‚Šæ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "オーディオãƒã‚¹ã®ãƒã‚¤ãƒ‘スエフェクト切り替ãˆ" +msgstr "オーディオãƒã‚¹ã®ãƒã‚¤ãƒ‘スエフェクトã®åˆ‡ã‚Šæ›¿ãˆ" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "オーディオãƒã‚¹ã®é€ä¿¡å…ˆã‚’é¸æŠž" +msgstr "オーディオãƒã‚¹ã®å‡ºåŠ›å…ˆã®é¸æŠž" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" msgstr "オーディオãƒã‚¹ã‚¨ãƒ•ã‚§ã‚¯ãƒˆã‚’è¿½åŠ " #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Bus Effect" -msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトã®ç§»å‹•" +msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトを移動" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" @@ -951,11 +945,11 @@ msgstr "オーディオãƒã‚¹ã‚’ドラッグ・アンド・ドãƒãƒƒãƒ—ã§(å†)æ #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "ソãƒ" +msgstr "ソãƒ(独立)" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "ミュート" +msgstr "ミュート(無音)" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -1009,12 +1003,12 @@ msgstr "オーディオãƒã‚¹ã‚’移動" #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’別åã§ä¿å˜" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "æ–°ã—ã„レイアウトã®å ´æ‰€.." +msgid "Location for New Layout..." +msgstr "æ–°ã—ã„レイアウトã®å ´æ‰€..." #: editor/editor_audio_buses.cpp #, fuzzy @@ -1023,7 +1017,8 @@ msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é–‹ã" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "'res://default_bus_layout.tres' ファイルãŒã‚りã¾ã›ã‚“." +msgstr "" +"リソースディレクトリã«ã€Œres://default_bus_layout.tresã€ãƒ•ァイルãŒã‚りã¾ã›ã‚“!" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -1173,12 +1168,12 @@ msgstr "シーンを更新" #: editor/editor_data.cpp #, fuzzy -msgid "Storing local changes.." -msgstr "ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã®å¤‰æ›´ã‚’ä¿å˜ã™ã‚‹.." +msgid "Storing local changes..." +msgstr "ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã®å¤‰æ›´ã‚’ä¿å˜ã™ã‚‹..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "シーンを更新ã—ã¦ã„ã¾ã™.." +msgid "Updating scene..." +msgstr "シーンを更新ã—ã¦ã„ã¾ã™..." #: editor/editor_data.cpp #, fuzzy @@ -1187,7 +1182,7 @@ msgstr "(空)" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "(未ä¿å˜)" #: editor/editor_dir_dialog.cpp #, fuzzy @@ -1254,8 +1249,8 @@ msgid "Show In File Manager" msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡¨ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "フォルダを作æˆã™ã‚‹.." +msgid "New Folder..." +msgstr "フォルダを作æˆã™ã‚‹..." #: editor/editor_file_dialog.cpp #, fuzzy @@ -1564,14 +1559,14 @@ msgstr "リソースä¿å˜ã‚¨ãƒ©ãƒ¼!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "~ã¨ã„ã†åå‰ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "ã‚ã‹ã£ãŸ.." +msgid "I see..." +msgstr "ã‚ã‹ã£ãŸ..." #: editor/editor_node.cpp #, fuzzy @@ -1835,13 +1830,13 @@ msgid "Open Base Scene" msgstr "基本シーンを開ã" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "シーンã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン.." +msgid "Quick Open Scene..." +msgstr "シーンã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..." #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Script.." -msgstr "スクリプトã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン.." +msgid "Quick Open Script..." +msgstr "スクリプトã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..." #: editor/editor_node.cpp #, fuzzy @@ -1854,7 +1849,7 @@ msgstr "終了ã™ã‚‹å‰ã«ã€'%s' ã¸ã®å¤‰æ›´ã‚’ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp #, fuzzy -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "~ã®åå‰ã§ã‚·ãƒ¼ãƒ³ã‚’ä¿å˜ã™ã‚‹" #: editor/editor_node.cpp @@ -1917,7 +1912,7 @@ msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯undoã§ãã¾ã›ã‚“. å…ƒã«æˆ»ã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "シーンをクイックランã™ã‚‹" #: editor/editor_node.cpp @@ -2096,8 +2091,8 @@ msgstr "以å‰ã®ã‚¿ãƒ–" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "ファイルを絞り込む.." +msgid "Filter Files..." +msgstr "ファイルを絞り込む..." #: editor/editor_node.cpp #, fuzzy @@ -2111,13 +2106,13 @@ msgstr "æ–°ã—ã„シーン" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³.." +msgid "New Inherited Scene..." +msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³..." #: editor/editor_node.cpp #, fuzzy -msgid "Open Scene.." -msgstr "シーンを開ã.." +msgid "Open Scene..." +msgstr "シーンを開ã..." #: editor/editor_node.cpp #, fuzzy @@ -2139,18 +2134,18 @@ msgstr "最近使ã£ãŸãƒ•ァイルを開ã" #: editor/editor_node.cpp #, fuzzy -msgid "Convert To.." -msgstr "~ã«å¤‰æ›ã™ã‚‹.." +msgid "Convert To..." +msgstr "~ã«å¤‰æ›ã™ã‚‹..." #: editor/editor_node.cpp #, fuzzy -msgid "MeshLibrary.." -msgstr "メッシュライブラリ.." +msgid "MeshLibrary..." +msgstr "メッシュライブラリ..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "タイルセット.." +msgid "TileSet..." +msgstr "タイルセット..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2358,7 +2353,6 @@ msgid "Issue Tracker" msgstr "課題(ãƒã‚°ï¼‰ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ " #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Community" msgstr "コミュニティ" @@ -2456,8 +2450,8 @@ msgid "Save the currently edited resource." msgstr "ç¾åœ¨ç·¨é›†ä¸ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¿å˜ã™ã‚‹" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜.." +msgid "Save As..." +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2535,7 +2529,7 @@ msgstr "é–‹ã„ã¦ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹" #: editor/editor_node.cpp #, fuzzy msgid "New Inherited" -msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³.." +msgstr "æ–°ã—ã„継承ã—ãŸã‚·ãƒ¼ãƒ³..." #: editor/editor_node.cpp msgid "Load Errors" @@ -2574,8 +2568,8 @@ msgid "Creating Mesh Previews" msgstr "メッシュライブラリを生æˆ" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "サムãƒã‚¤ãƒ«.." +msgid "Thumbnail..." +msgstr "サムãƒã‚¤ãƒ«..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2733,8 +2727,8 @@ msgid "(Current)" msgstr "(ç¾åœ¨ã®ï¼‰" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "ミラーサイトをå–å¾—ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„.." +msgid "Retrieving mirrors, please wait..." +msgstr "ミラーサイトをå–å¾—ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2817,8 +2811,8 @@ msgid "Error requesting url: " msgstr "urlã®è¦æ±‚ã«å¤±æ•—ã—ã¾ã—ãŸ: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ãƒŸãƒ©ãƒ¼ã‚µã‚¤ãƒˆã«æŽ¥ç¶šä¸.." +msgid "Connecting to Mirror..." +msgstr "ãƒŸãƒ©ãƒ¼ã‚µã‚¤ãƒˆã«æŽ¥ç¶šä¸..." #: editor/export_template_manager.cpp #, fuzzy @@ -2835,8 +2829,8 @@ msgstr "解決ã§ãã¾ã›ã‚“" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "接続ä¸.." +msgid "Connecting..." +msgstr "接続ä¸..." #: editor/export_template_manager.cpp #, fuzzy @@ -2849,8 +2843,8 @@ msgstr "接続ã—ã¾ã—ãŸ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "リクエストä¸.." +msgid "Requesting..." +msgstr "リクエストä¸..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2914,7 +2908,7 @@ msgstr "サムãƒã‚¤ãƒ«è¡¨ç¤º" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "リスト表示" +msgstr "リストã§ã‚¢ã‚¤ãƒ†ãƒ を見る" #: editor/filesystem_dock.cpp #, fuzzy @@ -2996,12 +2990,12 @@ msgid "Collapse all" msgstr "ã™ã¹ã¦æŠ˜ã‚ŠãŸãŸã‚€" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "åå‰ã‚’変更ã™ã‚‹.." +msgid "Rename..." +msgstr "åå‰ã‚’変更ã™ã‚‹..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "~ã¸ç§»å‹•ã™ã‚‹.." +msgid "Move To..." +msgstr "~ã¸ç§»å‹•ã™ã‚‹..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3013,17 +3007,17 @@ msgid "Instance" msgstr "インスタンス" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "ä¾å˜é–¢ä¿‚を編集.." +msgid "Edit Dependencies..." +msgstr "ä¾å˜é–¢ä¿‚を編集..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "View Owners.." -msgstr "オーナーを見る.." +msgid "View Owners..." +msgstr "オーナーを見る..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製" #: editor/filesystem_dock.cpp @@ -3051,7 +3045,7 @@ msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®åã¨ã—ã¦ã€é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ã‚’インス #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "ファイルをスã‚ャンã—ã¦ã„ã¾ã™\n" "ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„..." @@ -3079,12 +3073,12 @@ msgstr "グループã‹ã‚‰å–り除ã" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "シーンをインãƒãƒ¼ãƒˆä¸.." +msgstr "シーンをインãƒãƒ¼ãƒˆä¸..." #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import with Separate Animations" -msgstr "アニメーションをインãƒãƒ¼ãƒˆ.." +msgstr "アニメーションをインãƒãƒ¼ãƒˆ..." #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -3127,8 +3121,8 @@ msgstr "シーンをインãƒãƒ¼ãƒˆ" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Importing Scene.." -msgstr "シーンをインãƒãƒ¼ãƒˆä¸.." +msgid "Importing Scene..." +msgstr "シーンをインãƒãƒ¼ãƒˆä¸..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -3142,7 +3136,7 @@ msgstr "軸平行境界ボックス(AABB)を生æˆ" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "カスタムスクリプトを実行ä¸" #: editor/import/resource_importer_scene.cpp @@ -3163,8 +3157,8 @@ msgstr "インãƒãƒ¼ãƒˆæ¸ˆã¿ã®ã‚¹ã‚¯ãƒªãƒ—ト実行エラー" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Saving.." -msgstr "ä¿å˜ä¸.." +msgid "Saving..." +msgstr "ä¿å˜ä¸..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -3185,8 +3179,8 @@ msgid "Import As:" msgstr "~ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "åˆæœŸè¨å®šå€¤.." +msgid "Preset..." +msgstr "åˆæœŸè¨å®šå€¤..." #: editor/import_dock.cpp #, fuzzy @@ -3670,8 +3664,8 @@ msgstr "トランジション(é·ç§»ï¼‰ãƒŽãƒ¼ãƒ‰" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Import Animations.." -msgstr "アニメーションをインãƒãƒ¼ãƒˆ.." +msgid "Import Animations..." +msgstr "アニメーションをインãƒãƒ¼ãƒˆ..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3679,8 +3673,8 @@ msgid "Edit Node Filters" msgstr "ノードフィルターã®ç·¨é›†" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "フィルター.." +msgid "Filters..." +msgstr "フィルター..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3762,8 +3756,8 @@ msgstr "å–å¾—ä¸:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Resolving.." -msgstr "解決ä¸.." +msgid "Resolving..." +msgstr "解決ä¸..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3831,8 +3825,8 @@ msgid "Site:" msgstr "サイト:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "サãƒãƒ¼ãƒˆ.." +msgid "Support..." +msgstr "サãƒãƒ¼ãƒˆ..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4037,6 +4031,7 @@ msgid "Use Rotation Snap" msgstr "回転スナップ機能を使ã†" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Configure Snap..." msgstr "スナップ機能ã®è¨å®š" @@ -4516,8 +4511,8 @@ msgstr "凸型兄弟コリジョンを生æˆ" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Outline Mesh.." -msgstr "アウトラインメッシュを生æˆ.." +msgid "Create Outline Mesh..." +msgstr "アウトラインメッシュを生æˆ..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy @@ -4717,7 +4712,7 @@ msgstr "八分木テクスãƒãƒ£ã‚’生æˆ" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Creating polymesh..." -msgstr "アウトラインメッシュを生æˆ.." +msgstr "アウトラインメッシュを生æˆ..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4758,8 +4753,8 @@ msgstr "イメージèªã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼:" #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy -msgid "No pixels with transparency > 128 in image.." -msgstr "イメージ内ã«é€æ˜Žåº¦>128ã®ãƒ”クセルãŒã‚りã¾ã›ã‚“.." +msgid "No pixels with transparency > 128 in image..." +msgstr "イメージ内ã«é€æ˜Žåº¦>128ã®ãƒ”クセルãŒã‚りã¾ã›ã‚“..." #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -5179,8 +5174,8 @@ msgid "Import Theme" msgstr "テーマã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "テーマをåå‰ã‚’ã¤ã‘ã¦ä¿å˜.." +msgid "Save Theme As..." +msgstr "テーマをåå‰ã‚’ã¤ã‘ã¦ä¿å˜..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -5218,7 +5213,7 @@ msgstr "ファイル" #: editor/plugins/script_editor_plugin.cpp msgid "New" -msgstr "æ–°ã—ã„" +msgstr "æ–°è¦ä½œæˆ" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5286,8 +5281,8 @@ msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’切り替ãˆã‚‹" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find.." -msgstr "検索.." +msgid "Find..." +msgstr "検索..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5508,18 +5503,18 @@ msgid "Find Previous" msgstr "å‰ã‚’検索" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "ç½®ãæ›ãˆ.." +msgid "Replace..." +msgstr "ç½®ãæ›ãˆ..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Function.." -msgstr "関数~ã«ç§»å‹•.." +msgid "Goto Function..." +msgstr "関数~ã«ç§»å‹•..." #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Goto Line.." -msgstr "~行ã«ç§»å‹•.." +msgid "Goto Line..." +msgstr "~行ã«ç§»å‹•..." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6013,13 +6008,8 @@ msgstr "トランスフォーム" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Configure Snap.." -msgstr "スナップ機能ã®è¨å®š" - -#: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy -msgid "Transform Dialog.." -msgstr "トランスフォームã®ãƒ€ã‚¤ã‚¢ãƒã‚°.." +msgid "Transform Dialog..." +msgstr "トランスフォームã®ãƒ€ã‚¤ã‚¢ãƒã‚°..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -6288,7 +6278,7 @@ msgid "Remove All" msgstr "削除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "テーマを編集..." #: editor/plugins/theme_editor_plugin.cpp @@ -6361,8 +6351,9 @@ msgid "Options" msgstr "オプション" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "オプション" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6496,7 +6487,7 @@ msgstr "シーンã‹ã‚‰ãƒžãƒ¼ã‚¸ã—ã¾ã™ã‹ï¼Ÿ" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "タイルセット.." +msgstr "タイルセット..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6565,8 +6556,8 @@ msgid "Presets" msgstr "åˆæœŸè¨å®šå€¤" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "è¿½åŠ .." +msgid "Add..." +msgstr "è¿½åŠ ..." #: editor/project_export.cpp msgid "Resources" @@ -6674,6 +6665,11 @@ msgstr "インãƒãƒ¼ãƒˆã•れãŸãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆ" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆå:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "フォルダを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" @@ -6889,8 +6885,8 @@ msgstr "マウスボタン" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6920,8 +6916,8 @@ msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp #, fuzzy -msgid "Press a Key.." -msgstr "ã‚ーを押ã—ã¦ãã ã•ã„.." +msgid "Press a Key..." +msgstr "ã‚ーを押ã—ã¦ãã ã•ã„..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -7123,7 +7119,7 @@ msgid "Property:" msgstr "プãƒãƒ‘ティ:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -7226,12 +7222,12 @@ msgid "Easing Out-In" msgstr "イージング(Out-In)" #: editor/property_editor.cpp -msgid "File.." -msgstr "ファイル.." +msgid "File..." +msgstr "ファイル..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "ディレクトリ.." +msgid "Dir..." +msgstr "ディレクトリ..." #: editor/property_editor.cpp msgid "Assign" @@ -7262,7 +7258,7 @@ msgstr "ファイルシステム上ã§è¡¨ç¤º" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "~ã«å¤‰æ›ã™ã‚‹.." +msgstr "~ã«å¤‰æ›ã™ã‚‹..." #: editor/property_editor.cpp #, fuzzy @@ -7427,8 +7423,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ã“ã®å‡¦ç†ã«ã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã•れãŸã‚·ãƒ¼ãƒ³ãŒå¿…è¦ã§ã™." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã«åå‰ã‚’付ã‘ã¦ä¿å˜.." +msgid "Save New Scene As..." +msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã«åå‰ã‚’付ã‘ã¦ä¿å˜..." #: editor/scene_tree_dock.cpp #, fuzzy @@ -8002,12 +7998,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Platform" -msgstr "プラットフォームã¸ã‚³ãƒ”ー.." +msgstr "プラットフォームã¸ã‚³ãƒ”ー..." #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -8016,12 +8012,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "GDNativeLibrary" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "メッシュライブラリ.." +msgstr "メッシュライブラリ..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy @@ -9072,15 +9068,14 @@ msgstr "" "らã¯å®Ÿè¡Œæ™‚ã«éžè¡¨ç¤ºã«ãªã‚Šã¾ã™ã€‚" #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox,HBox,etc), or a Control and set the custom " "minimum size manually." msgstr "" -"スクãƒãƒ¼ãƒ«ã‚³ãƒ³ãƒ†ãƒŠã¯åコントãƒãƒ¼ãƒ«ãŒå‹•作ã«å¿…è¦ã§ã™. VBox,HBoxãªã©ã®ã‚³ãƒ³ãƒ†ãƒŠ" -"ã‚’åã¨ã™ã‚‹ã‹ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’カスタム最å°ã‚µã‚¤ã‚ºã«ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã§æŒ‡å®šã—ã¦ä½¿ç”¨ã—ã¦" -"ãã ã•ã„." +"ScrollContainerã¯å˜ä¸€ã®åコントãƒãƒ¼ãƒ«ã§å‹•作ã™ã‚‹ã‚ˆã†ã«æ„図ã•れã¦ã„ã¾ã™ã€‚コンテ" +"ナ(VBox, HBoxãªã©)ã‚’åã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã‹ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’使用ã—ã¦ã‚«ã‚¹ã‚¿ãƒ 最å°ã‚µ" +"イズを手動ã§è¨å®šã—ã¦ãã ã•ã„。" #: scene/gui/tree.cpp #, fuzzy @@ -9306,8 +9301,8 @@ msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" #~ msgstr "%sã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆä¸" #, fuzzy -#~ msgid "Setting Up.." -#~ msgstr "セットアップä¸.." +#~ msgid "Setting Up..." +#~ msgstr "セットアップä¸..." #, fuzzy #~ msgid "Error loading scene." @@ -9375,8 +9370,8 @@ msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" #~ msgstr "インフォーメーション" #, fuzzy -#~ msgid "Re-Import.." -#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ.." +#~ msgid "Re-Import..." +#~ msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ..." #, fuzzy #~ msgid "No bit masks to import!" @@ -9871,15 +9866,15 @@ msgstr "無効ãªãƒ•ォント サイズã§ã™ã€‚" #~ msgstr "ズーム(%):" #, fuzzy -#~ msgid "Skeleton.." -#~ msgstr "スケルトン.." +#~ msgid "Skeleton..." +#~ msgstr "スケルトン..." #~ msgid "Zoom Reset" #~ msgstr "ズームをリセット" #, fuzzy -#~ msgid "Zoom Set.." -#~ msgstr "ズームをセットã™ã‚‹.." +#~ msgid "Zoom Set..." +#~ msgstr "ズームをセットã™ã‚‹..." #~ msgid "Set a Value" #~ msgstr "値をè¨å®šã™ã‚‹" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index c3fcfbbb72..575c14c97c 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -9,13 +9,14 @@ # TheRedPlanet <junmo.moon8@gmail.com>, 2018. # Xavier Cho <mysticfallband@gmail.com>, 2018. # 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2018. +# ì†¡íƒœì„ <xotjq237@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-18 15:39+0000\n" -"Last-Translator: Sun Kim <perplexingsun@gmail.com>\n" +"PO-Revision-Date: 2018-05-27 04:39+0000\n" +"Last-Translator: ì†¡íƒœì„ <xotjq237@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -39,7 +40,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ í‚¤í”„ë ˆìž„ 시간 변경" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랜지션 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì „í™˜ 변경" #: editor/animation_editor.cpp msgid "Anim Change Transform" @@ -75,7 +76,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 ì‚ì œ" #: editor/animation_editor.cpp msgid "Set Transitions to:" -msgstr "변화 ì„¤ì •:" +msgstr "ì „í™˜ ì„¤ì •:" #: editor/animation_editor.cpp msgid "Anim Track Rename" @@ -181,7 +182,7 @@ msgstr "ë°–-안" #: editor/animation_editor.cpp msgid "Transitions" -msgstr "변화" +msgstr "ì „í™˜" #: editor/animation_editor.cpp msgid "Optimize Animation" @@ -322,7 +323,7 @@ msgstr "키" #: editor/animation_editor.cpp msgid "Transition" -msgstr "변화" +msgstr "ì „í™˜" #: editor/animation_editor.cpp msgid "Scale Ratio:" @@ -504,8 +505,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "'%s'와 '%s'ì˜ ì—°ê²° í•´ì œ" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "연결하기.." +msgid "Connect..." +msgstr "연결하기..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -923,12 +924,12 @@ msgid "Move Audio Bus" msgstr "오디오 버스 ì´ë™" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "오디오 버스 ë ˆì´ì•„ì›ƒì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥.." +msgid "Save Audio Bus Layout As..." +msgstr "오디오 버스 ë ˆì´ì•„ì›ƒì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "새 ë ˆì´ì•„ì›ƒì„ ì €ìž¥í• ìž¥ì†Œ.." +msgid "Location for New Layout..." +msgstr "새 ë ˆì´ì•„ì›ƒì„ ì €ìž¥í• ìž¥ì†Œ..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -966,7 +967,7 @@ msgstr "다른 ì´ë¦„으로 ì €ìž¥" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "ì´ ë²„ìŠ¤ ë ˆì´ì•„ì›ƒì„ íŒŒì¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤.." +msgstr "ì´ ë²„ìŠ¤ ë ˆì´ì•„ì›ƒì„ íŒŒì¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤..." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1065,12 +1066,12 @@ msgid "Updating Scene" msgstr "씬 ì—…ë°ì´íЏ 중" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "로컬 변경사í•ì„ ì €ìž¥ 중.." +msgid "Storing local changes..." +msgstr "로컬 변경사í•ì„ ì €ìž¥ 중..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "씬 ì—…ë°ì´íЏ 중.." +msgid "Updating scene..." +msgstr "씬 ì—…ë°ì´íЏ 중..." #: editor/editor_data.cpp msgid "[empty]" @@ -1138,8 +1139,8 @@ msgid "Show In File Manager" msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—서 보기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "새 í´ë”.." +msgid "New Folder..." +msgstr "새 í´ë”..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1400,20 +1401,20 @@ msgstr "ì¶œë ¥ 지우기" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "프로ì 트 내보내기가 오류 코드 %d 로 실패했습니다." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "리소스 ì €ìž¥ 중 ì—러!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥.." +msgid "Save Resource As..." +msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "ì•Œê² ìŠµë‹ˆë‹¤.." +msgid "I see..." +msgstr "ì•Œê² ìŠµë‹ˆë‹¤..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1437,7 +1438,7 @@ msgstr "'%s' 파싱 중 ì—러." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "예ìƒì¹˜ 못한 파ì¼ì˜ ë '%s' 입니다.." +msgstr "예ìƒì¹˜ 못한 파ì¼ì˜ ë '%s' 입니다..." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -1639,12 +1640,12 @@ msgid "Open Base Scene" msgstr "기본 씬 열기" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "ë¹ ë¥¸ 씬 열기.." +msgid "Quick Open Scene..." +msgstr "ë¹ ë¥¸ 씬 열기..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "ë¹ ë¥¸ 스í¬ë¦½íЏ 열기.." +msgid "Quick Open Script..." +msgstr "ë¹ ë¥¸ 스í¬ë¦½íЏ 열기..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1655,8 +1656,8 @@ msgid "Save changes to '%s' before closing?" msgstr "닫기 ì „ì— '%s' ì— ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥.." +msgid "Save Scene As..." +msgstr "ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." #: editor/editor_node.cpp msgid "No" @@ -1707,8 +1708,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "ì´ í–‰ë™ì€ 취소가 불가능합니다. ë¬´ì‹œí•˜ê³ ë˜ëŒë¦¬ì‹œê² 습니까?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "ë¹ ë¥¸ 씬 실행.." +msgid "Quick Run Scene..." +msgstr "ë¹ ë¥¸ 씬 실행..." #: editor/editor_node.cpp msgid "Quit" @@ -1862,8 +1863,8 @@ msgid "Previous tab" msgstr "ì´ì „ íƒ" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "íŒŒì¼ í•„í„°ë§.." +msgid "Filter Files..." +msgstr "íŒŒì¼ í•„í„°ë§..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1874,12 +1875,12 @@ msgid "New Scene" msgstr "새 씬" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "새 ìƒì† 씬.." +msgid "New Inherited Scene..." +msgstr "새 ìƒì† 씬..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "씬 열기.." +msgid "Open Scene..." +msgstr "씬 열기..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1898,16 +1899,16 @@ msgid "Open Recent" msgstr "최근 ì—´ì—ˆë˜ í•목" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "변환.." +msgid "Convert To..." +msgstr "변환..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "메시 ë¼ì´ë¸ŒëŸ¬ë¦¬.." +msgid "MeshLibrary..." +msgstr "메시 ë¼ì´ë¸ŒëŸ¬ë¦¬..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "íƒ€ì¼ ì…‹.." +msgid "TileSet..." +msgstr "íƒ€ì¼ ì…‹..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2171,8 +2172,8 @@ msgid "Save the currently edited resource." msgstr "현재 íŽ¸ì§‘ëœ ë¦¬ì†ŒìŠ¤ ì €ìž¥." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "다른 ì´ë¦„으로 ì €ìž¥.." +msgid "Save As..." +msgstr "다른 ì´ë¦„으로 ì €ìž¥..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2280,8 +2281,8 @@ msgid "Creating Mesh Previews" msgstr "메시 미리보기 ìƒì„± 중" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "ì¸ë„¤ì¼.." +msgid "Thumbnail..." +msgstr "ì¸ë„¤ì¼..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2433,8 +2434,8 @@ msgid "(Current)" msgstr "(현재)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "미러를 ê°€ì ¸ì˜¤ëŠ” 중입니다, ìž ì‹œë§Œ 기다리세요.." +msgid "Retrieving mirrors, please wait..." +msgstr "미러를 ê°€ì ¸ì˜¤ëŠ” 중입니다, ìž ì‹œë§Œ 기다리세요..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2511,8 +2512,8 @@ msgid "Error requesting url: " msgstr "url ìš”ì² ì—러: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ë¯¸ëŸ¬ì— ì—°ê²°ì¤‘.." +msgid "Connecting to Mirror..." +msgstr "ë¯¸ëŸ¬ì— ì—°ê²°ì¤‘..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2528,8 +2529,8 @@ msgstr "í•´ê²°í• ìˆ˜ ì—†ìŒ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "연결중.." +msgid "Connecting..." +msgstr "연결중..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2541,8 +2542,8 @@ msgstr "ì—°ê²°ë¨" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "ìš”ì²ì¤‘.." +msgid "Requesting..." +msgstr "ìš”ì²ì¤‘..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2674,12 +2675,12 @@ msgid "Collapse all" msgstr "ëª¨ë‘ ì ‘ê¸°" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "ì´ë¦„ 변경.." +msgid "Rename..." +msgstr "ì´ë¦„ 변경..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ì´ë™.." +msgid "Move To..." +msgstr "ì´ë™..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2690,16 +2691,16 @@ msgid "Instance" msgstr "ì¸ìŠ¤í„´ìŠ¤" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "ì¢…ì† ê´€ê³„ 편집.." +msgid "Edit Dependencies..." +msgstr "ì¢…ì† ê´€ê³„ 편집..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ì†Œìœ ìž ë³´ê¸°.." +msgid "View Owners..." +msgstr "ì†Œìœ ìž ë³´ê¸°..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "ë³µì œ.." +msgid "Duplicate..." +msgstr "ë³µì œ..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2724,10 +2725,10 @@ msgstr "ì„ íƒëœ ì”¬ì„ ì„ íƒëœ ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ì¸ìŠ¤í„´ìŠ¤ 합니다 #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "íŒŒì¼ ìŠ¤ìº”ì¤‘,\n" -"ìž ì‹œë§Œ ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”.." +"ìž ì‹œë§Œ ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2792,8 +2793,8 @@ msgid "Import Scene" msgstr "씬 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "씬 ê°€ì ¸ì˜¤ëŠ” 중.." +msgid "Importing Scene..." +msgstr "씬 ê°€ì ¸ì˜¤ëŠ” 중..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2804,8 +2805,8 @@ msgid "Generating for Mesh: " msgstr "메시를 위해 ìƒì„± 중: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "ì‚¬ìš©ìž ì •ì˜ ìŠ¤í¬ë¦½íЏ 실행중.." +msgid "Running Custom Script..." +msgstr "ì‚¬ìš©ìž ì •ì˜ ìŠ¤í¬ë¦½íЏ 실행중..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2821,8 +2822,8 @@ msgid "Error running post-import script:" msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íЏ 실행 중 ì—러:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "ì €ìž¥ 중.." +msgid "Saving..." +msgstr "ì €ìž¥ 중..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2841,8 +2842,8 @@ msgid "Import As:" msgstr "ë‹¤ìŒ í˜•ì‹ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "프리셋.." +msgid "Preset..." +msgstr "프리셋..." #: editor/import_dock.cpp msgid "Reimport" @@ -3256,19 +3257,19 @@ msgstr "시간 íƒìƒ‰ 노드" #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "변화 노드" +msgstr "ì „í™˜ 노드" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "ì• ë‹ˆë©”ì´ì…˜ ê°€ì ¸ì˜¤ê¸°.." +msgid "Import Animations..." +msgstr "ì• ë‹ˆë©”ì´ì…˜ ê°€ì ¸ì˜¤ê¸°..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "노드 í•„í„° 편집" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "í•„í„°.." +msgid "Filters..." +msgstr "í•„í„°..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3335,8 +3336,8 @@ msgid "Fetching:" msgstr "ê°€ì ¸ì˜¤ëŠ” 중:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "í•´ê²° 중.." +msgid "Resolving..." +msgstr "í•´ê²° 중..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3402,8 +3403,8 @@ msgid "Site:" msgstr "사ì´íЏ:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "ì§€ì›.." +msgid "Support..." +msgstr "ì§€ì›..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3596,6 +3597,7 @@ msgid "Use Rotation Snap" msgstr "íšŒì „ 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "스냅 ì„¤ì •..." @@ -3692,14 +3694,12 @@ msgid "Show Guides" msgstr "ê°€ì´ë“œ 보기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "ì›ì 보기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1ê°œ ë·°í¬íЏ" +msgstr "ë·°í¬íЏ 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3992,7 +3992,7 @@ msgstr "ë©”ì‹œì— ì™¸ê³½ì„ ì„ ë§Œë“¤ê¸° 위한 서피스가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "메시 기본 íƒ€ìž…ì´ PRIMITIVE_TRIANGLESì´ ì•„ë‹™ë‹ˆë‹¤!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4023,8 +4023,8 @@ msgid "Create Convex Collision Sibling" msgstr "Convex ì¶©ëŒ í˜•ì œ 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "ì™¸ê³½ì„ ë©”ì‹œ 만들기.." +msgid "Create Outline Mesh..." +msgstr "ì™¸ê³½ì„ ë©”ì‹œ 만들기..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4228,8 +4228,8 @@ msgid "Error loading image:" msgstr "ì´ë¯¸ì§€ 로드 ì—러:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "ì´ë¯¸ì§€ì— 투명ë„ê°€ 128보다 í° í”½ì…€ì´ ì—†ìŠµë‹ˆë‹¤.." +msgid "No pixels with transparency > 128 in image..." +msgstr "ì´ë¯¸ì§€ì— 투명ë„ê°€ 128보다 í° í”½ì…€ì´ ì—†ìŠµë‹ˆë‹¤..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4589,8 +4589,8 @@ msgid "Import Theme" msgstr "테마 ê°€ì ¸ì˜¤ê¸°" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "테마 다른 ì´ë¦„으로 ì €ìž¥.." +msgid "Save Theme As..." +msgstr "테마 다른 ì´ë¦„으로 ì €ìž¥..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4686,8 +4686,8 @@ msgstr "스í¬ë¦½íЏ íŒ¨ë„ í† ê¸€" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "찾기.." +msgid "Find..." +msgstr "찾기..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4894,16 +4894,16 @@ msgid "Find Previous" msgstr "ì´ì „ 찾기" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "변경.." +msgid "Replace..." +msgstr "변경..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "함수로 ì´ë™.." +msgid "Goto Function..." +msgstr "함수로 ì´ë™..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™.." +msgid "Goto Line..." +msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5356,12 +5356,8 @@ msgid "Transform" msgstr "변형" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "스냅 ì„¤ì •.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "변형 다ì´ì–¼ë¡œê·¸.." +msgid "Transform Dialog..." +msgstr "변형 다ì´ì–¼ë¡œê·¸..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5613,8 +5609,8 @@ msgid "Remove All" msgstr "ëª¨ë‘ ì‚ì œ" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "테마 편집.." +msgid "Edit theme..." +msgstr "테마 편집..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5661,14 +5657,12 @@ msgid "Checked Item" msgstr "í•목 확ì¸ë¨" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "í•목 추가" +msgstr "ë¼ë””오 í•목" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "í•목 확ì¸ë¨" +msgstr "ë¼ë””오 í•목 확ì¸ë¨" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5683,7 +5677,8 @@ msgid "Options" msgstr "옵션" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "가진다,ë§Žì€,여러,옵션들!" #: editor/plugins/theme_editor_plugin.cpp @@ -5875,8 +5870,8 @@ msgid "Presets" msgstr "프리셋" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "추가.." +msgid "Add..." +msgstr "추가..." #: editor/project_export.cpp msgid "Resources" @@ -5965,6 +5960,11 @@ msgid "Imported Project" msgstr "ê°€ì ¸ì˜¨ 프로ì 트" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "프로ì 트 명:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "í´ë”를 만들 수 없습니다." @@ -6162,10 +6162,13 @@ msgid "Mouse Button" msgstr "마우스 버튼" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"올바르지 ì•Šì€ ì•¡ì…˜ ì´ë¦„. 공백ì´ê±°ë‚˜ '/' ì´ë‚˜ ':', '=', '\\', '\"' ê°€ í¬í•¨ë˜" +"ë©´ 안 ë©ë‹ˆë‹¤" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6192,8 +6195,8 @@ msgid "Control+" msgstr "컨트롤+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "키를 눌러주세요.." +msgid "Press a Key..." +msgstr "키를 눌러주세요..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6376,8 +6379,8 @@ msgid "Property:" msgstr "ì†ì„±:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "ìž¬ì •ì˜.." +msgid "Override For..." +msgstr "ìž¬ì •ì˜..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6472,12 +6475,12 @@ msgid "Easing Out-In" msgstr "ê°€ì†-ê°ì†" #: editor/property_editor.cpp -msgid "File.." -msgstr "파ì¼.." +msgid "File..." +msgstr "파ì¼..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "ë””ë ‰í† ë¦¬.." +msgid "Dir..." +msgstr "ë””ë ‰í† ë¦¬..." #: editor/property_editor.cpp msgid "Assign" @@ -6647,8 +6650,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ì´ ìž‘ì—…ì€ ì¸ìŠ¤í„´ìŠ¤ëœ ì”¬ì—서는 불가합니다." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "새 ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥.." +msgid "Save New Scene As..." +msgstr "새 ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7363,7 +7366,7 @@ msgstr "거리 ì„ íƒ:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "í´ëž˜ìФ ì´ë¦„ì€ í‚¤ì›Œë“œê°€ ë 수 없습니다" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8064,7 +8067,7 @@ msgstr "Path ì†ì„±ì€ ìœ íš¨í•œ Spatial 노드를 가리켜야 합니다." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment는 Environment 리소스가 필요합니다." #: scene/3d/scenario_fx.cpp msgid "" @@ -8076,6 +8079,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"ì´ WorldEnvironment는 무시ë©ë‹ˆë‹¤. (3D ì”¬ì„ ìœ„í•´) Camera를 추가하거나 아니면 " +"(2D ì”¬ì„ ìœ„í•´) ì´ í™˜ê²½ì˜ ë°°ê²½ 모드를 Canvas로 ì„¤ì •í•˜ì„¸ìš”." #: scene/3d/sprite_3d.cpp msgid "" @@ -8333,8 +8338,8 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #~ msgid "Exporting for %s" #~ msgstr "%s 내보내기" -#~ msgid "Setting Up.." -#~ msgstr "ì„¤ì • 중.." +#~ msgid "Setting Up..." +#~ msgstr "ì„¤ì • 중..." #~ msgid "Error loading scene." #~ msgstr "씬 로딩 중 ì—러." @@ -8388,8 +8393,8 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #~ msgid "Info" #~ msgstr "ì •ë³´" -#~ msgid "Re-Import.." -#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸°.." +#~ msgid "Re-Import..." +#~ msgstr "다시 ê°€ì ¸ì˜¤ê¸°..." #~ msgid "No bit masks to import!" #~ msgstr "ê°€ì ¸ì˜¬ 비트 마스í¬ê°€ 없습니다!" @@ -8781,14 +8786,14 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #~ msgid "Zoom (%):" #~ msgstr "확대 (%):" -#~ msgid "Skeleton.." -#~ msgstr "ìŠ¤ì¼ˆë ˆí†¤.." +#~ msgid "Skeleton..." +#~ msgstr "ìŠ¤ì¼ˆë ˆí†¤..." #~ msgid "Zoom Reset" #~ msgstr "확대 초기화" -#~ msgid "Zoom Set.." -#~ msgstr "확대 ì„¤ì •.." +#~ msgid "Zoom Set..." +#~ msgstr "확대 ì„¤ì •..." #~ msgid "Set a Value" #~ msgstr "ê°’ ì„¤ì •" @@ -9219,8 +9224,8 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #~ msgid "Export Project PCK" #~ msgstr "프로ì 트 PCK 내보내기" -#~ msgid "Export.." -#~ msgstr "내보내기.." +#~ msgid "Export..." +#~ msgstr "내보내기..." #~ msgid "Project Export" #~ msgstr "프로ì 트 내보내기" @@ -9333,8 +9338,8 @@ msgstr "ìœ íš¨í•˜ì§€ ì•Šì€ í°íЏ í¬ê¸°." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "툴 스í¬ë¦½íЏ 다시 로드 (소프트)" -#~ msgid "Edit Connections.." -#~ msgstr "ì—°ê²° 편집.." +#~ msgid "Edit Connections..." +#~ msgstr "ì—°ê²° 편집..." #~ msgid "Set Params" #~ msgstr "ì†ì„± ì ìš©" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 6504e570f7..aaf6fc4499 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -503,7 +503,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Prijungti '%s' prie '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -914,11 +914,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1054,11 +1054,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1127,7 +1127,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1389,12 +1389,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1599,11 +1599,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1615,7 +1615,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1667,7 +1667,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1812,7 +1812,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1824,11 +1824,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1848,15 +1848,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2101,7 +2101,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2210,8 +2210,8 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "MiniatÅ«ra.." +msgid "Thumbnail..." +msgstr "MiniatÅ«ra..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2362,7 +2362,7 @@ msgid "(Current)" msgstr "(Esama)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2439,7 +2439,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2456,7 +2456,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2469,7 +2469,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2605,11 +2605,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2621,16 +2621,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplikuoti" #: editor/filesystem_dock.cpp @@ -2656,7 +2656,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2722,7 +2722,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2734,7 +2734,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2750,7 +2750,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2770,7 +2770,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3186,8 +3186,8 @@ msgid "Transition Node" msgstr "Transition Nodas" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importuoti Animacijas.." +msgid "Import Animations..." +msgstr "Importuoti Animacijas..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" @@ -3195,8 +3195,8 @@ msgstr "Redaguoti Nodų Filtrus" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Filters.." -msgstr "Filtrai.." +msgid "Filters..." +msgstr "Filtrai..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3264,7 +3264,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3331,7 +3331,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3518,6 +3518,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3939,7 +3940,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4144,7 +4145,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4505,7 +4506,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4602,7 +4603,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4808,15 +4809,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5268,11 +5269,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5525,7 +5522,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5593,7 +5590,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5781,7 +5778,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5871,6 +5868,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Netinkamas Å¡rifto dydis." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6060,8 +6062,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6089,7 +6091,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6273,7 +6275,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6369,11 +6371,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6544,7 +6546,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/ms.po b/editor/translations/ms.po new file mode 100644 index 0000000000..19d8b6b7d8 --- /dev/null +++ b/editor/translations/ms.po @@ -0,0 +1,7956 @@ +# Malay translation of the Godot Engine editor +# Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) +# This file is distributed under the same license as the Godot source code. +# +# Sam Vanguard <syafz119@gmail.com>, 2018. +# Shaqir Rafiq <moshamoradev@gmail.com>, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"PO-Revision-Date: 2018-06-05 19:27+0000\n" +"Last-Translator: Shaqir Rafiq <moshamoradev@gmail.com>\n" +"Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" +"ms/>\n" +"Language: ms\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.0\n" + +#: editor/animation_editor.cpp +msgid "Disabled" +msgstr "Tidak Aktif" + +#: editor/animation_editor.cpp +msgid "All Selection" +msgstr "Semua Pilihan" + +#: editor/animation_editor.cpp +#, fuzzy +msgid "Anim Change Keyframe Time" +msgstr "Anim Ubah Masa Keyframe" + +#: editor/animation_editor.cpp +msgid "Anim Change Transition" +msgstr "Anim Ubah Peralihan" + +#: editor/animation_editor.cpp +msgid "Anim Change Transform" +msgstr "Anim Ubah Penukaran" + +#: editor/animation_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Anim Ubah Nilai Keyframe" + +#: editor/animation_editor.cpp +msgid "Anim Change Call" +msgstr "Anim Ubah Panggilan" + +#: editor/animation_editor.cpp +msgid "Anim Add Track" +msgstr "Anim Tambah Trek" + +#: editor/animation_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Anim Menduakan Kunci" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Up" +msgstr "Ubah Trek Anim Ke Atas" + +#: editor/animation_editor.cpp +msgid "Move Anim Track Down" +msgstr "Ubah Trek Anim Ke Bawah" + +#: editor/animation_editor.cpp +msgid "Remove Anim Track" +msgstr "Buang Trek Anim" + +#: editor/animation_editor.cpp +msgid "Set Transitions to:" +msgstr "Set Peralihan ke:" + +#: editor/animation_editor.cpp +msgid "Anim Track Rename" +msgstr "Ubah Nama Trek Anim" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Interpolation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Value Mode" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Track Change Wrap Mode" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Edit Node Curve" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Edit Selection Curve" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Delete Keys" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/tile_map_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Continuous" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Discrete" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Trigger" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Add Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Goto Next Step" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Goto Prev Step" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "" + +#: editor/animation_editor.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Constant" +msgstr "" + +#: editor/animation_editor.cpp +msgid "In" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Out" +msgstr "" + +#: editor/animation_editor.cpp +msgid "In-Out" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Out-In" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Transitions" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Optimize Animation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "" + +#: editor/animation_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp editor/script_create_dialog.cpp +msgid "Create" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Create & Insert" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Change Anim Len" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Change Anim Loop" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Create Typed Value Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Insert" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Scale Keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim Add Call Track" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Animation zoom." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Length (s):" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Animation length (in seconds)." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Step (s):" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Cursor step snap (in seconds)." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Enable/Disable looping in animation." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Add new tracks." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Move current track up." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Move current track down." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove selected track." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Track tools" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Enable editing of individual keys by clicking them." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Optimize" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Select an AnimationPlayer from the Scene Tree to edit animations." +msgstr "" + +#: editor/animation_editor.cpp +msgid "Key" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Transition" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Call Functions in Which Node?" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: editor/code_editor.cpp +msgid "Go to Line" +msgstr "" + +#: editor/code_editor.cpp +msgid "Line Number:" +msgstr "" + +#: editor/code_editor.cpp +msgid "No Matches" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replaced %d occurrence(s)." +msgstr "" + +#: editor/code_editor.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.cpp +msgid "Whole Words" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace All" +msgstr "" + +#: editor/code_editor.cpp +msgid "Selection Only" +msgstr "" + +#: editor/code_editor.cpp +msgid "Zoom In" +msgstr "" + +#: editor/code_editor.cpp +msgid "Zoom Out" +msgstr "" + +#: editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "" + +#: editor/code_editor.cpp editor/script_editor_debugger.cpp +msgid "Line:" +msgstr "" + +#: editor/code_editor.cpp +msgid "Col:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target Node must be specified!" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Target method not found! Specify a valid method or attach a script to target " +"Node." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect To Node:" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp +#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Add" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp +msgid "Remove" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Path to Node:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Make Function" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connecting Signal:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect..." +msgstr "" + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Disconnect" +msgstr "" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Change" +msgstr "" + +#: editor/create_dialog.cpp +msgid "Create New %s" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +msgid "Recent:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_node.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +msgid "Search:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp +msgid "Matches:" +msgstr "" + +#: editor/create_dialog.cpp editor/editor_help.cpp +#: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp +#: editor/script_editor_debugger.cpp +msgid "Description:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will not take effect unless reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resource" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Path" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp +#: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp +#: editor/quick_open.cpp scene/gui/file_dialog.cpp +msgid "Open" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Remove selected files from the project? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (no undo)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Cannot remove:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Scene failed to load due to missing dependencies:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Open Anyway" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Owns" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Delete selected files?" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/project_export.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Key" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Value" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks from the Godot community!" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks!" +msgstr "" + +#: editor/editor_about.cpp +msgid "Godot Engine contributors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "" + +#: editor/editor_about.cpp +msgid "Project Manager " +msgstr "" + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "" + +#: editor/editor_about.cpp +msgid "Authors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "License" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thirdparty License" +msgstr "" + +#: editor/editor_about.cpp +msgid "" +"Godot Engine relies on a number of thirdparty free and open source " +"libraries, all compatible with the terms of its MIT license. The following " +"is an exhaustive list of all such thirdparty components with their " +"respective copyright statements and license terms." +msgstr "" + +#: editor/editor_about.cpp +msgid "All Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Components" +msgstr "" + +#: editor/editor_about.cpp +msgid "Licenses" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Error opening package file, not in zip format." +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Uncompressing Assets" +msgstr "" + +#: editor/editor_asset_installer.cpp editor/project_manager.cpp +msgid "Package Installed Successfully!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Install" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Package Installer" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Speakers" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Rename Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Change Audio Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Bypass Effects" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Select Audio Bus Send" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio Bus, Drag and Drop to rearrange." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bypass" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Bus options" +msgstr "" + +#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Master bus can't be deleted!" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Duplicate Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Audio Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save Audio Bus Layout As..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Location for New Layout..." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Open Audio Bus Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "There is no 'res://default_bus_layout.tres' file." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Load" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load an existing Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Save As" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save this Bus Layout to a file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/import_dock.cpp +msgid "Load Default" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Load the default Bus Layout." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing buit-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name. Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid Path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "File does not exist." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Not in resource path." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Enable" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp +#: scene/gui/file_dialog.cpp +msgid "Path:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp +#: editor/project_manager.cpp editor/settings_config_dialog.cpp +msgid "Name" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Singleton" +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: editor/editor_data.cpp +msgid "Storing local changes..." +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating scene..." +msgstr "" + +#: editor/editor_data.cpp +msgid "[empty]" +msgstr "" + +#: editor/editor_data.cpp +msgid "[unsaved]" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Please select a base directory first" +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: scene/gui/file_dialog.cpp +msgid "Name:" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "" + +#: editor/editor_export.cpp +msgid "Storing File:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Packing" +msgstr "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File Exists, Overwrite?" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Show In File Manager" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder..." +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Refresh" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Recognized" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Files (*)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp +msgid "Save" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Save a File" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Go to parent folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp +#: scene/gui/file_dialog.cpp +msgid "File:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "(Re)Importing Assets" +msgstr "" + +#: editor/editor_help.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "" + +#: editor/editor_help.cpp +msgid "Class List:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Search Classes" +msgstr "" + +#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +msgid "Top" +msgstr "" + +#: editor/editor_help.cpp editor/property_editor.cpp +msgid "Class:" +msgstr "" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Brief Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Members" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Public Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Public Methods:" +msgstr "" + +#: editor/editor_help.cpp +msgid "GUI Theme Items" +msgstr "" + +#: editor/editor_help.cpp +msgid "GUI Theme Items:" +msgstr "" + +#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "" + +#: editor/editor_help.cpp +msgid "Enumerations:" +msgstr "" + +#: editor/editor_help.cpp +msgid "enum " +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants" +msgstr "" + +#: editor/editor_help.cpp +msgid "Constants:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Description" +msgstr "" + +#: editor/editor_help.cpp +msgid "Online Tutorials:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There are currently no tutorials for this class, you can [color=$color][url=" +"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" +"url][/color]." +msgstr "" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "" + +#: editor/editor_help.cpp +msgid "Property Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "" + +#: editor/editor_help.cpp +msgid "Method Description:" +msgstr "" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" + +#: editor/editor_help.cpp +msgid "Search Text" +msgstr "" + +#: editor/editor_help.cpp +msgid "Find" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "" + +#: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/property_editor.cpp editor/script_editor_debugger.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Clear" +msgstr "" + +#: editor/editor_log.cpp +msgid "Clear Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project export failed with error code %d." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/scene_tree_dock.cpp +msgid "I see..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while saving." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't open '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Analyzing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a tree root." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " +"be satisfied." +msgstr "" + +#: editor/editor_node.cpp +msgid "Failed to load resource." +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error trying to save layout!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Default editor layout overridden." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored default layout to base settings." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it will not be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it will not be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This is a remote object so changes to it will not be kept.\n" +"Please read the documentation relevant to debugging to better understand " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand all properties" +msgstr "" + +#: editor/editor_node.cpp +msgid "Collapse all properties" +msgstr "" + +#: editor/editor_node.cpp +msgid "Copy Params" +msgstr "" + +#: editor/editor_node.cpp +msgid "Paste Params" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/editor_node.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/editor_node.cpp +msgid "Make Built-In" +msgstr "" + +#: editor/editor_node.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open in Help" +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene was never saved, please save it prior to running." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Script..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Close" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to '%s' before closing?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "No" +msgstr "" + +#: editor/editor_node.cpp +msgid "Yes" +msgstr "" + +#: editor/editor_node.cpp +msgid "This scene has never been saved. Save before running?" +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a root node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a selected node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert" +msgstr "" + +#: editor/editor_node.cpp +msgid "This action cannot be undone. Revert anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Run Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before quitting?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes the following scene(s) before opening Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to enable addon plugin at: '%s' parsing of config failed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' Base type is not EditorPlugin." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s' Script is not in tool mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Scene '%s' was automatically imported, so it can't be modified.\n" +"To make changes to it, a new inherited scene can be created." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Ugh" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Delete Layout" +msgstr "" + +#: editor/editor_node.cpp editor/import_dock.cpp +#: editor/script_create_dialog.cpp +msgid "Default" +msgstr "" + +#: editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files or folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more folders" +msgstr "" + +#: editor/editor_node.cpp +msgid "%d more files" +msgstr "" + +#: editor/editor_node.cpp +msgid "Dock Position" +msgstr "" + +#: editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle distraction-free mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "Add a new scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Next tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Filter Files..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: editor/editor_node.cpp +msgid "New Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save all Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +msgstr "" + +#: editor/editor_node.cpp +msgid "Convert To..." +msgstr "" + +#: editor/editor_node.cpp +msgid "MeshLibrary..." +msgstr "" + +#: editor/editor_node.cpp +msgid "TileSet..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Undo" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Revert Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp +msgid "Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Project Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Run Script" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_node.cpp +msgid "Tools" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When exporting or deploying, the resulting executable will attempt to " +"connect to the IP of this computer in order to be debugged." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network FS" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, export or deploy will produce a minimal " +"executable.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploy will use the USB cable for faster performance. This " +"option speeds up testing for games with a large footprint." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " +"running game if this option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Navigation meshes and polygons will be visible on the running game if this " +"option is turned on." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any changes made to the scene in the editor " +"will be replicated in the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Sync Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is turned on, any script that is saved will be reloaded on " +"the running game.\n" +"When used remotely on a device, this is more efficient with network " +"filesystem." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor" +msgstr "" + +#: editor/editor_node.cpp editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "Help" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Classes" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Search" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/editor_node.cpp +msgid "Q&A" +msgstr "" + +#: editor/editor_node.cpp +msgid "Issue Tracker" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "" + +#: editor/editor_node.cpp +msgid "About" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause the scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play custom scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Spins when the editor window repaints!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Always" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "Disable Update Spinner" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/editor_node.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Save As..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/editor_node.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/editor_node.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/editor_node.cpp +msgid "Object properties." +msgstr "" + +#: editor/editor_node.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Import" +msgstr "" + +#: editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "" + +#: editor/editor_node.cpp editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "" + +#: editor/editor_node.cpp +msgid "Password:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "" + +#: editor/editor_node.cpp +msgid "New Inherited" +msgstr "" + +#: editor/editor_node.cpp +msgid "Load Errors" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 2D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 3D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Script Editor" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "Open Asset Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the next Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the previous Editor" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail..." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Author:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Status:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Stop Profiling" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Start Profiling" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Average Time (sec)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Physics Frame %" +msgstr "" + +#: editor/editor_profiler.cpp editor/script_editor_debugger.cpp +msgid "Time:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Self" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Calls" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "Select device from the list" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "" +"No runnable export preset found for this platform.\n" +"Please add a runnable preset in the export menu." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: editor/editor_settings.cpp +msgid "Default (Same as Editor)" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Re-Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Installed)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Missing)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "(Current)" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Retrieving mirrors, please wait..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove template version '%s'?" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't open export templates zip." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Invalid version.txt format inside templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No version.txt found inside templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error creating path for templates:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Extracting Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Importing:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"No download links found for this version. Direct download is only available " +"for official releases." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request Failed." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect Loop." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Complete." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error requesting url: " +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connecting to Mirror..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Disconnected" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Resolving" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Resolve" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Connect" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connected" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Downloading" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connection Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "SSL Handshake Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Current Version:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Installed Versions:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install From File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove Template" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select template file" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select mirror from list: " +msgstr "" + +#: editor/file_type_cache.cpp +msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot navigate to '%s' as it has not been found in the file system!" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View items as a list" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Status: Import of file failed. Please fix file and reimport manually." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move/rename resources root." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move a folder into itself." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error moving:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error duplicating:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "No name provided" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Expand all" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Collapse all" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Rename..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scene(s)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Directory" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle folder status as Favorite" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance the selected scene(s) as child of the selected node." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Scanning Files,\n" +"Please Wait..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp +#: editor/project_manager.cpp +msgid "Rename" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Single Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Importing Scene..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating Lightmaps" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating for Mesh: " +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Running Custom Script..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Error running post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Saving..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Set as Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Clear Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid " Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a Node to edit Signals and Groups." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/collision_polygon_editor_plugin.cpp +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Poly And Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Create a new polygon from scratch" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit existing polygon:\n" +"LMB: Move Point.\n" +"Ctrl+LMB: Split Segment.\n" +"RMB: Erase Point." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Delete points" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Delete Animation?" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: Animation name already exists!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation resource on clipboard!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "ERROR: No animation to edit!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create new animation in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load animation from disk." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load an animation from disk." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Save the current animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Target Blend Times" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Copy Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Directions" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Past" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Future" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Depth" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "1 step" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "2 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "3 steps" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Differences Only" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Force White Modulate" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Include Gizmos (3D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Error!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "New name:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Start!" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Import Animations..." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "Filters..." +msgstr "" + +#: editor/plugins/animation_tree_editor_plugin.cpp +msgid "AnimationTree" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Free" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed sha256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Fetching:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "first" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "prev" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Reverse" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/project_settings_editor.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Can't determine a save path for lightmap images.\n" +"Save your scene (for images to be saved in the same dir), or pick a save " +"path from the BakedLightmap properties." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " +"Light' flag is on." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed creating lightmap images, make sure path is writable." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Bake Lightmaps" +msgstr "" + +#: editor/plugins/camera_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Pivot" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Action" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove vertical guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove horizontal guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create new horizontal and vertical guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Edit CanvasItem" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag: Rotate" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggles snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to parent" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to node sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to other nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Keys" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Drag pivot from mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set pivot at mouse position" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Ok" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Cannot instantiate multiple nodes without root." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change default type" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Drag & drop + Shift : Add node as sibling\n" +"Drag & drop + Alt : Change node type" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Poly3D" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Import from Scene" +msgstr "" + +#: editor/plugins/cube_grid_theme_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease in" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Ease out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Curve Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Add point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Left linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Toggle Curve Linear Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Hold Shift to edit tangents individually" +msgstr "" + +#: editor/plugins/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +msgid "Add/Remove Color Ramp Point" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Color Ramp" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "" +"No OccluderPolygon2D resource on this node.\n" +"Create and assign one?" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create a new polygon from scratch." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Edit existing polygon:" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "LMB: Move Point." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Ctrl+LMB: Split Segment." +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "RMB: Erase Point." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Convex Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Contained Mesh is not of type ArrayMesh." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Unwrap failed, mesh may not be manifold?" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "No mesh to debug." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Model has no UV in this layer" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh..." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV1" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV2" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Unwrap UV2 for Lightmap/AO" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Parent has no solid faces to populate." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Couldn't map area." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake!" +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Bake the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: editor/plugins/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Can only set point into a ParticlesMaterial process material" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Error loading image:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "No pixels with transparency > 128 in image..." +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Node does not contain geometry (faces)." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Faces contain no area!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "No faces!" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Points:" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points+Normal (Directed)" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Source: " +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate Visibility AABB" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Out-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove In-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Out-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove In-Control Point" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Point" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon->UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV->Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Paste" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Files" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close and save changes?" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid " Class Reference" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Sort" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Up" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Down" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Next script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Previous script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Copy Script Path" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Show In File System" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Prev" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +#: editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Debug with external editor" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open Godot online documentation" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the class hierarchy." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Discard" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Resave" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"Built-in scripts can only be edited when the scene they belong to is loaded" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Capitalize" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Cut" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Copy" +msgstr "" + +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Delete Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold/Unfold Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Unfold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Clone Down" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent To Spaces" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent To Tabs" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Previous Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert To Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert To Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Replace..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Function..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Goto Line..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Constant" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Scalar Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Operator" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Toggle Rot Only" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Function" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Function" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Scalar Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Vec Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change RGB Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Default Value" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change XForm Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Texture Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Cubemap Uniform" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Comment" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Color Ramp" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add/Remove to Curve Map" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Modify Curve Map" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Change Input Name" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Connect Graph Nodes" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Disconnect Graph Nodes" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Remove Shader Graph Node" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Move Shader Graph Node" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Duplicate Graph Node(s)" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Delete Shader Graph Node(s)" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Cyclic Connection Link" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Error: Missing Input Connections" +msgstr "" + +#: editor/plugins/shader_graph_editor_plugin.cpp +msgid "Add Shader Graph Node" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translating: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Objects Drawn" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Material Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Shader Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Surface Changes" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Draw Calls" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Vertices" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align with view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "OK :(" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Unshaded" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Environment" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Information" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Half Resolution" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Doppler Enable" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Forward" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Backwards" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Speed Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode (Q)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Drag: Rotate\n" +"Alt+Drag: Move\n" +"Alt+RMB: Depth list selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode (W)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode (E)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode (R)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Coords" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Local Space Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Mode (%s)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal view" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Selection With View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Select" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Move" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Rotate" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Tool Scale" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Skeleton Gizmo visibility" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed (FPS):" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "SpriteFrames" +msgstr "" + +#: editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox Preview:" +msgstr "" + +#: editor/plugins/style_box_editor_plugin.cpp +msgid "StyleBox" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "<None>" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Texture Region Editor" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Can't save theme to file:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Edit theme..." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme editing menu." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create Empty Editor Template" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Create From Current Editor Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "CheckBox Radio2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Check Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Has,Many,Options" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 1" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 2" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Tab 3" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Data Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Style" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Font" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Color" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Line Draw" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket Fill" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Find tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror X" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Mirror Y" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 0 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 90 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 180 degrees" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate 270 degrees" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Could not find tile:" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Item name or ID:" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Tile Set" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Autotiles" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: set bit on.\n" +"RMB: set bit off." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select current edited sub-tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select sub-tile to change its priority." +msgstr "" + +#: editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete patch '%s' from list?" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted: " +msgstr "" + +#: editor/project_export.cpp +msgid "Presets" +msgstr "" + +#: editor/project_export.cpp editor/project_settings_editor.cpp +msgid "Add..." +msgstr "" + +#: editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: editor/project_export.cpp +msgid "Export all resources in the project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected scenes (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected resources (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources to export:" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +msgstr "" + +#: editor/project_export.cpp +msgid "Patches" +msgstr "" + +#: editor/project_export.cpp +msgid "Make Patch" +msgstr "" + +#: editor/project_export.cpp +msgid "Features" +msgstr "" + +#: editor/project_export.cpp +msgid "Custom (comma-separated):" +msgstr "" + +#: editor/project_export.cpp +msgid "Feature List:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +msgid "The path does not exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a 'project.godot' file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose an empty folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create folder" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: no main scene defined.\n" +"Please edit the project and set the main scene in \"Project Settings\" under " +"the \"Application\" category." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: Assets need to be imported.\n" +"Please edit the project to trigger the initial import." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to run more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove project from the list? (Folder contents will not be modified)" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The UI will update next time the editor or project manager starts." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You are about the scan %s folders for existing Godot projects. Do you " +"confirm?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project List" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Templates" +msgstr "" + +#: editor/project_manager.cpp +msgid "Exit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Restart Now" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't run project" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You don't currently have any projects.\n" +"Would you like to explore the official example projects in the Asset Library?" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Key " +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action '%s' already exists!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Shift+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Alt+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Control+" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Press a Key..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 6" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 7" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 8" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button 9" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Axis Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Global Property" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Select a setting item first!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "No property '%s' exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Setting '%s' is internal, and it can't be deleted." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Delete Item" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Already existing" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Error saving settings." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Settings saved OK." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override for Feature" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Remapped Path" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resource Remap Add Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter Mode" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Project Settings (project.godot)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "General" +msgstr "" + +#: editor/project_settings_editor.cpp editor/property_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override For..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Localization" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resources:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locale" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show all locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show only selected locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Filter mode:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "AutoLoad" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: editor/property_editor.cpp +msgid "File..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Dir..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: editor/property_editor.cpp +msgid "Select Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "New Script" +msgstr "" + +#: editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/property_editor.cpp +msgid "Show in File System" +msgstr "" + +#: editor/property_editor.cpp +msgid "Convert To %s" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_editor.cpp +msgid "On" +msgstr "" + +#: editor/property_editor.cpp +msgid "[Empty]" +msgstr "" + +#: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp +msgid "Set" +msgstr "" + +#: editor/property_editor.cpp +msgid "Properties:" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Could not execute PVRTC tool:" +msgstr "" + +#: editor/pvrtc_compress.cpp +msgid "Can't load back converted image using PVRTC tool:" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_create_dialog.cpp +#: scene/gui/dialogs.cpp +msgid "OK" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can not perform with the root node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save New Scene As..." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Discard Instancing" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Makes Sense!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Sub-Resources" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Copy Node Path" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add/Create a New Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Filter nodes" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach a new or existing script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear a script for the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remote" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Spatial Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle CanvasItem Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connection(s) and group(s)\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has connections.\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in group(s).\n" +"Click to show groups dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Open script" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is locked.\n" +"Click to unlock" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Children are not selectable.\n" +"Click to make selectable" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visibility" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node Configuration Warning!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading template '%s'" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error - Could not create script in filesystem." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading script from %s" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is empty" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is not local" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid base path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Directory of the same name exists" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, will be reused" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid extension" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Wrong extension chosen" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid Path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid class name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid inherited parent name or path" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script valid" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Allowed: a-z, A-Z, 0-9 and _" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in script (into scene file)" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Create new script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Load existing script file" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Language" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Inherits" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Class Name" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Template" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in Script" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Attach Node Script" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Remote " +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Warning" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Function:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Child Process Connected" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Copy Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Variable" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace (if applicable):" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video Mem" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Binding" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change AudioStreamPlayer3D Emission Angle" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select the dynamic library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select dependencies of the library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Remove current entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Double click to create a new entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform:" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dynamic Library" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Add an architecture entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "GDNativeLibrary" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp modules/mono/glue/glue_header.h +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Not enough bytes for decoding bytes, or invalid format." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "step argument is zero!" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Object can't provide a length." +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Duplicate Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Disabled" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Above" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Below" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit X Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Y Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Z Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Clear Rotation" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Create Exterior Connector" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Erase Area" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Settings" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Pick Distance:" +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating solution..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Generating C# project..." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to save solution." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Done" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Failed to create C# project." +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Mono" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "About C# support" +msgstr "" + +#: modules/mono/editor/godotsharp_editor.cpp +msgid "Create C# solution" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Builds" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Build Project" +msgstr "" + +#: modules/mono/editor/mono_bottom_panel.cpp +msgid "Warnings" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Signal Arguments" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Default Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Duplicate VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Move Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Condition" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Switch" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Iterator" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "While" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Return" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Call" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Get" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Input Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't copy the function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Clipboard is empty!" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Available Nodes:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Signal Arguments:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run exported HTML in the system's default browser." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not open template for export:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read custom HTML shell:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read boot splash image file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Using default boot splash image." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_object_2d.cpp +msgid "" +"This node has no children shapes, so it can't interact with the space.\n" +"Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " +"define its shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the 'texture' " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon!" +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp scene/3d/particles.cpp +msgid "" +"A material to process the particles is not assigned, so no behavior is " +"imprinted." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/physics_body_2d.cpp +msgid "" +"Size changes to RigidBody2D (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnable2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRCamera must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRController must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The controller id must not be 0 or this controller will not be bound to an " +"actual controller" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRAnchor must have an ARVROrigin node as its parent" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The anchor id must not be 0 or this anchor will not be bound to an actual " +"anchor" +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVROrigin requires an ARVRCamera child node" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "%d%%" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "(Time Left: %d:%02d s)" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Meshes: " +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Plotting Lights:" +msgstr "" + +#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp +msgid "Finishing Plot" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Lighting Meshes: " +msgstr "" + +#: scene/3d/collision_object.cpp +msgid "" +"This node has no children shapes, so it can't interact with the space.\n" +"Consider adding CollisionShape or CollisionPolygon children nodes to define " +"its shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Plotting Meshes" +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Nothing is visible because meshes have not been assigned to draw passes." +msgstr "" + +#: scene/3d/physics_body.cpp +msgid "" +"Size changes to RigidBody (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/remote_transform.cpp +msgid "Path property must point to a valid Spatial node to work." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "WorldEnvironment needs an Environment resource." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/scenario_fx.cpp +msgid "" +"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " +"this environment's Background Mode to Canvas (for 2D scenes)." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the 'Frames' property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Raw Mode" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Select this Folder" +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine though, but they will " +"hide upon running." +msgstr "" + +#: scene/gui/scroll_container.cpp +msgid "" +"ScrollContainer is intended to work with a single child control.\n" +"Use a container as child (VBox,HBox,etc), or a Control and set the custom " +"minimum size manually." +msgstr "" + +#: scene/gui/tree.cpp +msgid "(Other)" +msgstr "" + +#: scene/main/scene_tree.cpp +msgid "" +"Default Environment as specified in Project Settings (Rendering -> " +"Environment -> Default Environment) could not be loaded." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error initializing FreeType." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Unknown font format." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Error loading font." +msgstr "" + +#: scene/resources/dynamic_font.cpp +msgid "Invalid font size." +msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 17123dc8fc..1637ef9725 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -506,8 +506,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Koble '%s' til '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Koble Til.." +msgid "Connect..." +msgstr "Koble Til..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -935,12 +935,12 @@ msgid "Move Audio Bus" msgstr "Flytt Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Lagre Audio Bus Oppsett som..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Plassering for nytt oppsett.." +msgid "Location for New Layout..." +msgstr "Plassering for nytt oppsett..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1078,12 +1078,12 @@ msgid "Updating Scene" msgstr "Oppdaterer Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Lagrer lokale endringer.." +msgid "Storing local changes..." +msgstr "Lagrer lokale endringer..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Oppdaterer scene.." +msgid "Updating scene..." +msgstr "Oppdaterer scene..." #: editor/editor_data.cpp msgid "[empty]" @@ -1152,8 +1152,8 @@ msgid "Show In File Manager" msgstr "Vis I Filutforsker" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Ny Mappe.." +msgid "New Folder..." +msgstr "Ny Mappe..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1423,14 +1423,14 @@ msgid "Error saving resource!" msgstr "Feil ved lagring av ressurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Lagre Ressurs Som.." +msgid "Save Resource As..." +msgstr "Lagre Ressurs Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp #, fuzzy -msgid "I see.." -msgstr "Jeg ser.." +msgid "I see..." +msgstr "Jeg ser..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1665,12 +1665,12 @@ msgid "Open Base Scene" msgstr "Ã…pne Base Scene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "HurtigÃ¥pne Scene.." +msgid "Quick Open Scene..." +msgstr "HurtigÃ¥pne Scene..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "HurtigÃ¥pne Skript.." +msgid "Quick Open Script..." +msgstr "HurtigÃ¥pne Skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1681,8 +1681,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Lagre endringer til '%s' før lukking?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Lagre Scene Som.." +msgid "Save Scene As..." +msgstr "Lagre Scene Som..." #: editor/editor_node.cpp msgid "No" @@ -1733,8 +1733,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Denne handlingen kan ikke angres. GÃ¥ tilbake likevel?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hurtigkjør Scene.." +msgid "Quick Run Scene..." +msgstr "Hurtigkjør Scene..." #: editor/editor_node.cpp msgid "Quit" @@ -1887,8 +1887,8 @@ msgid "Previous tab" msgstr "Forrige fane" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrer Filer.." +msgid "Filter Files..." +msgstr "Filtrer Filer..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1899,12 +1899,12 @@ msgid "New Scene" msgstr "Ny Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Ny Arvet Scene.." +msgid "New Inherited Scene..." +msgstr "Ny Arvet Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Ã…pne Scene.." +msgid "Open Scene..." +msgstr "Ã…pne Scene..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1923,17 +1923,17 @@ msgid "Open Recent" msgstr "Ã…pne Nylig" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konverter Til.." +msgid "Convert To..." +msgstr "Konverter Til..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshBibliotek.." +msgid "MeshLibrary..." +msgstr "MeshBibliotek..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2205,8 +2205,8 @@ msgid "Save the currently edited resource." msgstr "Lagre den nylige redigerte ressursen." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Lagre Som.." +msgid "Save As..." +msgstr "Lagre Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2315,8 +2315,8 @@ msgid "Creating Mesh Previews" msgstr "Lager ForhÃ¥ndsvisning av Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatyrbilde.." +msgid "Thumbnail..." +msgstr "Miniatyrbilde..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2473,8 +2473,8 @@ msgid "(Current)" msgstr "(Gjeldende)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Henter fillager, vennligst vent.." +msgid "Retrieving mirrors, please wait..." +msgstr "Henter fillager, vennligst vent..." #: editor/export_template_manager.cpp #, fuzzy @@ -2556,8 +2556,8 @@ msgid "Error requesting url: " msgstr "Error ved forespørsel av url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Kobler til Fillager.." +msgid "Connecting to Mirror..." +msgstr "Kobler til Fillager..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2573,8 +2573,8 @@ msgstr "Kan ikke Løses" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Kobler til.." +msgid "Connecting..." +msgstr "Kobler til..." #: editor/export_template_manager.cpp #, fuzzy @@ -2588,8 +2588,8 @@ msgstr "Tilkoblet" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Requesting.." -msgstr "Ber om.." +msgid "Requesting..." +msgstr "Ber om..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2734,12 +2734,12 @@ msgid "Collapse all" msgstr "Kollaps alle" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Endre Navn.." +msgid "Rename..." +msgstr "Endre Navn..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Flytt Til.." +msgid "Move To..." +msgstr "Flytt Til..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2751,16 +2751,16 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Endre Avhengigheter.." +msgid "Edit Dependencies..." +msgstr "Endre Avhengigheter..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Vis Eiere.." +msgid "View Owners..." +msgstr "Vis Eiere..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplisér" #: editor/filesystem_dock.cpp @@ -2787,10 +2787,10 @@ msgstr "Instanser den valgte scene(r) som barn av den valgte noden." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Skanner Filer,\n" -"Vennligst Vent.." +"Vennligst Vent..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2855,8 +2855,8 @@ msgid "Import Scene" msgstr "Importer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importerer Scene.." +msgid "Importing Scene..." +msgstr "Importerer Scene..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2867,8 +2867,8 @@ msgid "Generating for Mesh: " msgstr "Genererer for Maske: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Kjører Tilpasser Skript.." +msgid "Running Custom Script..." +msgstr "Kjører Tilpasser Skript..." #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -2884,8 +2884,8 @@ msgid "Error running post-import script:" msgstr "Error ved kjøring av post-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Lagrer.." +msgid "Saving..." +msgstr "Lagrer..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2905,8 +2905,8 @@ msgstr "Importer Som:" #: editor/import_dock.cpp editor/property_editor.cpp #, fuzzy -msgid "Preset.." -msgstr "Preset.." +msgid "Preset..." +msgstr "Preset..." #: editor/import_dock.cpp msgid "Reimport" @@ -3336,16 +3336,16 @@ msgid "Transition Node" msgstr "Overgang Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importer Animasjoner.." +msgid "Import Animations..." +msgstr "Importer Animasjoner..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Rediger Node-Filtre" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtre.." +msgid "Filters..." +msgstr "Filtre..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3414,8 +3414,8 @@ msgid "Fetching:" msgstr "Henter:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Løser.." +msgid "Resolving..." +msgstr "Løser..." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -3484,8 +3484,8 @@ msgid "Site:" msgstr "Side:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Support.." +msgid "Support..." +msgstr "Support..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3675,6 +3675,7 @@ msgid "Use Rotation Snap" msgstr "Bruk Rotasjons-Snap" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Konfigurer Snap..." @@ -3837,7 +3838,7 @@ msgstr "Legg til %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "Legger til %s.." +msgstr "Legger til %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" @@ -4106,7 +4107,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4313,8 +4314,8 @@ msgid "Error loading image:" msgstr "Feil ved innlasting av bilde:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Ingen piksler med gjennomsiktighet > 128 i bilde.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Ingen piksler med gjennomsiktighet > 128 i bilde..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4682,8 +4683,8 @@ msgid "Import Theme" msgstr "Importer Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Lagre Tema Som.." +msgid "Save Theme As..." +msgstr "Lagre Tema Som..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4779,8 +4780,8 @@ msgstr "Veksle skriptpanel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Finn.." +msgid "Find..." +msgstr "Finn..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4987,15 +4988,15 @@ msgid "Find Previous" msgstr "Finn forrige" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Erstatt.." +msgid "Replace..." +msgstr "Erstatt..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5450,11 +5451,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5709,7 +5706,7 @@ msgid "Remove All" msgstr "Fjern Funksjon" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5778,8 +5775,9 @@ msgid "Options" msgstr "Innstillinger" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Innstillinger" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5905,7 +5903,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -5969,7 +5967,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -6060,6 +6058,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Prosjektnavn:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunne ikke opprette mappe." @@ -6251,8 +6254,8 @@ msgstr "Museknapp" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6280,7 +6283,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6466,7 +6469,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6563,11 +6566,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6740,7 +6743,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 9927fd8e8a..3bf8ab3a32 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -11,9 +11,12 @@ # Daeran Wereld <daeran@gmail.com>, 2017. # Dzejkop <jakubtrad@gmail.com>, 2017. # Ferdinand de Coninck <ferdinand.deconinck@gmail.com>, 2018. +# frank <frankvprive@gmail.com>, 2018. +# Johannes Smit <smitjohannes96@gmail.com>, 2018. # Jorn Theunissen <jorn-theunissen@hotmail.com>, 2018. # Maikel <maikel_martens_1@hotmail.com>, 2017. # millenniumproof <millenniumproof@gmail.com>, 2018. +# nee <lespam@protonmail.com>, 2018. # Pieter-Jan Briers <pieterjan.briers@gmail.com>, 2017-2018. # Robin Arys <robinarys@hotmail.com>, 2017. # Senno Kaasjager <senno.kaasjager@gmail.com>, 2017. @@ -25,15 +28,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-06 15:35+0000\n" -"Last-Translator: millenniumproof <millenniumproof@gmail.com>\n" +"PO-Revision-Date: 2018-05-21 18:36+0000\n" +"Last-Translator: Johannes Smit <smitjohannes96@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.20\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -514,8 +517,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Ontkoppel '%s' van '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Verbind.." +msgid "Connect..." +msgstr "Verbind..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -937,12 +940,12 @@ msgid "Move Audio Bus" msgstr "Verplaats audiobus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Sla Audio Bus Layout Op Als.." +msgid "Save Audio Bus Layout As..." +msgstr "Sla Audio Bus Layout Op Als..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Locatie voor Nieuwe Layout.." +msgid "Location for New Layout..." +msgstr "Locatie voor Nieuwe Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1080,12 +1083,12 @@ msgid "Updating Scene" msgstr "Scene aan het Updaten" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Lokale wijziging aan het opslaan.." +msgid "Storing local changes..." +msgstr "Lokale wijziging aan het opslaan..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scene aan het updaten.." +msgid "Updating scene..." +msgstr "Scene aan het updaten..." #: editor/editor_data.cpp msgid "[empty]" @@ -1153,8 +1156,8 @@ msgid "Show In File Manager" msgstr "Weergeven in Bestandsbeheer" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nieuwe Map.." +msgid "New Folder..." +msgstr "Nieuwe Map..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1415,20 +1418,20 @@ msgstr "Maak Uitvoer Leeg" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Project exporteren faalt door foutcode %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Error bij het opslaan van resource!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Resource Opslaan Als.." +msgid "Save Resource As..." +msgstr "Resource Opslaan Als..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Ik snap het.." +msgid "I see..." +msgstr "Ik snap het..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1660,11 +1663,11 @@ msgid "Open Base Scene" msgstr "Open Basisscene" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Open Scene Snel..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Open Script Snel..." #: editor/editor_node.cpp @@ -1676,7 +1679,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Sla wijzigen aan '%s' op voor het afsluiten?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Sla Scene Op Als..." #: editor/editor_node.cpp @@ -1729,7 +1732,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Deze actie kan niet ongedaan gemaakt worden. Toch herstellen?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Snel Scene Uitvoeren..." #: editor/editor_node.cpp @@ -1889,7 +1892,7 @@ msgid "Previous tab" msgstr "Vorig tabblad" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Bestanden Filteren..." #: editor/editor_node.cpp @@ -1901,11 +1904,11 @@ msgid "New Scene" msgstr "Nieuwe Scene" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nieuwe Geërfde Scene..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Scene Openen..." #: editor/editor_node.cpp @@ -1925,15 +1928,15 @@ msgid "Open Recent" msgstr "Recente Scenes Openen" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converteer Naar..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2198,8 +2201,8 @@ msgid "Save the currently edited resource." msgstr "De bewerkte bron opslaan." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Opslaan Als.." +msgid "Save As..." +msgstr "Opslaan Als..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2307,8 +2310,8 @@ msgid "Creating Mesh Previews" msgstr "Creëren van Mesh Previews" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Voorbeeld.." +msgid "Thumbnail..." +msgstr "Voorbeeld..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2460,8 +2463,8 @@ msgid "(Current)" msgstr "(Huidig)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Mirrors ophalen, even wachten a.u.b.." +msgid "Retrieving mirrors, please wait..." +msgstr "Mirrors ophalen, even wachten a.u.b..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2538,8 +2541,8 @@ msgid "Error requesting url: " msgstr "Fout bij het opvragen van een URL: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Verbinden met Mirror.." +msgid "Connecting to Mirror..." +msgstr "Verbinden met Mirror..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2555,8 +2558,8 @@ msgstr "Kan niet oplossen" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Verbinden.." +msgid "Connecting..." +msgstr "Verbinden..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2568,7 +2571,7 @@ msgstr "Verbonden" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Opvragen..." #: editor/export_template_manager.cpp @@ -2706,12 +2709,12 @@ msgid "Collapse all" msgstr "Klap alles in" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Hernoemen.." +msgid "Rename..." +msgstr "Hernoemen..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Verplaats Naar.." +msgid "Move To..." +msgstr "Verplaats Naar..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2722,16 +2725,16 @@ msgid "Instance" msgstr "Instantie" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Afhankelijkheden aanpassen.." +msgid "Edit Dependencies..." +msgstr "Afhankelijkheden aanpassen..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Bekijk eigenaren.." +msgid "View Owners..." +msgstr "Bekijk eigenaren..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Dupliceren.." +msgid "Duplicate..." +msgstr "Dupliceren..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2758,10 +2761,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Bestanden Scannen,\n" -"Wacht Alstublieft.." +"Wacht Alstublieft..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2826,8 +2829,8 @@ msgid "Import Scene" msgstr "Importeer Scene" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Scene Importeren.." +msgid "Importing Scene..." +msgstr "Scene Importeren..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2838,8 +2841,8 @@ msgid "Generating for Mesh: " msgstr "Bouw voor Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Aangepast script uitvoeren .." +msgid "Running Custom Script..." +msgstr "Aangepast script uitvoeren ..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2854,8 +2857,8 @@ msgid "Error running post-import script:" msgstr "Fout bij uitvoeren post-import script:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Opslaan.." +msgid "Saving..." +msgstr "Opslaan..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2874,8 +2877,8 @@ msgid "Import As:" msgstr "Importereen Als:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Voorinstelling.." +msgid "Preset..." +msgstr "Voorinstelling..." #: editor/import_dock.cpp msgid "Reimport" @@ -3294,15 +3297,15 @@ msgid "Transition Node" msgstr "Transition Node" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Importeer Animaties.." +msgid "Import Animations..." +msgstr "Importeer Animaties..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Wijzig Node Filters" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filters..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3370,8 +3373,8 @@ msgid "Fetching:" msgstr "Ophalen:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "Oplossen .." +msgid "Resolving..." +msgstr "Oplossen ..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3437,8 +3440,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Ondersteuning.." +msgid "Support..." +msgstr "Ondersteuning..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3635,8 +3638,9 @@ msgid "Use Rotation Snap" msgstr "Gebruik Rotatie Snap" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configureer Uitlijnen..." +msgstr "Configureer Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3735,14 +3739,12 @@ msgid "Show Guides" msgstr "Toon hulplijnen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Raster Weergeven" +msgstr "Toon Oorsprongspunt" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Toon helpers" +msgstr "Toon Aanzicht Portaal" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3854,11 +3856,11 @@ msgstr "Verwijder Geselecteerde Item" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import from Scene" -msgstr "Importeer vanaf de Scene" +msgstr "Importeer Vanuit Scene" #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Update from Scene" -msgstr "Werk bij vanaf de Scene" +msgstr "Update Vanuit Scene" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" @@ -3869,13 +3871,12 @@ msgid "Flat1" msgstr "Plat1" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Ease in" -msgstr "Schaal Selectie" +msgstr "Rustig Aanzetten" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease out" -msgstr "Neem af naar buiten" +msgstr "Rustig Afzetten" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" @@ -4043,7 +4044,7 @@ msgstr "Mesh heeft geen oppervlakte om omlijning van te maken!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Mesh grondtype is niet PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4075,8 +4076,8 @@ msgstr "Creëer Convex Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Outline Mesh.." -msgstr "Creëer Omlijning Mesh.." +msgid "Create Outline Mesh..." +msgstr "Creëer Omlijning Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4227,7 +4228,7 @@ msgstr "Hoogteveld aan het creëeren..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Marking walkable triangles..." -msgstr "Markeer loopbare driehoeken.." +msgstr "Markeer loopbare driehoeken..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4284,8 +4285,8 @@ msgid "Error loading image:" msgstr "Error bij het laden van afbeelding:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Geen pixels met transparantie > 128 in afbeelding.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Geen pixels met transparantie > 128 in afbeelding..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4645,8 +4646,8 @@ msgid "Import Theme" msgstr "Importeer Thema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Thema Opslaan Als.." +msgid "Save Theme As..." +msgstr "Thema Opslaan Als..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4742,8 +4743,8 @@ msgstr "Schakel Scripten Paneel" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Vind.." +msgid "Find..." +msgstr "Vind..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4952,16 +4953,16 @@ msgid "Find Previous" msgstr "Vind Vorige" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Vervang.." +msgid "Replace..." +msgstr "Vervang..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Ga Naar Functie.." +msgid "Goto Function..." +msgstr "Ga Naar Functie..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Ga Naar Regel.." +msgid "Goto Line..." +msgstr "Ga Naar Regel..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5305,12 +5306,11 @@ msgstr "Vrijekijk Snelheid Modificator" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "" +msgstr "XForm Dialoog" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Select Mode (Q)" -msgstr "Selecteer Modus" +msgstr "Selectiestand (Q)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -5318,22 +5318,25 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"Slepen: Roteren\n" +"Atl+Slepen: Verplaatsen\n" +"Alt+RMB: Diepte selectie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" -msgstr "" +msgstr "Beweegstand (W)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode (E)" -msgstr "" +msgstr "Rotatiestand (E)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode (R)" -msgstr "" +msgstr "Schaalstand (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "" +msgstr "Lokale Coördinaten" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -5346,64 +5349,63 @@ msgstr "Op hulplijnen uitlijnen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "" +msgstr "Onderaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "" +msgstr "Bovenaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "" +msgstr "Achteraanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "" +msgstr "Vooraanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" -msgstr "" +msgstr "Linker Zijaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View" -msgstr "" +msgstr "Rechter Zijaanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal view" -msgstr "" +msgstr "Schakel Perspectief/Orthogonaal aanzicht" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "" +msgstr "Voeg Animatiesleutel toe" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "" +msgstr "Focus op Oorsprongspunt" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "" +msgstr "Focus Selectie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Selection With View" -msgstr "" +msgstr "Arrangeer Selectie naar Aanzicht" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Alle Selectie" +msgstr "Gereedschappen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Move" -msgstr "" +msgstr "Beweeg Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Rotate" -msgstr "" +msgstr "Roteer Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Scale" -msgstr "" +msgstr "Verschalen Gereedschap" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -5412,52 +5414,48 @@ msgstr "Toggle Favoriet" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" +msgstr "Transformatie" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "" +msgid "Transform Dialog..." +msgstr "Transformatie Dialoog..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "" +msgstr "1 Aanzicht Portaal" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "" +msgstr "2 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "" +msgstr "2 Aanzicht Portalen (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "" +msgstr "3 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "" +msgstr "3 Aanzicht Portalen (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "" +msgstr "4 Aanzicht Portalen" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "" +msgstr "Bekijk Oorsprongspunt" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "" +msgstr "Bekijk Raster" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings" -msgstr "" +msgstr "Instellingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Skeleton Gizmo visibility" @@ -5465,71 +5463,71 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" -msgstr "" +msgstr "Snap instellingen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "" +msgstr "Verplaats Snap:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "" +msgstr "Draai Snap (grad.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "" +msgstr "Verander Grootte van Snap (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "" +msgstr "Instellingen Aanzicht Portaal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" -msgstr "" +msgstr "Perspectief FOV (grad.):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "" +msgstr "Bekijk Z-Near:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "" +msgstr "Bekijk Z-Far:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "" +msgstr "Transformatie Verandering" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "" +msgstr "Verplaats:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" -msgstr "" +msgstr "Rotatie (graden):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "" +msgstr "Verschalen (ratio):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "" +msgstr "Transformatie Type" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "" +msgstr "Pre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "" +msgstr "Post" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "" +msgstr "FOUT: Kan frame benodigdheden niet laden!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "" +msgstr "Voeg Frame toe" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" @@ -5537,60 +5535,59 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" -msgstr "" +msgstr "Frame Plakken" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "" +msgstr "Lege Toevoegen" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Verander Animatie Lus" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "" +msgstr "Verander Animatie FPS" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" -msgstr "" +msgstr "(leeg)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations" -msgstr "" +msgstr "Animaties" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" -msgstr "" +msgstr "Snelheid (FPS):" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Loop" -msgstr "" +msgstr "Lus" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animation Frames" -msgstr "" +msgstr "Animatie Frames" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "" +msgstr "Lege Toevoegen (Hiervoor)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "" +msgstr "Lege Toevoegen (Hierna)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Kopiëer Nodes" +msgstr "Verplaats (Hiervoor)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "" +msgstr "Verplaats (Hierna)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "" +msgstr "Sprite-Frames" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5610,7 +5607,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "<None>" -msgstr "" +msgstr "<Geen>" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" @@ -5637,50 +5634,48 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Separation:" -msgstr "" +msgstr "Afzondering:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region" -msgstr "" +msgstr "Textuur Regio" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Texture Region Editor" -msgstr "" +msgstr "Textuur Regio Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" -msgstr "" +msgstr "Kan thema niet opslaan in bestand:" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "" +msgstr "Alle Items Toevoegen" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "" +msgstr "Allen Toevoegen" #: editor/plugins/theme_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Item" -msgstr "" +msgstr "Verwijder Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Verwijder Selectie" +msgstr "Verwijder Alle Items" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Verwijderen" +msgstr "Verwijder Alles" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "" +msgid "Edit theme..." +msgstr "Bewerk Thema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." -msgstr "" +msgstr "Thema Bewerkingsmenu." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -5692,15 +5687,15 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" -msgstr "" +msgstr "Creëer Leeg Sjabloon" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "" +msgstr "Creëer Lege Sjabloon Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "" +msgstr "Creëer Derivatie Huidig Editor Thema" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" @@ -5712,7 +5707,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" -msgstr "" +msgstr "Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -5733,69 +5728,68 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "Had" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "Veel" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "" +msgstr "Opties" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Opties" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" -msgstr "" +msgstr "Tabblad 1" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 2" -msgstr "" +msgstr "Tabblad 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 3" -msgstr "" +msgstr "Tabblad 3" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "" +msgstr "Data Type:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" -msgstr "" +msgstr "Icoon" #: editor/plugins/theme_editor_plugin.cpp msgid "Style" -msgstr "" +msgstr "Stijl" #: editor/plugins/theme_editor_plugin.cpp msgid "Font" -msgstr "" +msgstr "Lettertype" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "" +msgstr "Kleur" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "" +msgstr "Thema" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Erase Selection" -msgstr "Schaal Selectie" +msgstr "Selectie Verwijderen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Line Draw" -msgstr "Lineair" +msgstr "Teken Lijn" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" @@ -5811,23 +5805,23 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase selection" -msgstr "" +msgstr "Verwijder Selectie" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find tile" -msgstr "" +msgstr "Vind Tegel" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" -msgstr "" +msgstr "Transponeren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror X" -msgstr "" +msgstr "Spiegel X" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Mirror Y" -msgstr "" +msgstr "Spiegel Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -5835,39 +5829,39 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "" +msgstr "Kies Tegel" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 0 degrees" -msgstr "" +msgstr "0 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 90 degrees" -msgstr "" +msgstr "90 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 180 degrees" -msgstr "" +msgstr "180 Graden Roteren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate 270 degrees" -msgstr "" +msgstr "270 Graden Roteren" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Could not find tile:" -msgstr "" +msgstr "Niet gevonden titel:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Item name or ID:" -msgstr "" +msgstr "Item naam of identificatiecode:" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" -msgstr "" +msgstr "Creëer vanuit scene?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "Vervoegen vanuit scene?" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -5876,15 +5870,15 @@ msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "" +msgstr "Creëer vanuit Scene" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "Vervoeg vanuit Scene" #: editor/plugins/tile_set_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Error" -msgstr "" +msgstr "Fout" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Autotiles" @@ -5903,44 +5897,40 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "De bewerkte bron opslaan." +msgstr "Selecteer zojuist bewerkte sub-tegel." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." -msgstr "" +msgstr "Selecteer een sub-tegel om zijn prioriteit te veranderen." #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "Annuleren" +msgstr "Annuleer" #: editor/project_export.cpp -#, fuzzy msgid "Runnable" -msgstr "Inschakelen" +msgstr "Uitvoerbaar" #: editor/project_export.cpp -#, fuzzy msgid "Delete patch '%s' from list?" -msgstr "Verwijder" +msgstr "Verwijder patch '%s' van lijst?" #: editor/project_export.cpp -#, fuzzy msgid "Delete preset '%s'?" -msgstr "Verwijder geselecteerde bestanden?" +msgstr "Verwijder voorinstelling '%s'?" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted: " -msgstr "" +msgstr "Exportsjablonen voor dit platform zijn vermist/corrupt: " #: editor/project_export.cpp msgid "Presets" -msgstr "" +msgstr "Voorinstelling" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "" +msgid "Add..." +msgstr "Toevoegen..." #: editor/project_export.cpp msgid "Resources" @@ -5952,7 +5942,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "" +msgstr "Exporteer geselecteerde scenes (en afhankelijkheden)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" @@ -5977,9 +5967,8 @@ msgid "" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Patches" -msgstr "Matches:" +msgstr "Patches" #: editor/project_export.cpp msgid "Make Patch" @@ -5987,24 +5976,23 @@ msgstr "" #: editor/project_export.cpp msgid "Features" -msgstr "" +msgstr "Kenmerken" #: editor/project_export.cpp msgid "Custom (comma-separated):" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Feature List:" -msgstr "Methode Lijst:" +msgstr "Kenmerkenlijst:" #: editor/project_export.cpp msgid "Export PCK/Zip" -msgstr "" +msgstr "Exporteer PCK/Zip" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Vermiste Exportsjablonen voor dit platform:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" @@ -6015,30 +6003,33 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "The path does not exist." -msgstr "Bestand bestaat niet." +msgstr "Dit pad bestaat niet." #: editor/project_manager.cpp msgid "Please choose a 'project.godot' file." -msgstr "" +msgstr "Kies alstublieft een 'project.godot' bestand." #: editor/project_manager.cpp msgid "Please choose an empty folder." -msgstr "" +msgstr "Kies alstublieft een lege map." #: editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Geïmporteerd Project" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ongeldige naam." + +#: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "Map kon niet gemaakt worden." +msgstr "Kon map niet creëren." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Er is al een map in dit pad met dezelfde naam." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6126,7 +6117,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't open project" -msgstr "Verbind.." +msgstr "Verbind..." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -6201,7 +6192,7 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy msgid "Can't run project" -msgstr "Verbind.." +msgstr "Verbind..." #: editor/project_manager.cpp msgid "" @@ -6227,8 +6218,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6256,7 +6247,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6443,7 +6434,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6517,7 +6508,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "" +msgstr "Kies een Aanzicht portaal" #: editor/property_editor.cpp msgid "Ease In" @@ -6540,11 +6531,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6582,8 +6573,9 @@ msgid "Error loading file: Not a resource!" msgstr "" #: editor/property_editor.cpp +#, fuzzy msgid "Selected node is not a Viewport!" -msgstr "" +msgstr "Geselecteerde ..... is geen Aanzicht Portaal!" #: editor/property_editor.cpp #, fuzzy @@ -6718,7 +6710,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -8258,10 +8250,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"Deze viewport is niet ingesteld als render target. Maak het een kind van een " -"Control zodat het een grootte kan ontvangen, als je de bedoeling hebt zijn " -"inhoud direct op het scherm te weergeven. Anders, maak er een RenderTarget " -"van en wijs zijn interne texture toe aan een node om te tonen." +"Dit Aanzicht Portaal is niet ingesteld als render target. Maak het een kind " +"van een Control zodat het een grootte kan ontvangen, als je de bedoeling " +"hebt zijn inhoud direct op het scherm te weergeven. Anders, maak er een " +"RenderTarget van en wijs zijn interne texture toe aan een node om te tonen." #: scene/resources/dynamic_font.cpp msgid "Error initializing FreeType." @@ -8339,7 +8331,7 @@ msgstr "Ongeldige lettertype grootte." #, fuzzy #~ msgid "Setting '" -#~ msgstr "Aan Het Opzetten.." +#~ msgstr "Aan Het Opzetten..." #, fuzzy #~ msgid "Selection -> Duplicate" @@ -8390,8 +8382,8 @@ msgstr "Ongeldige lettertype grootte." #~ msgid "Exporting for %s" #~ msgstr "Aan het exporteren voor %s" -#~ msgid "Setting Up.." -#~ msgstr "Aan Het Opzetten.." +#~ msgid "Setting Up..." +#~ msgstr "Aan Het Opzetten..." #~ msgid "Re-Importing" #~ msgstr "Aan Het Herimporteren" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 3c8ee72cec..1a597cee5a 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -11,6 +11,7 @@ # Dariusz Król <rexioweb@gmail.com>, 2018. # heya10 <igor.gielzak@gmail.com>, 2017. # holistyczny interlokutor <jakubowesmieci@gmail.com>, 2017. +# Igor <igor.gielzak@gmail.com>, 2018. # Kajetan KuszczyÅ„ski <kajetanek99@gmail.com>, 2016. # Kamil Lewan <lewan.kamil@gmail.com>, 2016. # Karol Walasek <coreconviction@gmail.com>, 2016. @@ -19,6 +20,7 @@ # NeverK <neverkoxu@gmail.com>, 2018. # Rafal Brozio <rafal.brozio@gmail.com>, 2016. # RafaÅ‚ Ziemniak <synaptykq@gmail.com>, 2017. +# RM <synaptykq@gmail.com>, 2018. # Sebastian Krzyszkowiak <dos@dosowisko.net>, 2017. # Sebastian Pasich <sebastian.pasich@gmail.com>, 2017. # siatek papieros <sbigneu@gmail.com>, 2016. @@ -27,8 +29,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-23 15:40+0000\n" -"Last-Translator: Dariusz Król <rexioweb@gmail.com>\n" +"PO-Revision-Date: 2018-06-05 13:41+0000\n" +"Last-Translator: RM <synaptykq@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -36,7 +38,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -48,19 +50,19 @@ msgstr "Wszystkie zaznaczenia" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "ZmieÅ„ czas klatki kluczowej" +msgstr "Zmiana czasu klatki kluczowej" #: editor/animation_editor.cpp msgid "Anim Change Transition" -msgstr "Zmiana przejÅ›cia animacji" +msgstr "Zmiana przejÅ›cia" #: editor/animation_editor.cpp msgid "Anim Change Transform" -msgstr "Animacja transformacji" +msgstr "Zmiana transformacji" #: editor/animation_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "ZmieÅ„ wartość klatki kluczowej" +msgstr "Zmiana wartoÅ›ci klatki kluczowej" #: editor/animation_editor.cpp msgid "Anim Change Call" @@ -84,7 +86,7 @@ msgstr "PrzesuÅ„ Å›cieżkÄ™ animacji w dół" #: editor/animation_editor.cpp msgid "Remove Anim Track" -msgstr "UsuÅ„ animacjÄ™" +msgstr "UsuÅ„ Å›cieżkÄ™ animacji" #: editor/animation_editor.cpp msgid "Set Transitions to:" @@ -92,7 +94,7 @@ msgstr "Ustaw przejÅ›cia na:" #: editor/animation_editor.cpp msgid "Anim Track Rename" -msgstr "ZmieÅ„ nazwÄ™ animacji" +msgstr "ZmieÅ„ nazwÄ™ Å›ciezki animacji" #: editor/animation_editor.cpp msgid "Anim Track Change Interpolation" @@ -517,7 +519,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Rozłącz '%s' z '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Połącz..." #: editor/connections_dialog.cpp @@ -937,11 +939,11 @@ msgid "Move Audio Bus" msgstr "Przemieść magistralÄ™ audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Zapisz ukÅ‚ad magistrali audio jako..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Lokalizacja nowego ukÅ‚adu..." #: editor/editor_audio_buses.cpp @@ -1078,12 +1080,12 @@ msgid "Updating Scene" msgstr "Aktualizowanie Sceny" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Zachowywanie lokalnych zmian.." +msgid "Storing local changes..." +msgstr "Zachowywanie lokalnych zmian..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Aktualizacja sceny .." +msgid "Updating scene..." +msgstr "Aktualizacja sceny ..." #: editor/editor_data.cpp msgid "[empty]" @@ -1151,7 +1153,7 @@ msgid "Show In File Manager" msgstr "Pokaż w menadżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Utwórz katalog..." #: editor/editor_file_dialog.cpp @@ -1343,9 +1345,8 @@ msgid "Description" msgstr "Opis" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials:" -msgstr "Poradniki" +msgstr "Poradniki online:" #: editor/editor_help.cpp #, fuzzy @@ -1354,8 +1355,9 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color][url=" -"$url]wysyÅ‚ajÄ…c jÄ…[/url][/color]!" +"Obecnie nie ma żadnych samouczków dla tej klasy, możesz [color=$color][url=" +"$url]dodać jeden[/url][/kolor] lub [color=$color] [url=$url2]poprosić o " +"jeden[/url][/barl]." #: editor/editor_help.cpp msgid "Properties" @@ -1414,20 +1416,20 @@ msgstr "Wyczyść dane wyjÅ›ciowe" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Eksport projektu nie powiódÅ‚ siÄ™, kod błędu to %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Błąd podczas zapisu zasobu!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Zapisz zasób jako..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "WidzÄ™.." +msgid "I see..." +msgstr "WidzÄ™..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1657,12 +1659,12 @@ msgid "Open Base Scene" msgstr "Otwórz scenÄ™ bazowÄ…" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Szybkie otwieranie sceny.." +msgid "Quick Open Scene..." +msgstr "Szybkie otwieranie sceny..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Szybkie otwieranie skryptu.." +msgid "Quick Open Script..." +msgstr "Szybkie otwieranie skryptu..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1673,8 +1675,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Zapisać zmiany w '%s' przed zamkniÄ™ciem?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Zapisz scenÄ™ jako.." +msgid "Save Scene As..." +msgstr "Zapisz scenÄ™ jako..." #: editor/editor_node.cpp msgid "No" @@ -1725,8 +1727,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Tego nie można cofnąć. Przywrócić mimo to?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Szybkie uruchomienie sceny.." +msgid "Quick Run Scene..." +msgstr "Szybkie uruchomienie sceny..." #: editor/editor_node.cpp msgid "Quit" @@ -1884,7 +1886,7 @@ msgid "Previous tab" msgstr "Poprzednia zakÅ‚adka" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Filtrowanie plików..." #: editor/editor_node.cpp @@ -1896,12 +1898,12 @@ msgid "New Scene" msgstr "Nowa scena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nowa scena dziedziczÄ…ca..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Otwórz scenÄ™.." +msgid "Open Scene..." +msgstr "Otwórz scenÄ™..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1920,15 +1922,15 @@ msgid "Open Recent" msgstr "Ostatnio otwierane" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konwertuje na.." +msgid "Convert To..." +msgstr "Konwertuje na..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2114,7 +2116,7 @@ msgstr "SpoÅ‚eczność" #: editor/editor_node.cpp msgid "About" -msgstr "O programie" +msgstr "O silniku" #: editor/editor_node.cpp msgid "Play the project." @@ -2189,7 +2191,7 @@ msgid "Save the currently edited resource." msgstr "Zapisz aktualnie edytowany zasób." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Zapisz jako..." #: editor/editor_node.cpp @@ -2298,8 +2300,8 @@ msgid "Creating Mesh Previews" msgstr "Tworzenie podglÄ…du Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2452,8 +2454,8 @@ msgid "(Current)" msgstr "(Bieżący)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Pobieranie informacji o serwerach lustrzanych, proszÄ™ czekać.." +msgid "Retrieving mirrors, please wait..." +msgstr "Pobieranie informacji o serwerach lustrzanych, proszÄ™ czekać..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2530,8 +2532,8 @@ msgid "Error requesting url: " msgstr "Błąd podczas żądania adresu url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ÅÄ…czenie z serwerem lustrzanym.." +msgid "Connecting to Mirror..." +msgstr "ÅÄ…czenie z serwerem lustrzanym..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2547,8 +2549,8 @@ msgstr "Nie można rozwiÄ…zać" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "ÅÄ…czenie.." +msgid "Connecting..." +msgstr "ÅÄ…czenie..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2560,7 +2562,7 @@ msgstr "Podłączony" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Żądanie danych..." #: editor/export_template_manager.cpp @@ -2696,11 +2698,11 @@ msgid "Collapse all" msgstr "ZwiÅ„ foldery" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "ZmieÅ„ nazwÄ™..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "PrzenieÅ› Do..." #: editor/filesystem_dock.cpp @@ -2712,16 +2714,16 @@ msgid "Instance" msgstr "Instancja" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Edytuj ZależnoÅ›ci..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Pokaż wÅ‚aÅ›cicieli.." +msgid "View Owners..." +msgstr "Pokaż wÅ‚aÅ›cicieli..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Duplikuj.." +msgid "Duplicate..." +msgstr "Duplikuj..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2746,7 +2748,7 @@ msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Skanowanie plików,\n" "ProszÄ™ czekać..." @@ -2814,8 +2816,8 @@ msgid "Import Scene" msgstr "Importuj ScenÄ™" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Importowanie Sceny.." +msgid "Importing Scene..." +msgstr "Importowanie Sceny..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2826,7 +2828,7 @@ msgid "Generating for Mesh: " msgstr "Generowanie dla siatki: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Uruchamiam skrypt..." #: editor/import/resource_importer_scene.cpp @@ -2844,8 +2846,8 @@ msgid "Error running post-import script:" msgstr "Błąd podczas uruchamiania skryptu po imporcie:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Zapisywanie.." +msgid "Saving..." +msgstr "Zapisywanie..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2864,8 +2866,8 @@ msgid "Import As:" msgstr "Importuj jako:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ustawienie predefiniowane.." +msgid "Preset..." +msgstr "Ustawienie predefiniowane..." #: editor/import_dock.cpp msgid "Reimport" @@ -3081,12 +3083,11 @@ msgstr "Tryb Å‚usek cebuli" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy msgid "Enable Onion Skinning" -msgstr "Włącz tryb Å‚usek cebuli" +msgstr "Włącz tryb warstw cebuli" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Kategorie:" +msgstr "Kierunki" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" @@ -3290,16 +3291,16 @@ msgid "Transition Node" msgstr "WÄ™zeÅ‚ PrzejÅ›cia" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Zaimportuj animacje.." +msgid "Import Animations..." +msgstr "Zaimportuj animacje..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Edytuj filtry wÄ™złów" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Filtry.." +msgid "Filters..." +msgstr "Filtry..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3342,9 +3343,10 @@ msgid "Request failed, too many redirects" msgstr "Żądanie nieudane, zbyt dużo przekierowaÅ„" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Bad download hash, assuming file has been tampered with." -msgstr "ZÅ‚y hash pobranego pliku. ZakÅ‚adamy, że ktoś przy nim majstrowaÅ‚." +msgstr "" +"ZÅ‚y hash pobranego pliku. ZakÅ‚adamy, że ktoś przy nim majstrowaÅ‚, lub zostaÅ‚ " +"niepoprawnie pobrany." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -3367,13 +3369,12 @@ msgid "Fetching:" msgstr "Pobieranie:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "RozwiÄ…zywanie..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Error making request" -msgstr "WystÄ…piÅ‚ błąd podczas tworzenia żądania" +msgstr "WystÄ…piÅ‚ błąd podczas żądania" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -3435,8 +3436,8 @@ msgid "Site:" msgstr "ŹródÅ‚o:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Wsparcie.." +msgid "Support..." +msgstr "Wsparcie..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3475,9 +3476,8 @@ msgstr "" "jedynie do odczytu." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Wypal Lightmaps" +msgstr "Stwórz Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -3585,9 +3585,8 @@ msgstr "" "poruszania)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Depth list selection" -msgstr "Alt+PPM: Lista wyboru głębi" +msgstr "Alt + RMB: Głębokość listy" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Mode" @@ -3635,8 +3634,9 @@ msgid "Use Rotation Snap" msgstr "Użyj kroków obrotu" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Konfiguruj przyciÄ…ganie.." +msgstr "Konfiguruj przyciÄ…ganie..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3731,14 +3731,12 @@ msgid "Show Guides" msgstr "Pokaż prowadnice" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "Pokaż pozycjÄ™ poczÄ…tkowÄ…" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 widok" +msgstr "Pokaż widok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3782,11 +3780,11 @@ msgstr "Ustaw pivot w pozycji myszy" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" -msgstr "" +msgstr "Podwój wielkość siatki" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "" +msgstr "Zmniejsz wielkość siatki dwukrotnie" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -3802,7 +3800,7 @@ msgstr "Ok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Nie można utworzyć wielu wezłów bez wÄ™zÅ‚a głównego." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -3858,11 +3856,11 @@ msgstr "Aktualizuj ze sceny" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat0" -msgstr "" +msgstr "Flat0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat1" -msgstr "" +msgstr "Flat1" #: editor/plugins/curve_editor_plugin.cpp msgid "Ease in" @@ -4042,7 +4040,6 @@ msgid "Could not create outline!" msgstr "Nie udaÅ‚o siÄ™ utworzyć zarysu!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Outline" msgstr "Utwórz zarys" @@ -4067,8 +4064,8 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Utwórz siatkÄ™ zarysu.." +msgid "Create Outline Mesh..." +msgstr "Utwórz siatkÄ™ zarysu..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4282,8 +4279,8 @@ msgid "Error loading image:" msgstr "Błąd wczytywania obrazu:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Brak pikseli z przeźroczystoÅ›ciÄ… > 128 w obrazie.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Brak pikseli z przeźroczystoÅ›ciÄ… > 128 w obrazie..." #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -4653,8 +4650,8 @@ msgid "Import Theme" msgstr "Zaimportuj motyw" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Zapisz motyw jako.." +msgid "Save Theme As..." +msgstr "Zapisz motyw jako..." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -4752,8 +4749,8 @@ msgstr "Przełącz panel skryptów" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Znajdź.." +msgid "Find..." +msgstr "Znajdź..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4963,16 +4960,16 @@ msgid "Find Previous" msgstr "Znajdź poprzedni" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "ZamieÅ„.." +msgid "Replace..." +msgstr "ZamieÅ„..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Przejdź do funkcji.." +msgid "Goto Function..." +msgstr "Przejdź do funkcji..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Przejdź do linii.." +msgid "Goto Line..." +msgstr "Przejdź do linii..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5061,11 +5058,11 @@ msgstr "" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Add/Remove to Curve Map" -msgstr "" +msgstr "Dodaj/UsuÅ„ do mapy krzywej" #: editor/plugins/shader_graph_editor_plugin.cpp msgid "Modify Curve Map" -msgstr "" +msgstr "Edytuj mape krzywej" #: editor/plugins/shader_graph_editor_plugin.cpp #, fuzzy @@ -5299,34 +5296,31 @@ msgstr "Efekt Dopplera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "" +msgstr "\"Wolny widok\" w lewo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "" +msgstr "\"Wolny widok\" w prawo" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "Dalej" +msgstr "\"Wolny widok\" w przód" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Backwards" -msgstr "Wstecz" +msgstr "\"Wolny widok\" w tyÅ‚" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "" +msgstr "\"Wolny widok\" w góre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Down" -msgstr "Kółko myszy w dół." +msgstr "\"Wolny widok\" w dół" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "" +msgstr "Zmiennik prÄ™dkoÅ›ci \"Wolnego widoku\"" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -5342,6 +5336,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" +"PociÄ…gniÄ™cie: Obrót\n" +"Alt+PociÄ…gniÄ™cie: Poruszenie\n" +"Alt+PPM: Lista wyboru głębi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode (W)" @@ -5440,12 +5437,8 @@ msgid "Transform" msgstr "PrzeksztaÅ‚canie" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Konfiguruj krokowanie.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Okno transformowania.." +msgid "Transform Dialog..." +msgstr "Okno transformowania..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5699,8 +5692,8 @@ msgid "Remove All" msgstr "UsuÅ„ wszystkie" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Edytuj motyw interfejsu.." +msgid "Edit theme..." +msgstr "Edytuj motyw interfejsu..." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -5772,7 +5765,7 @@ msgstr "Opcje" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "Ma,Wiele,Różnych,Opcji!" #: editor/plugins/theme_editor_plugin.cpp @@ -5965,8 +5958,8 @@ msgid "Presets" msgstr "Profile eksportu" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Dodaj.." +msgid "Add..." +msgstr "Dodaj..." #: editor/project_export.cpp msgid "Resources" @@ -6060,12 +6053,17 @@ msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nazwa projektu:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Nie można utworzyć katalogu." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "Folder o podanej nazwie istnieje już w tej lokalizacji." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -6256,10 +6254,13 @@ msgid "Mouse Button" msgstr "Przycisk myszy" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " +"jak: '/', ':', '=', '\\' lub '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6286,8 +6287,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "NaciÅ›nij klawisz.." +msgid "Press a Key..." +msgstr "NaciÅ›nij klawisz..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6359,7 +6360,7 @@ msgstr "UrzÄ…dzenie" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Przycisk" +msgstr "Button" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -6463,15 +6464,15 @@ msgstr "Ustawienia projektu (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Ogólny" +msgstr "Ogólne" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "WÅ‚aÅ›ciwość:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Nadpisz dla.." +msgid "Override For..." +msgstr "Nadpisz dla..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6566,12 +6567,12 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Plik.." +msgid "File..." +msgstr "Plik..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Katalog.." +msgid "Dir..." +msgstr "Katalog..." #: editor/property_editor.cpp msgid "Assign" @@ -6682,7 +6683,7 @@ msgstr "Aktualna scena" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "Główna scena" +msgstr "Scena główna" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" @@ -6710,6 +6711,7 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Nie można utworzyć sceny '%s' ponieważ obecna scena jest jednym z jej wezłów." #: editor/scene_tree_dock.cpp #, fuzzy @@ -6747,7 +6749,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Tej operacji nie można wykonać na dziedziczÄ…cej scenie." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Zapisz nowÄ… scenÄ™ jako ..." #: editor/scene_tree_dock.cpp @@ -7197,7 +7199,7 @@ msgstr "Skróty" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "WiÄ…zanie" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -7475,7 +7477,7 @@ msgstr "Wybierz odlegÅ‚ość:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nazwa klasy nie może być sÅ‚owem zastrzeżonym" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7483,7 +7485,7 @@ msgstr "Generowanie solucji..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." -msgstr "" +msgstr "Generowanie projektu C#..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Failed to create solution." @@ -7507,7 +7509,7 @@ msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" -msgstr "" +msgstr "O wsparciu jÄ™zyka C#" #: modules/mono/editor/godotsharp_editor.cpp msgid "Create C# solution" @@ -7708,7 +7710,7 @@ msgstr "Przełącznik" #: modules/visual_script/visual_script_editor.cpp msgid "Iterator" -msgstr "" +msgstr "Iterator" #: modules/visual_script/visual_script_editor.cpp msgid "While" @@ -7930,6 +7932,10 @@ msgid "" "Consider adding CollisionShape2D or CollisionPolygon2D children nodes to " "define its shape." msgstr "" +"Ten wÄ™zeÅ‚ nie posiada podwezÅ‚a, który definiowaÅ‚ by jego ksztaÅ‚t, wiÄ™c nie " +"może wchodzić w interakcje.\n" +"PowinieneÅ› dodać wÄ™zeÅ‚ \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " +"podwÄ™zeÅ‚ aby zdefiniować ksztaÅ‚t." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -8009,6 +8015,8 @@ msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" +"Nie przypisano materiaÅ‚u do przetwarzania czÄ…steczek, wiÄ™c zmiany nie bÄ™dÄ… " +"widoczne." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -8051,6 +8059,8 @@ msgid "" "The controller id must not be 0 or this controller will not be bound to an " "actual controller" msgstr "" +"Id kontrolera nie może być '0' w innym przypadku kontroler nie zostanie " +"przypisany do żadnego rzeczywistego kontrolera" #: scene/3d/arvr_nodes.cpp #, fuzzy @@ -8073,7 +8083,7 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "(Time Left: %d:%02d s)" -msgstr "" +msgstr "(PozostaÅ‚y czas: %d:%02d s)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " @@ -8450,8 +8460,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Exporting for %s" #~ msgstr "Exportowanie do %s" -#~ msgid "Setting Up.." -#~ msgstr "Konfigurowanie .." +#~ msgid "Setting Up..." +#~ msgstr "Konfigurowanie ..." #~ msgid "Error loading scene." #~ msgstr "Błąd Å‚adowania sceny." @@ -8509,8 +8519,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Info" #~ msgstr "Informacje" -#~ msgid "Re-Import.." -#~ msgstr "Importuj ponownie.." +#~ msgid "Re-Import..." +#~ msgstr "Importuj ponownie..." #~ msgid "No bit masks to import!" #~ msgstr "Brak mask bitowych do zaimportowania!" @@ -8883,13 +8893,13 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Zoom (%):" #~ msgstr "PowiÄ™kszenie (%):" -#~ msgid "Skeleton.." -#~ msgstr "Szkielet.." +#~ msgid "Skeleton..." +#~ msgstr "Szkielet..." #~ msgid "Zoom Reset" #~ msgstr "Wyzeruj przybliżenie" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Ustaw przybliżenie..." #~ msgid "Set a Value" @@ -9238,8 +9248,8 @@ msgstr "Niepoprawny rozmiar fonta." #~ msgid "Export Project PCK" #~ msgstr "Eksport projektu PCK" -#~ msgid "Export.." -#~ msgstr "Eksport.." +#~ msgid "Export..." +#~ msgstr "Eksport..." #~ msgid "Project Export" #~ msgstr "Eksport projektu" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 94856aa875..0c085024e0 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -500,7 +500,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -915,11 +915,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1055,11 +1055,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1129,7 +1129,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1394,12 +1394,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1606,11 +1606,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1622,7 +1622,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1674,7 +1674,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1819,7 +1819,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1831,11 +1831,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1855,15 +1855,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2109,7 +2109,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2218,7 +2218,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2370,7 +2370,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2447,7 +2447,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2464,7 +2464,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2479,7 +2479,7 @@ msgstr "Slit th' Node" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2618,11 +2618,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2634,15 +2634,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2668,7 +2668,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2734,7 +2734,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2746,7 +2746,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2762,7 +2762,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2782,7 +2782,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3199,7 +3199,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3207,7 +3207,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3275,7 +3275,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3342,7 +3342,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3532,6 +3532,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3957,7 +3958,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4162,7 +4163,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4527,7 +4528,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4625,7 +4626,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4833,15 +4834,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5296,11 +5297,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5556,7 +5553,7 @@ msgid "Remove All" msgstr "Discharge ye' Signal" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5624,7 +5621,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5813,7 +5810,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5903,6 +5900,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Yer index property name be thrown overboard!" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6091,8 +6093,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6120,7 +6122,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6306,7 +6308,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6403,11 +6405,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6580,7 +6582,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 3ad4798ca0..9880271a0d 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -7,9 +7,10 @@ # Anderson Araujo <anderson.araujoprog@gmail.com>, 2018. # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # AWK <arthurwk1800@gmail.com>, 2017. +# Breno Caldeira <breno.caldeira@gmail.com>, 2018. # Francesco Perrotti-Garcia <fpg1503@gmail.com>, 2017. # George Marques <george@gmarqu.es>, 2016. -# Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017. +# Guilherme Felipe C G Silva <guilhermefelipecgs@gmail.com>, 2017, 2018. # João Victor Lima <victordevtb@outlook.com>, 2018. # João Vitor de Oliveira Carlos <lopogax@gmail.com>, 2018. # Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016. @@ -28,8 +29,9 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2018-04-30 13:39+0000\n" -"Last-Translator: Rodolfo R Gomes <rodolforg@gmail.com>\n" +"PO-Revision-Date: 2018-05-20 21:41+0000\n" +"Last-Translator: Michael Alexsander Silva Dias <michaelalexsander@protonmail." +"com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -517,7 +519,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desconectar '%s' do '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Conectar..." #: editor/connections_dialog.cpp @@ -938,12 +940,12 @@ msgid "Move Audio Bus" msgstr "Mover Canal de Ãudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Salvar Layout de Canais de Ãudio Como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Localização para o Novo Layout.." +msgid "Location for New Layout..." +msgstr "Localização para o Novo Layout..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1081,11 +1083,11 @@ msgid "Updating Scene" msgstr "Atualizando Cena" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Armazenando alterações locais..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Atualizando Cena..." #: editor/editor_data.cpp @@ -1154,7 +1156,7 @@ msgid "Show In File Manager" msgstr "Mostrar no Gerenciador de Arquivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Nova Pasta..." #: editor/editor_file_dialog.cpp @@ -1416,19 +1418,19 @@ msgstr "Limpar SaÃda" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Falha na exportação do projeto com código de erro %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao salvar Recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Salvar Recuso como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Entendo..." #: editor/editor_node.cpp @@ -1658,11 +1660,11 @@ msgid "Open Base Scene" msgstr "Abrir Cena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Abrir Cena Rapidamente..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Abrir Script Rapidamente..." #: editor/editor_node.cpp @@ -1674,7 +1676,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Salvar alterações em '%s' antes de fechar?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Salvar Cena Como..." #: editor/editor_node.cpp @@ -1726,7 +1728,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta ação não pode ser desfeita. Reverter mesmo assim?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Rodar Cena Ãgil..." #: editor/editor_node.cpp @@ -1887,8 +1889,8 @@ msgid "Previous tab" msgstr "Guia anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Arquivos.." +msgid "Filter Files..." +msgstr "Filtrar Arquivos..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1899,11 +1901,11 @@ msgid "New Scene" msgstr "Nova Cena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Nova Cena Herdada..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Abrir Cena..." #: editor/editor_node.cpp @@ -1923,15 +1925,15 @@ msgid "Open Recent" msgstr "Abrir Recente" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Converter Para..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -1994,7 +1996,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "Pequeno teste com o sistema de arquivos em rede" +msgstr "Pequena DIstribuição com Sistema de Arquivos de Rede" #: editor/editor_node.cpp msgid "" @@ -2195,7 +2197,7 @@ msgid "Save the currently edited resource." msgstr "Salva o recurso editado atualmente." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Salvar Como..." #: editor/editor_node.cpp @@ -2304,7 +2306,7 @@ msgid "Creating Mesh Previews" msgstr "Criando Previsualizações das Malhas" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp @@ -2458,7 +2460,7 @@ msgid "(Current)" msgstr "(Atual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Reconectando, por favor aguarde." #: editor/export_template_manager.cpp @@ -2536,7 +2538,7 @@ msgid "Error requesting url: " msgstr "Erro ao solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Conectando..." #: editor/export_template_manager.cpp @@ -2553,8 +2555,8 @@ msgstr "Não foi possÃvel resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Conectando.." +msgid "Connecting..." +msgstr "Conectando..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2566,8 +2568,8 @@ msgstr "Conectado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Solicitando.." +msgid "Requesting..." +msgstr "Solicitando..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2702,11 +2704,11 @@ msgid "Collapse all" msgstr "Recolher tudo" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Renomear..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Mover Para..." #: editor/filesystem_dock.cpp @@ -2718,15 +2720,15 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." +msgid "Edit Dependencies..." +msgstr "Editar Dependências..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Visualizar Proprietários..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp @@ -2752,7 +2754,7 @@ msgstr "Instanciar a(s) cena(s) selecionada como filho do nó selecionado." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Escaneando arquivos,\n" "Por favor aguarde..." @@ -2820,7 +2822,7 @@ msgid "Import Scene" msgstr "Importar cena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Importando Cena..." #: editor/import/resource_importer_scene.cpp @@ -2832,7 +2834,7 @@ msgid "Generating for Mesh: " msgstr "Generando para a Malha: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Rodando Script Personalizado..." #: editor/import/resource_importer_scene.cpp @@ -2848,7 +2850,7 @@ msgid "Error running post-import script:" msgstr "Erro ao rodar script pós-importação:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Salvando..." #: editor/import_dock.cpp @@ -2868,7 +2870,7 @@ msgid "Import As:" msgstr "Importar como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "Predefinição..." #: editor/import_dock.cpp @@ -3289,7 +3291,7 @@ msgid "Transition Node" msgstr "Nó Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importar Animações..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3297,7 +3299,7 @@ msgid "Edit Node Filters" msgstr "Editar Filtros de Nó" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3365,7 +3367,7 @@ msgid "Fetching:" msgstr "Procurando:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Resolvendo..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3432,8 +3434,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Suporte.." +msgid "Support..." +msgstr "Suporte..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3630,8 +3632,9 @@ msgid "Use Rotation Snap" msgstr "Usar Snap de Rotação" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar Encaixe..." +msgstr "Configurar Snap..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3726,14 +3729,12 @@ msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver Origem" +msgstr "Mostrar Origem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Viewport" +msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4026,7 +4027,7 @@ msgstr "Malha não tem superfÃcie para criar contornos dela!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Tipo primitivo da Mesh não é PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4057,8 +4058,8 @@ msgid "Create Convex Collision Sibling" msgstr "Criar Colisão Convexa Irmã" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Criar Malha de Contorno.." +msgid "Create Outline Mesh..." +msgstr "Criar Malha de Contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4265,7 +4266,7 @@ msgid "Error loading image:" msgstr "Erro ao carregar imagem:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Nenhum pixel com transparência > 128 na imagem." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4626,7 +4627,7 @@ msgid "Import Theme" msgstr "Importar Tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Salvar Tema Como..." #: editor/plugins/script_editor_plugin.cpp @@ -4723,7 +4724,7 @@ msgstr "Alternar Painel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Localizar..." #: editor/plugins/script_editor_plugin.cpp @@ -4933,15 +4934,15 @@ msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substituir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Ir para linha..." #: editor/plugins/script_text_editor.cpp @@ -5395,11 +5396,7 @@ msgid "Transform" msgstr "Transformação" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Snap..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Diálogo Transformação..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5652,8 +5649,8 @@ msgid "Remove All" msgstr "Remover Tudo" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Editar tema.." +msgid "Edit theme..." +msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5681,11 +5678,11 @@ msgstr "Criar a Partir do Tema Atual do Editor" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio1" -msgstr "Rádio Checkbox 1" +msgstr "CheckBox Rádio1" #: editor/plugins/theme_editor_plugin.cpp msgid "CheckBox Radio2" -msgstr "Caixa de Seleção 2" +msgstr "CheckBox Rádio2" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" @@ -5693,21 +5690,19 @@ msgstr "Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" -msgstr "Checar Item" +msgstr "Item Marcável" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" msgstr "Item Checado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Adicionar Item" +msgstr "Item Rádio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item Checado" +msgstr "Item Rádio Marcado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5715,15 +5710,16 @@ msgstr "Tem" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "Muitos" +msgstr "Muitas" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" msgstr "Opções" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "Ter,Muitas,Várias,Opções!" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Tem,Muitas,Várias,Opções!" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5755,7 +5751,7 @@ msgstr "Fonte" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "Color" +msgstr "Cor" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" @@ -5916,7 +5912,7 @@ msgid "Presets" msgstr "Predefiniçoes" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp @@ -6012,6 +6008,11 @@ msgid "Imported Project" msgstr "Projeto Importado" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nome do Projeto:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "ImpossÃvel criar a pasta." @@ -6211,10 +6212,13 @@ msgid "Mouse Button" msgstr "Botão do Mous" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nome de ação inválido. Ele não pode estar vazio ou conter '/', ':', '=', " +"'\\' ou '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6241,7 +6245,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Pressione uma Tecla..." #: editor/project_settings_editor.cpp @@ -6425,7 +6429,7 @@ msgid "Property:" msgstr "Propriedade:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Sobrescrever Para..." #: editor/project_settings_editor.cpp @@ -6521,11 +6525,11 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Arquivo..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Dir..." #: editor/property_editor.cpp @@ -6698,7 +6702,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Essa operação não pode ser realizada em cenas instanciadas." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Salvar Nova Cena Como..." #: editor/scene_tree_dock.cpp @@ -7415,7 +7419,7 @@ msgstr "Escolha uma Distância:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nome da classe não pode ser uma palavra reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8129,7 +8133,7 @@ msgstr "A propriedade Caminho deve apontar para um nó Spatial para funcionar." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment precisa de um recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8143,6 +8147,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Este WorldEnvironment está sendo ignorado. Adicione uma Camera (para cenas " +"3D) ou defina o Background Mode deste ambiente para Canvas (para cenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8414,7 +8420,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Exporting for %s" #~ msgstr "Exportando para %s" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Ajustando..." #~ msgid "Error loading scene." @@ -8476,7 +8482,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Info" #~ msgstr "Informação" -#~ msgid "Re-Import.." +#~ msgid "Re-Import..." #~ msgstr "Re-importar..." #~ msgid "No bit masks to import!" @@ -8871,13 +8877,13 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Zoom (%):" #~ msgstr "Ampliação (%):" -#~ msgid "Skeleton.." +#~ msgid "Skeleton..." #~ msgstr "Esqueleto..." #~ msgid "Zoom Reset" #~ msgstr "Restaurar Ampliação" -#~ msgid "Zoom Set.." +#~ msgid "Zoom Set..." #~ msgstr "Definir Ampliação..." #~ msgid "Set a Value" @@ -9297,7 +9303,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Export Project PCK" #~ msgstr "Exportar PCK do Projeto" -#~ msgid "Export.." +#~ msgid "Export..." #~ msgstr "Exportar..." #~ msgid "Project Export" @@ -9404,7 +9410,7 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Recarregar Tool Script (suave)" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "Editar Conexões..." #~ msgid "Set Params" @@ -9461,5 +9467,5 @@ msgstr "Tamanho de fonte inválido." #~ msgid "Source Texture:" #~ msgstr "Textura de Origem:" -#~ msgid "Merging.." +#~ msgid "Merging..." #~ msgstr "Fundindo..." diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 84e80718da..0d6a1c27a5 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -5,6 +5,7 @@ # # António Sarmento <antonio.luis.sarmento@gmail.com>, 2016. # Carlos Vieira <carlos.vieira@gmail.com>, 2017. +# João <joao@nogordio.com>, 2018. # João Graça <jgraca95@gmail.com>, 2017. # João Lopes <linux-man@hotmail.com>, 2017-2018. # Miguel Gomes <miggas09@gmail.com>, 2017. @@ -17,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-25 09:40+0000\n" -"Last-Translator: João Lopes <linux-man@hotmail.com>\n" +"PO-Revision-Date: 2018-05-26 14:42+0000\n" +"Last-Translator: João <joao@nogordio.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" "Language: pt_PT\n" @@ -505,7 +506,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Desligar '%s' de '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Ligar..." #: editor/connections_dialog.cpp @@ -926,12 +927,12 @@ msgid "Move Audio Bus" msgstr "Mover barramento de áudio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Guardar Modelo do barramento de áudio como.." +msgid "Save Audio Bus Layout As..." +msgstr "Guardar Modelo do barramento de áudio como..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Localização para o Novo Modelo.." +msgid "Location for New Layout..." +msgstr "Localização para o Novo Modelo..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1072,12 +1073,12 @@ msgid "Updating Scene" msgstr "Atualizando a Cena" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Armazenando alterações locais.." +msgid "Storing local changes..." +msgstr "Armazenando alterações locais..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Atualizando a Cena.." +msgid "Updating scene..." +msgstr "Atualizando a Cena..." #: editor/editor_data.cpp msgid "[empty]" @@ -1145,8 +1146,8 @@ msgid "Show In File Manager" msgstr "Mostrar no Gestor de Ficheiros" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Nova Diretoria.." +msgid "New Folder..." +msgstr "Nova Diretoria..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1407,20 +1408,20 @@ msgstr "Limpar SaÃda" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Exportação do projeto falhou com código de erro %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Erro ao guardar recurso!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Guardar Recurso Como.." +msgid "Save Resource As..." +msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Eu vejo.." +msgid "I see..." +msgstr "Eu vejo..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1653,12 +1654,12 @@ msgid "Open Base Scene" msgstr "Abrir Cena Base" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Abrir Cena de forma rápida.." +msgid "Quick Open Scene..." +msgstr "Abrir Cena de forma rápida..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Abrir Script de forma rápida.." +msgid "Quick Open Script..." +msgstr "Abrir Script de forma rápida..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1669,8 +1670,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Guardar alterações a '%s' antes de fechar?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Guardar Cena como.." +msgid "Save Scene As..." +msgstr "Guardar Cena como..." #: editor/editor_node.cpp msgid "No" @@ -1721,8 +1722,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Esta acção não pode ser desfeita. Reverter na mesma?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Executar Cena de forma rápida.." +msgid "Quick Run Scene..." +msgstr "Executar Cena de forma rápida..." #: editor/editor_node.cpp msgid "Quit" @@ -1878,8 +1879,8 @@ msgid "Previous tab" msgstr "Guia anterior" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrar Ficheiro.." +msgid "Filter Files..." +msgstr "Filtrar Ficheiro..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1890,12 +1891,12 @@ msgid "New Scene" msgstr "Nova Cena" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nova Cena Herdada.." +msgid "New Inherited Scene..." +msgstr "Nova Cena Herdada..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Abrir Cena.." +msgid "Open Scene..." +msgstr "Abrir Cena..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1914,16 +1915,16 @@ msgid "Open Recent" msgstr "Abrir Recente" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Converter Para.." +msgid "Convert To..." +msgstr "Converter Para..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2110,7 +2111,7 @@ msgstr "Comunidade" #: editor/editor_node.cpp msgid "About" -msgstr "Sobre" +msgstr "Sobre Nós" #: editor/editor_node.cpp msgid "Play the project." @@ -2185,8 +2186,8 @@ msgid "Save the currently edited resource." msgstr "Guarde o recurso editado." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Guardar Como.." +msgid "Save As..." +msgstr "Guardar Como..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2294,8 +2295,8 @@ msgid "Creating Mesh Previews" msgstr "A criar pré-visualizações de Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Miniatura.." +msgid "Thumbnail..." +msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2447,7 +2448,7 @@ msgid "(Current)" msgstr "(Atual)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "A readquirir servidores, espere por favor..." #: editor/export_template_manager.cpp @@ -2525,7 +2526,7 @@ msgid "Error requesting url: " msgstr "Erro ao solicitar url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "A ligar ao servidor..." #: editor/export_template_manager.cpp @@ -2542,8 +2543,8 @@ msgstr "ImpossÃvel resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "A ligar.." +msgid "Connecting..." +msgstr "A ligar..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2555,7 +2556,7 @@ msgstr "Ligado" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "A solicitar..." #: editor/export_template_manager.cpp @@ -2691,12 +2692,12 @@ msgid "Collapse all" msgstr "Colapsar tudo" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Renomear.." +msgid "Rename..." +msgstr "Renomear..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Mover para.." +msgid "Move To..." +msgstr "Mover para..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2707,15 +2708,15 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Editar Dependências.." +msgid "Edit Dependencies..." +msgstr "Editar Dependências..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Ver proprietários..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicar..." #: editor/filesystem_dock.cpp @@ -2741,7 +2742,7 @@ msgstr "Instancie a(s) Cena(s) selecionada(s) como filha(s) do Nó selecionado." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "A analisar Ficheiros,\n" "Espere, por favor..." @@ -2809,8 +2810,8 @@ msgid "Import Scene" msgstr "Importar Cena" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "A importar Cena.." +msgid "Importing Scene..." +msgstr "A importar Cena..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2821,8 +2822,8 @@ msgid "Generating for Mesh: " msgstr "A gerar para Mesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "A executar Script Customizado.." +msgid "Running Custom Script..." +msgstr "A executar Script Customizado..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,8 +2838,8 @@ msgid "Error running post-import script:" msgstr "Erro na execução do Script de pós-importação:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "A guardar.." +msgid "Saving..." +msgstr "A guardar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2857,8 +2858,8 @@ msgid "Import As:" msgstr "Importar Como:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Predefinido.." +msgid "Preset..." +msgstr "Predefinido..." #: editor/import_dock.cpp msgid "Reimport" @@ -3276,7 +3277,7 @@ msgid "Transition Node" msgstr "Nó Transition" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Importar Animações..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3284,7 +3285,7 @@ msgid "Edit Node Filters" msgstr "Editar filtros de Nó" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Filtros..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3352,7 +3353,7 @@ msgid "Fetching:" msgstr "Em busca:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "A resolver..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3419,7 +3420,7 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Suporte..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3614,6 +3615,7 @@ msgid "Use Rotation Snap" msgstr "Usar Ajuste na rotação" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Configurar Ajuste..." @@ -3710,14 +3712,12 @@ msgid "Show Guides" msgstr "Mostrar guias" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Ver origem" +msgstr "Mostrar Origem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Vista" +msgstr "Mostrar Vista" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4010,7 +4010,7 @@ msgstr "A Mesh não tem superfÃcie para criar contornos!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Tipo primitivo de Mesh não é PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4041,7 +4041,7 @@ msgid "Create Convex Collision Sibling" msgstr "Criar irmão de colisão convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Criar Mesh contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4246,7 +4246,7 @@ msgid "Error loading image:" msgstr "Erro ao carregar imagem:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "Sem pixeis com transparência > 128 na imagem..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4607,7 +4607,7 @@ msgid "Import Theme" msgstr "Importar tema" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Guardar tema como..." #: editor/plugins/script_editor_plugin.cpp @@ -4704,7 +4704,7 @@ msgstr "Alternar painel de Scripts" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Encontrar..." #: editor/plugins/script_editor_plugin.cpp @@ -4914,15 +4914,15 @@ msgid "Find Previous" msgstr "Encontrar anterior" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Substituir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Ir para linha..." #: editor/plugins/script_text_editor.cpp @@ -5376,11 +5376,7 @@ msgid "Transform" msgstr "Transformar" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Configurar Ajuste..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Diálogo de transformação..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5442,7 +5438,7 @@ msgstr "Ajuste de escala (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" -msgstr "Configuração de vista" +msgstr "Configuração de Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective FOV (deg.):" @@ -5633,7 +5629,7 @@ msgid "Remove All" msgstr "Remover tudo" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Editar tema..." #: editor/plugins/theme_editor_plugin.cpp @@ -5681,14 +5677,12 @@ msgid "Checked Item" msgstr "Item verificado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Adicionar item" +msgstr "Item Rádio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Item verificado" +msgstr "Item Rádio marcado" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5703,7 +5697,8 @@ msgid "Options" msgstr "Opções" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Tem,Muitos,Vários,Opções!" #: editor/plugins/theme_editor_plugin.cpp @@ -5896,7 +5891,7 @@ msgid "Presets" msgstr "Predefinições" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp @@ -5991,6 +5986,11 @@ msgid "Imported Project" msgstr "Projeto importado" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nome do Projeto:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "ImpossÃvel criar pasta." @@ -6189,10 +6189,13 @@ msgid "Mouse Button" msgstr "Botão do rato" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Nome de ação inválido. Não pode ser vazio nem conter '/', ':', '=', '\\' ou " +"'\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6219,7 +6222,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Pressione uma tecla..." #: editor/project_settings_editor.cpp @@ -6403,7 +6406,7 @@ msgid "Property:" msgstr "Propriedade:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Sobrepor por..." #: editor/project_settings_editor.cpp @@ -6476,7 +6479,7 @@ msgstr "Carregamento automático" #: editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "Escolha uma vista" +msgstr "Escolha uma Vista" #: editor/property_editor.cpp msgid "Ease In" @@ -6499,11 +6502,11 @@ msgid "Easing Out-In" msgstr "Easing Out-In" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Ficheiro..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Diretoria..." #: editor/property_editor.cpp @@ -6540,7 +6543,7 @@ msgstr "Erro ao carregar Ficheiro: Não é um recurso!" #: editor/property_editor.cpp msgid "Selected node is not a Viewport!" -msgstr "Nó selecionado não é uma vista!" +msgstr "Nó selecionado não é uma Vista!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -6676,7 +6679,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Esta operação não pode ser feita numa Cena instanciada." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Guardar nova Cena como..." #: editor/scene_tree_dock.cpp @@ -7394,7 +7397,7 @@ msgstr "Distância de escolha:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nome de classe não pode ser uma palavra-chave reservada" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8108,7 +8111,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment precisa de um recurso Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8122,6 +8125,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Este WorldEnvironment Ä— ignorado. Pode adicionar uma Camera (para cenas 3D) " +"ou definir o Modo Background deste ambiente como Canvas (para cenas 2D)." #: scene/3d/sprite_3d.cpp msgid "" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index e5b3fcbad7..9358c958a0 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -4,13 +4,14 @@ # This file is distributed under the same license as the Godot source code. # # Filip <filipanton@tutanota.com>, 2018. +# Nitroretro <nitroretro@protonmail.com>, 2018. # TigerxWood <TigerxWood@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-02 18:03+0000\n" -"Last-Translator: Filip <filipanton@tutanota.com>\n" +"PO-Revision-Date: 2018-05-10 20:02+0000\n" +"Last-Translator: Nitroretro <nitroretro@protonmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -498,8 +499,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "DeconectaÈ›i '%s' de la '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "ConectaÈ›i.." +msgid "Connect..." +msgstr "ConectaÈ›i..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -919,11 +920,11 @@ msgid "Move Audio Bus" msgstr "MutaÈ›i Pista Audio" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "SalvaÈ›i Pista Audio Șablon Ca.." +msgid "Save Audio Bus Layout As..." +msgstr "SalvaÈ›i Pista Audio Șablon Ca..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "LocaÈ›ie pentru Noul Șablon..." #: editor/editor_audio_buses.cpp @@ -1064,12 +1065,12 @@ msgid "Updating Scene" msgstr "Scena se Actualizează" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Modificările locale se stochează..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Scena se Actualizează.." +msgid "Updating scene..." +msgstr "Scena se Actualizează..." #: editor/editor_data.cpp msgid "[empty]" @@ -1114,223 +1115,223 @@ msgstr "FiÅŸierul se Stochează:" #: editor/editor_export.cpp msgid "Packing" -msgstr "" +msgstr "Ambalare" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "" +msgstr "FiÈ™ierul È™ablon nu a fost găsit:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "FiÈ™ierul există, suprascrieÅ£i?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "" +msgstr "SelectaÅ£i directorul curent" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "CopiaÅ£i Calea" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "" +msgstr "ArătaÈ›i în Administratorul de FiÈ™iere" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "" +msgid "New Folder..." +msgstr "Director Nou..." #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "ReîmprospătaÈ›i" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Toate Recunoscute" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Toate FiÅŸierele (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "DeschideÈ›i un FiÈ™ier" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "DeschideÈ›i FiÈ™ier(e)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "DeschideÅ£i un Director" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "DeschideÈ›i un FiÅŸier sau Director" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "SalvaÈ›i" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "SalvaÈ›i un FiÈ™ier" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "ÃŽnapoi" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "ÃŽnainte" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Sus" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "ComutaÈ›i FiÈ™iere Ascunse" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "ComutaÈ›i Favorite" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "Modul de Comutare" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Calea Focală" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "DeplasaÈ›i Favorit Sus" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "DeplasaÈ›i Favorit Jos" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "AccesaÈ›i Directorul Părinte" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Directoare È™i FiÅŸiere:" #: editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "" +msgstr "PrevizualizaÈ›i:" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "FiÈ™ier:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Trebuie să utilizaÅ£i o extensie valida." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "SurseScan" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "(Re)Importând Bunuri" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "CăutaÈ›i în Ajutor" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "Listă de Clase:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "" +msgstr "Căutare Clase" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Sus" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Clasă:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "MoÈ™teneÈ™te:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "MoÅŸtenit de:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Descriere Scurtă:" #: editor/editor_help.cpp msgid "Members" -msgstr "" +msgstr "Membri" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" -msgstr "" +msgstr "Membri:" #: editor/editor_help.cpp msgid "Public Methods" -msgstr "" +msgstr "Metode Publice" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "Metode Publice:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "" +msgstr "Obiecte Tema InterfaÈ›a Grafică" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "" +msgstr "Obiecte Tema InterfaÈ›a Grafică:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" -msgstr "" +msgstr "Semnale:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "" +msgstr "Enumerări" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "" +msgstr "Enumerări:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "enum " #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Constante" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "Constante:" #: editor/editor_help.cpp msgid "Description" -msgstr "" +msgstr "Descriere" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "" +msgstr "Tutoriale Internet:" #: editor/editor_help.cpp msgid "" @@ -1338,164 +1339,174 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" +"Nu există în prezent nici un tutorial pentru această clasă, puteÅ£i [culoare " +"= $color] [url = $url] contribui unul [/ URL] [/ color] sau [culoare = " +"$color] [url = $url2] cerere unul[/ URL] [/ color]." #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "Proprietăți" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "" +msgstr "Descriere Proprietate:" #: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Nu există în prezent nici o descriere pentru această proprietate. Te rog " +"ajută-ne prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ " +"color]!" #: editor/editor_help.cpp msgid "Methods" -msgstr "" +msgstr "Metode" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "" +msgstr "Descrierea metodei:" #: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Nu există în prezent nici o descriere pentru această metodă. Te rog ajută-ne " +"de prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ color]!" #: editor/editor_help.cpp msgid "Search Text" -msgstr "" +msgstr "CăutaÈ›i Text" #: editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "GăsiÈ›i" #: editor/editor_log.cpp msgid "Output:" -msgstr "" +msgstr "AfiÈ™are:" #: editor/editor_log.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/property_editor.cpp editor/script_editor_debugger.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "" +msgstr "GoliÈ›i" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "" +msgstr "GoliÈ›i AfiÈ™area" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Exportul de proiect nu a reuÅŸit cu un cod de eroare %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "" +msgstr "Eroare la salvarea resursei!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "" +msgid "Save Resource As..." +msgstr "SalvaÈ›i Resursa Ca..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "" +msgid "I see..." +msgstr "Am înÈ›eles..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "Nu pot deschide fiÅŸierul pentru scris:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "Formatul fiÅŸierului solicitat este necunoscut:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "Eroare la salvare." #: editor/editor_node.cpp msgid "Can't open '%s'." -msgstr "" +msgstr "Imposibil de deschis '%s'." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "" +msgstr "Eroare analizând '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "SfârÈ™it de fiÈ™ier neaÅŸteptat '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "" +msgstr "LipseÈ™te '%s' sau dependenÅ£ele sale." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "" +msgstr "Eroare în timpul încărcării '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "" +msgstr "Salvând Scena" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "Analizând" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "" +msgstr "Creând Thumbnail" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "" +msgstr "Aceasta operaÈ›iune nu se poate face fără o rădăcină de copac." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +"Nu am putut salva scena. Probabil dependenÅ£e (instanÅ£e sau moÅŸteniri) nu au " +"putut fi satisfăcute." #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "" +msgstr "ÃŽncărcarea resursei a eÈ™uat." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "Imposibil de încărcat MeshLibrary pentru unire!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "Eroare la salvarea MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "Imposibil de încărcat TileSet pentru unire!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "Eroare la salvarea TileSet!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "Eroare la încercarea de a salva schema!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "" +msgstr "Șablon Editor implicit suprascris." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Numele È™ablonului nu a fost găsit!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "" +msgstr "Restaurat È™ablonul implicit la setările de bază." #: editor/editor_node.cpp msgid "" @@ -1503,18 +1514,26 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Această resursă aparÅ£ine de o scena care a fost importată, astfel încât nu " +"este editabilă.\n" +"Vă rugăm să citiÅ£i documentaÅ£ia relevantă pentru importul scene pentru a " +"înÅ£elege mai bine cum sa lucraÈ›i cu acestea." #: editor/editor_node.cpp msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" +"Această resursă este o scena care a fost instanÈ›ată sau moÅŸtenită.\n" +"Modificările la acesta nu vor fi păstrate la salvarea scenei curente." #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" +"Această resursă a fost importată, astfel încât nu este editabilă. ModificaÅ£i " +"setările din panoul de import ÅŸi apoi reimportaÈ›i." #: editor/editor_node.cpp msgid "" @@ -1523,6 +1542,11 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Această scenă a fost importată, astfel încât modificările la acesta nu vor " +"fi păstrate.\n" +"InstanÈ›area sau moÅŸtenirea vă permite efectuarea de modificări la acesta.\n" +"Vă rugăm să citiÅ£i documentaÅ£ia relevantă pentru importul scene pentru a " +"înÅ£elege mai bine acest mod de lucru." #: editor/editor_node.cpp msgid "" @@ -1530,46 +1554,50 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"Acesta este un obiect îndepărtat, astfel încât modificările la acesta nu vor " +"fi păstrate.\n" +"Vă rugăm să citiÅ£i documentaÅ£ia relevantă pentru depanare pentru a înÅ£elege " +"mai bine acest mod de lucru." #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "Extinde toate proprietăţile" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "Restrânge toate proprietăţile" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "" +msgstr "Copie Parametrii" #: editor/editor_node.cpp msgid "Paste Params" -msgstr "" +msgstr "LipiÅ£i Parametrii" #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" +msgstr "LipiÈ›i Resursa" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "" +msgstr "CopiaÈ›i Resursa" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "" +msgstr "FaceÈ›i ÃŽncorporat" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "" +msgstr "FaceÈ›i Sub-Resursa Unică" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "" +msgstr "DeschideÈ›i în Ajutor" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "" +msgstr "Nu există nici o scenă definită pentru a rula." #: editor/editor_node.cpp msgid "" @@ -1577,6 +1605,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Nici o scena principala a fost definită, selectaÈ›i una?\n" +"PuteÈ›i schimba mai târziu, în \"Setări Proiect\" în categoria 'AplicaÈ›ie'." #: editor/editor_node.cpp msgid "" @@ -1584,6 +1614,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Scena selectată ’%s’ nu există, selectaÈ›i una?\n" +"PuteÈ›i schimba mai târziu în „Setări Proiect†în categoria „AplicaÈ›ieâ€." #: editor/editor_node.cpp msgid "" @@ -1591,58 +1623,61 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Scena selectată ’%s’ nu este un fiÈ™ier scenă, selectaÈ›i una validă?\n" +"PuteÈ›i schimba mai târziu în „Setări Proiect†în categoria „AplicaÈ›ieâ€." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" +"Scena curentă nu a fost salvată niciodată, salvaÈ›i-o înainte de rulare." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "" +msgstr "Nu s-a putut porni subprocesul!" #: editor/editor_node.cpp msgid "Open Scene" -msgstr "" +msgstr "Deschide o scenă" #: editor/editor_node.cpp msgid "Open Base Scene" -msgstr "" +msgstr "Deschide o scenă de bază" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "" +msgid "Quick Open Scene..." +msgstr "Deschide o scenă rapid..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "" +msgid "Quick Open Script..." +msgstr "Deschide un script rapid..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Salvează È™i închide" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Salvează schimbările la ’%s’ înainte de ieÈ™ire?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "" +msgid "Save Scene As..." +msgstr "Salvează scena ca..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Nu" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Da" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Această scenă nu a fost salvată niciodata. SalvaÈ›i înainte de rulare?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Această operaÈ›ie nu se poate face fără o scenă." #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -1677,7 +1712,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1822,7 +1857,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1834,11 +1869,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1858,15 +1893,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2111,7 +2146,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2220,7 +2255,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2371,7 +2406,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2447,7 +2482,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2464,7 +2499,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2477,7 +2512,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2609,11 +2644,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2625,15 +2660,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2659,7 +2694,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2725,7 +2760,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2737,7 +2772,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2753,7 +2788,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2773,7 +2808,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3187,7 +3222,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3195,7 +3230,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3263,7 +3298,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3330,7 +3365,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3517,6 +3552,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3938,7 +3974,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4143,7 +4179,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4504,7 +4540,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4601,7 +4637,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4807,15 +4843,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5266,11 +5302,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5523,7 +5555,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5591,7 +5623,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5779,7 +5811,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5869,6 +5901,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Nume nevalid." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6055,8 +6092,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6084,7 +6121,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6268,7 +6305,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6364,11 +6401,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6539,7 +6576,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 9ddbc965e5..3a939ae94e 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-04-27 16:39+0000\n" -"Last-Translator: Chaosus89 <chaosus89@gmail.com>\n" +"PO-Revision-Date: 2018-05-22 17:41+0000\n" +"Last-Translator: ijet <my-ijet@mail.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -511,8 +511,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Отключить '%s' от '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "ПриÑоединить.." +msgid "Connect..." +msgstr "ПриÑоединить..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -931,12 +931,12 @@ msgid "Move Audio Bus" msgstr "ПеремеÑтить аудио шину" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Сохранить раÑкладку звуковой шины как.." +msgid "Save Audio Bus Layout As..." +msgstr "Сохранить раÑкладку звуковой шины как..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "МеÑтоположение новой раÑкладки.." +msgid "Location for New Layout..." +msgstr "МеÑтоположение новой раÑкладки..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1077,12 +1077,12 @@ msgid "Updating Scene" msgstr "Обновление Ñцены" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Сохранение локальных изменений.." +msgid "Storing local changes..." +msgstr "Сохранение локальных изменений..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Обновление Ñцены.." +msgid "Updating scene..." +msgstr "Обновление Ñцены..." #: editor/editor_data.cpp msgid "[empty]" @@ -1150,8 +1150,8 @@ msgid "Show In File Manager" msgstr "ПроÑмотреть в проводнике" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°.." +msgid "New Folder..." +msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1412,20 +1412,20 @@ msgstr "ОчиÑтить вывод" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "ÐкÑпорт проекта не удалÑÑ, код %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Ошибка при Ñохранении реÑурÑа!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Сохранить реÑÑƒÑ€Ñ ÐºÐ°Ðº.." +msgid "Save Resource As..." +msgstr "Сохранить реÑÑƒÑ€Ñ ÐºÐ°Ðº..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "ЯÑно.." +msgid "I see..." +msgstr "ЯÑно..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1655,12 +1655,12 @@ msgid "Open Base Scene" msgstr "Открыть оÑновную Ñцену" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "БыÑтро открыть Ñцену.." +msgid "Quick Open Scene..." +msgstr "БыÑтро открыть Ñцену..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "БыÑтро открыть Ñкрипт.." +msgid "Quick Open Script..." +msgstr "БыÑтро открыть Ñкрипт..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1671,8 +1671,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² «%s» перед закрытием?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Сохранить Ñцену как.." +msgid "Save Scene As..." +msgstr "Сохранить Ñцену как..." #: editor/editor_node.cpp msgid "No" @@ -1723,8 +1723,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ. ВоÑÑтановить в любом Ñлучае?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "БыÑтро запуÑтить Ñцену.." +msgid "Quick Run Scene..." +msgstr "БыÑтро запуÑтить Ñцену..." #: editor/editor_node.cpp msgid "Quit" @@ -1880,8 +1880,8 @@ msgid "Previous tab" msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "ОтÑортировать файлы.." +msgid "Filter Files..." +msgstr "ОтÑортировать файлы..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1892,12 +1892,12 @@ msgid "New Scene" msgstr "ÐÐ¾Ð²Ð°Ñ Ñцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°.." +msgid "New Inherited Scene..." +msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Открыть Ñцену.." +msgid "Open Scene..." +msgstr "Открыть Ñцену..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1916,16 +1916,16 @@ msgid "Open Recent" msgstr "Открыть поÑледнее" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Конвертировать в.." +msgid "Convert To..." +msgstr "Конвертировать в..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "Библиотека полиÑеток.." +msgid "MeshLibrary..." +msgstr "Библиотека полиÑеток..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "Ðабор тайлов.." +msgid "TileSet..." +msgstr "Ðабор тайлов..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2188,8 +2188,8 @@ msgid "Save the currently edited resource." msgstr "Сохранить текущий редактируемый реÑурÑ." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Сохранить как.." +msgid "Save As..." +msgstr "Сохранить как..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2297,8 +2297,8 @@ msgid "Creating Mesh Previews" msgstr "Создание предпроÑмотра" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Миниатюра.." +msgid "Thumbnail..." +msgstr "Миниатюра..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2359,7 +2359,7 @@ msgstr "Включительно" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Self" +msgstr "" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -2450,7 +2450,7 @@ msgid "(Current)" msgstr "(Текущий)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Получение зеркал, пожалуйÑта подождите." #: editor/export_template_manager.cpp @@ -2528,8 +2528,8 @@ msgid "Error requesting url: " msgstr "Ошибка запроÑа адреÑа ÑÑылки: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Подключение к зеркалам.." +msgid "Connecting to Mirror..." +msgstr "Подключение к зеркалам..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2545,8 +2545,8 @@ msgstr "Ðе удаётÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "Подключение.." +msgid "Connecting..." +msgstr "Подключение..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2558,8 +2558,8 @@ msgstr "Подключен" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "Запрашиваю.." +msgid "Requesting..." +msgstr "Запрашиваю..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2695,12 +2695,12 @@ msgid "Collapse all" msgstr "Свернуть вÑе" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Переименовать.." +msgid "Rename..." +msgstr "Переименовать..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ПеремеÑтить в.." +msgid "Move To..." +msgstr "ПеремеÑтить в..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2711,16 +2711,16 @@ msgid "Instance" msgstr "Добавить ÑкземплÑÑ€" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редактировать завиÑимоÑти.." +msgid "Edit Dependencies..." +msgstr "Редактировать завиÑимоÑти..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ПроÑмотреть владельцев.." +msgid "View Owners..." +msgstr "ПроÑмотреть владельцев..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Дублировать.." +msgid "Duplicate..." +msgstr "Дублировать..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2745,7 +2745,7 @@ msgstr "Добавить выбранную Ñцену(Ñ‹), в качеÑтве #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Сканирование файлов,\n" "пожалуйÑта, подождите..." @@ -2813,8 +2813,8 @@ msgid "Import Scene" msgstr "Импортировать Ñцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Импортирование Ñцены.." +msgid "Importing Scene..." +msgstr "Импортирование Ñцены..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2825,8 +2825,8 @@ msgid "Generating for Mesh: " msgstr "Создание Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ñетки: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "ЗапуÑк пользовательÑкого Ñкрипта.." +msgid "Running Custom Script..." +msgstr "ЗапуÑк пользовательÑкого Ñкрипта..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2841,8 +2841,8 @@ msgid "Error running post-import script:" msgstr "Ошибка запуÑка поÑÑ‚-импорт Ñкрипта:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Сохранение.." +msgid "Saving..." +msgstr "Сохранение..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2861,8 +2861,8 @@ msgid "Import As:" msgstr "Импортировать как:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "ПредуÑтановка.." +msgid "Preset..." +msgstr "ПредуÑтановка..." #: editor/import_dock.cpp msgid "Reimport" @@ -3282,16 +3282,16 @@ msgid "Transition Node" msgstr "Transition узел" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Импортировать анимации.." +msgid "Import Animations..." +msgstr "Импортировать анимации..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Редактировать фильтры узла" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "Фильтры.." +msgid "Filters..." +msgstr "Фильтры..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3358,7 +3358,7 @@ msgid "Fetching:" msgstr "Извлечение:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "ИнициализациÑ..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3425,8 +3425,8 @@ msgid "Site:" msgstr "Сайт:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Поддержка.." +msgid "Support..." +msgstr "Поддержка..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3622,6 +3622,7 @@ msgid "Use Rotation Snap" msgstr "ИÑпользовать привÑзку вращениÑ" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ÐаÑтроить привÑзку..." @@ -3718,14 +3719,12 @@ msgid "Show Guides" msgstr "Показывать направлÑющие" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "Отображать начало координат" +msgstr "Отображать центр" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Окно" +msgstr "Показать окно проÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4018,7 +4017,7 @@ msgstr "Полиcетка не имеет поверхноÑти Ð´Ð»Ñ Ñозд #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Тип полиÑетки не PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4049,8 +4048,8 @@ msgid "Create Convex Collision Sibling" msgstr "Создать выпуклую облаÑть ÑтолкновениÑ" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Создать полиÑетку обводки.." +msgid "Create Outline Mesh..." +msgstr "Создать полиÑетку обводки..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4254,8 +4253,8 @@ msgid "Error loading image:" msgstr "Ошибка при загрузке изображениÑ:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Ðикаких пикÑелей Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ñтью > 128 в изображении.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Ðикаких пикÑелей Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ñтью > 128 в изображении..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4615,8 +4614,8 @@ msgid "Import Theme" msgstr "Импортировать тему" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Сохранить тему как.." +msgid "Save Theme As..." +msgstr "Сохранить тему как..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4712,8 +4711,8 @@ msgstr "Переключить панель Ñкриптов" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Ðайти.." +msgid "Find..." +msgstr "Ðайти..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4922,16 +4921,16 @@ msgid "Find Previous" msgstr "Ðайти предыдущее" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Заменить.." +msgid "Replace..." +msgstr "Заменить..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Перейти к функции.." +msgid "Goto Function..." +msgstr "Перейти к функции..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Перейти к Ñтроке.." +msgid "Goto Line..." +msgstr "Перейти к Ñтроке..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5384,12 +5383,8 @@ msgid "Transform" msgstr "Преобразование" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ÐаÑтроить привÑзку.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Окно преобразованиÑ.." +msgid "Transform Dialog..." +msgstr "Окно преобразованиÑ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5558,7 +5553,7 @@ msgstr "ПеремеÑтить (поÑле)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" -msgstr "SpriteFrames" +msgstr "Спрайт кадры" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox Preview:" @@ -5566,7 +5561,7 @@ msgstr "ПредпроÑмотр StyleBox:" #: editor/plugins/style_box_editor_plugin.cpp msgid "StyleBox" -msgstr "StyleBox" +msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" @@ -5641,8 +5636,8 @@ msgid "Remove All" msgstr "Удалить вÑе" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Редактировать тему.." +msgid "Edit theme..." +msgstr "Редактировать тему..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5711,7 +5706,8 @@ msgid "Options" msgstr "Параметры" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Имеет,Много,Разных,Опций!" #: editor/plugins/theme_editor_plugin.cpp @@ -5903,8 +5899,8 @@ msgid "Presets" msgstr "ПредуÑтановки" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Добавить.." +msgid "Add..." +msgstr "Добавить..." #: editor/project_export.cpp msgid "Resources" @@ -5995,6 +5991,11 @@ msgid "Imported Project" msgstr "Импортированный проект" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Ðазвание проекта:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Ðе удалоÑÑŒ Ñоздать папку." @@ -6193,10 +6194,13 @@ msgid "Mouse Button" msgstr "Кнопка мыши" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"ÐедопуÑтимое Ð¸Ð¼Ñ Ð´ÐµÐ¹ÑтвиÑ. Оно не может быть пуÑтым или Ñодержать '/', ':', " +"'=', '\\' или '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6223,7 +6227,7 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "Ðажмите любую клавишу..." #: editor/project_settings_editor.cpp @@ -6407,7 +6411,7 @@ msgid "Property:" msgstr "Параметр:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Переопределить длÑ..." #: editor/project_settings_editor.cpp @@ -6503,12 +6507,12 @@ msgid "Easing Out-In" msgstr "Переход ИЗ-Ð’" #: editor/property_editor.cpp -msgid "File.." -msgstr "Файл.." +msgid "File..." +msgstr "Файл..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Папка.." +msgid "Dir..." +msgstr "Папка..." #: editor/property_editor.cpp msgid "Assign" @@ -6682,8 +6686,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть Ñделана на редактируемой Ñцене." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Сохранить новую Сцену как.." +msgid "Save New Scene As..." +msgstr "Сохранить новую Сцену как..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7232,7 +7236,7 @@ msgstr "Библиотеки: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "GDNative" +msgstr "" #: modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7399,7 +7403,7 @@ msgstr "РаÑÑтоÑние выбора:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Ð˜Ð¼Ñ ÐºÐ»Ð°ÑÑа не может быть зарезервированным ключевым Ñловом" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8111,7 +8115,7 @@ msgstr "СвойÑтво Path должно указывать на дейÑтвР#: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment необходим Environment реÑурÑ." #: scene/3d/scenario_fx.cpp msgid "" @@ -8125,6 +8129,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Ðтот WorldEnvironment игнорируетÑÑ. Либо добавьте Camera (Ð´Ð»Ñ 3D-Ñцен), либо " +"уÑтановите в Environment реÑурÑе Background режим в Canvas (Ð´Ð»Ñ 2D Ñцен)." #: scene/3d/sprite_3d.cpp msgid "" @@ -8398,8 +8404,8 @@ msgstr "ÐедопуÑтимый размер шрифта." #~ msgid "Exporting for %s" #~ msgstr "ÐкÑпортирование Ð´Ð»Ñ %s" -#~ msgid "Setting Up.." -#~ msgstr "ÐаÑтройка.." +#~ msgid "Setting Up..." +#~ msgstr "ÐаÑтройка..." #~ msgid "Error loading scene." #~ msgstr "Ошибка загрузки Ñцены." @@ -8459,8 +8465,8 @@ msgstr "ÐедопуÑтимый размер шрифта." #~ msgid "Info" #~ msgstr "ИнформациÑ" -#~ msgid "Re-Import.." -#~ msgstr "Переимпортировать.." +#~ msgid "Re-Import..." +#~ msgstr "Переимпортировать..." #~ msgid "No bit masks to import!" #~ msgstr "Ðет битовой маÑки Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°!" @@ -8856,14 +8862,14 @@ msgstr "ÐедопуÑтимый размер шрифта." #~ msgid "Zoom (%):" #~ msgstr "МаÑштаб (%):" -#~ msgid "Skeleton.." -#~ msgstr "Скелет.." +#~ msgid "Skeleton..." +#~ msgstr "Скелет..." #~ msgid "Zoom Reset" #~ msgstr "СброÑить маÑштаб" -#~ msgid "Zoom Set.." -#~ msgstr "УÑтановить маÑштаб.." +#~ msgid "Zoom Set..." +#~ msgstr "УÑтановить маÑштаб..." #~ msgid "Set a Value" #~ msgstr "УÑтановить значение" @@ -9336,8 +9342,8 @@ msgstr "ÐедопуÑтимый размер шрифта." #~ msgid "Export Project PCK" #~ msgstr "ÐкÑпортировать PCK проекта" -#~ msgid "Export.." -#~ msgstr "ÐкÑпортировать.." +#~ msgid "Export..." +#~ msgstr "ÐкÑпортировать..." #~ msgid "Project Export" #~ msgstr "ÐкÑпортирование проекта" @@ -9457,8 +9463,8 @@ msgstr "ÐедопуÑтимый размер шрифта." #~ msgid "Reload Tool Script (Soft)" #~ msgstr "Перезагрузить инÑтрум. Ñкрипт (мÑгко)" -#~ msgid "Edit Connections.." -#~ msgstr "Изменить ÑвÑзи.." +#~ msgid "Edit Connections..." +#~ msgstr "Изменить ÑвÑзи..." #~ msgid "Set Params" #~ msgstr "Ðазначить параметры" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 16f675df37..9a95848f70 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -910,11 +910,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1051,11 +1051,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1126,7 +1126,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "VytvoriÅ¥ adresár" #: editor/editor_file_dialog.cpp @@ -1394,12 +1394,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1604,11 +1604,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1621,7 +1621,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1673,7 +1673,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1820,7 +1820,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1832,11 +1832,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1857,15 +1857,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2110,7 +2110,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2222,7 +2222,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2373,7 +2373,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2449,7 +2449,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2466,7 +2466,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2479,7 +2479,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2613,11 +2613,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2630,15 +2630,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2664,7 +2664,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2730,7 +2730,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2742,7 +2742,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2758,7 +2758,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2779,7 +2779,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3197,7 +3197,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3205,7 +3205,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3275,7 +3275,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3342,7 +3342,7 @@ msgid "Site:" msgstr "Stránka:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3532,6 +3532,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3958,7 +3959,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4165,7 +4166,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4530,7 +4531,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4628,7 +4629,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4834,15 +4835,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5297,11 +5298,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5558,7 +5555,7 @@ msgid "Remove All" msgstr "VÅ¡etky vybrané" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5626,7 +5623,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5817,7 +5814,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5907,6 +5904,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "Couldn't create folder." msgstr "VytvoriÅ¥ adresár" @@ -6098,8 +6099,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6127,7 +6128,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6312,7 +6313,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6409,11 +6410,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6586,7 +6587,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 74b469fc42..a762d6f69b 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-05-03 07:41+0000\n" +"PO-Revision-Date: 2018-06-05 19:27+0000\n" "Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -191,11 +191,11 @@ msgstr "PoÄisti Animacijo" #: editor/animation_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "Ustvari NOVI trak za %s in vstavi kljuÄ?" +msgstr "Ustvarim NOVO sled za %s in vstavim kljuÄ?" #: editor/animation_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "Ustvarim %d NOVO sled in vstavim kljuÄe?" #: editor/animation_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/plugins/abstract_polygon_2d_editor.cpp @@ -207,43 +207,43 @@ msgstr "Ustvari" #: editor/animation_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "Ustvari & Vstavi Animacijo" #: editor/animation_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "V Animacijo Vstavi Sled & KljuÄ" #: editor/animation_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "V Animacijo Vstavi KljuÄ" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Spremeni Dolžino Animacije" #: editor/animation_editor.cpp msgid "Change Anim Loop" -msgstr "" +msgstr "Spremeni Zanko Animacije" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "V Animaciji Ustvari Vneseno Vrednost KljuÄa" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Vstavi Animacijo" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Spremeni Obseg KljuÄev" #: editor/animation_editor.cpp msgid "Anim Add Call Track" -msgstr "" +msgstr "Dodaj KlicajoÄo Sled v Animacijo" #: editor/animation_editor.cpp msgid "Animation zoom." -msgstr "Približaj animacijo" +msgstr "Približaj animacijo." #: editor/animation_editor.cpp msgid "Length (s):" @@ -259,39 +259,39 @@ msgstr "Korak (s):" #: editor/animation_editor.cpp msgid "Cursor step snap (in seconds)." -msgstr "" +msgstr "Korak postavitve kazalca (v sekundah)." #: editor/animation_editor.cpp msgid "Enable/Disable looping in animation." -msgstr "" +msgstr "OmogoÄi/OnemogoÄi zankanje v animaciji." #: editor/animation_editor.cpp msgid "Add new tracks." -msgstr "" +msgstr "Dodaj Novo Sled." #: editor/animation_editor.cpp msgid "Move current track up." -msgstr "" +msgstr "Trenutno sled premakni gor." #: editor/animation_editor.cpp msgid "Move current track down." -msgstr "" +msgstr "Trenutno sled premakni dol." #: editor/animation_editor.cpp msgid "Remove selected track." -msgstr "" +msgstr "Odstrani izbrano sled." #: editor/animation_editor.cpp msgid "Track tools" -msgstr "" +msgstr "Orodja sledi" #: editor/animation_editor.cpp msgid "Enable editing of individual keys by clicking them." -msgstr "" +msgstr "S klikom na posamezne kljuÄe omogoÄite njihovo urejanje." #: editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Optimizacija Animacije" #: editor/animation_editor.cpp msgid "Max. Linear Error:" @@ -307,11 +307,12 @@ msgstr "" #: editor/animation_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Optimiziraj" #: editor/animation_editor.cpp msgid "Select an AnimationPlayer from the Scene Tree to edit animations." msgstr "" +"ÄŒe želite urediti animacije, izberite AnimationPlayer iz drevesa scene." #: editor/animation_editor.cpp msgid "Key" @@ -319,15 +320,15 @@ msgstr "ÄŒrka" #: editor/animation_editor.cpp msgid "Transition" -msgstr "" +msgstr "Prehod" #: editor/animation_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "Razmerje Obsega:" #: editor/animation_editor.cpp msgid "Call Functions in Which Node?" -msgstr "" +msgstr "Klic funkcije v katerem gradniku?" #: editor/animation_editor.cpp msgid "Remove invalid keys" @@ -335,7 +336,7 @@ msgstr "Odstrani nedovoljene ÄŒrke" #: editor/animation_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Odstrani nedoloÄene in prazne sledi" #: editor/animation_editor.cpp msgid "Clean-up all animations" @@ -343,11 +344,11 @@ msgstr "PobriÅ¡i vse animacije" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "IzbriÅ¡i Animacij(o/e) (BREZ VRNITVE)" +msgstr "IzbriÅ¡i Animacijo/e (BREZ VRNITVE!)" #: editor/animation_editor.cpp msgid "Clean-Up" -msgstr "PobriÅ¡i" +msgstr "PoÄisti" #: editor/array_property_edit.cpp msgid "Resize Array" @@ -355,35 +356,35 @@ msgstr "PoveÄaj Niz" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "Spremeni Tip Vrednosti Niza" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "Spremeni Vrednost Niza" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Pojdi na Vrstico" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Å tevilka vrste:" +msgstr "Å tevilka Vrste:" #: editor/code_editor.cpp msgid "No Matches" -msgstr "" +msgstr "Ni Zadetkov" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Zamenjana %d ponovitev/e." #: editor/code_editor.cpp msgid "Match Case" -msgstr "" +msgstr "Ujemanje Velikih ÄŒrk" #: editor/code_editor.cpp msgid "Whole Words" -msgstr "" +msgstr "Cele Besede" #: editor/code_editor.cpp msgid "Replace" @@ -391,51 +392,53 @@ msgstr "Zamenjaj" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Zamenjaj Vse" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Samo Izbira" #: editor/code_editor.cpp msgid "Zoom In" -msgstr "" +msgstr "Približaj" #: editor/code_editor.cpp msgid "Zoom Out" -msgstr "" +msgstr "Oddalji" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Ponastavi PoveÄavo/PomanjÅ¡avo" #: editor/code_editor.cpp editor/script_editor_debugger.cpp msgid "Line:" -msgstr "" +msgstr "Vrstica:" #: editor/code_editor.cpp msgid "Col:" -msgstr "" +msgstr "Stolpec:" #: editor/connections_dialog.cpp msgid "Method in target Node must be specified!" -msgstr "" +msgstr "Metoda v ciljnem gradniku mora biti navedena!" #: editor/connections_dialog.cpp msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" +"Ciljna metoda ni bila najdena! Navedite veljavno metodo ali priložite " +"skripto, ki cilja na Gradnik." #: editor/connections_dialog.cpp msgid "Connect To Node:" -msgstr "" +msgstr "Poveži se z Gradnikom:" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "" +msgstr "Dodaj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -446,27 +449,27 @@ msgstr "Odstrani" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Dodaj Dodaten Klicni Argument:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "Dodatni Klicni Argumenti:" #: editor/connections_dialog.cpp msgid "Path to Node:" -msgstr "" +msgstr "Pot do Gradnika:" #: editor/connections_dialog.cpp msgid "Make Function" -msgstr "" +msgstr "Naredi Funkcijo" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Odloženo" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "En Poizkus" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp @@ -484,37 +487,36 @@ msgstr "Zapri" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Poveži" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Poveži '%s' v '%s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" -msgstr "" +msgstr "Povezovanje Signala:" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Odklopite '%s' iz '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "" +msgid "Connect..." +msgstr "Poveži..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Odklopi" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Signali" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "Osnovni Tip:" +msgstr "Spremeni Tip %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -522,9 +524,8 @@ msgid "Change" msgstr "Spremeni" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "Ustvari" +msgstr "Ustvari Nov %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -533,55 +534,59 @@ msgstr "Priljubljene:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Nedavni:" #: editor/create_dialog.cpp editor/editor_node.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Search:" -msgstr "" +msgstr "Iskanje:" #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp msgid "Matches:" -msgstr "" +msgstr "Zadetki:" #: editor/create_dialog.cpp editor/editor_help.cpp #: editor/plugins/asset_library_editor_plugin.cpp editor/property_selector.cpp #: editor/script_editor_debugger.cpp msgid "Description:" -msgstr "" +msgstr "Opis:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Iskanje Zamenjave Za:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "Odvisnosti Za:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will not take effect unless reloaded." msgstr "" +"Scena '%s' je trenutno v urejanju.\n" +"Spremembe bodo zaÄele veljati, ko bodo znova naložene." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will take effect when reloaded." msgstr "" +"Vir '%s' je v uporabi.\n" +"Spremembe bodo zaÄele veljati, ko bodo znova naložene." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "Odvisnosti" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "Viri" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp @@ -591,34 +596,34 @@ msgstr "Pot" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "Odvisnosti:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Popravi Pokvarjeno" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "Urejevalnik Odvisnosti" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "" +msgstr "Iskanje Nadomestnih Virov:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help.cpp editor/editor_node.cpp editor/filesystem_dock.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp #: editor/quick_open.cpp scene/gui/file_dialog.cpp msgid "Open" -msgstr "" +msgstr "Odpri" #: editor/dependency_editor.cpp msgid "Owners Of:" -msgstr "" +msgstr "Lastniki:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (no undo)" -msgstr "" +msgstr "Odstranim izbrane datoteke iz projekta? (brez vrnitve)" #: editor/dependency_editor.cpp msgid "" @@ -626,46 +631,48 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"Izbrisane datoteke so potrebne za delovanje drugih virov.\n" +"Ali jih vseeno odstranim? (brez vrnitve)" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "" +msgstr "Ni mogoÄe odstraniti:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "Napaka pri nalaganju:" #: editor/dependency_editor.cpp msgid "Scene failed to load due to missing dependencies:" -msgstr "" +msgstr "Nalaganje scene je spodletelo zaradi manjkajoÄih odvisnosti:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Vseeno Odpri" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Katere ukrepe je treba sprejeti?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Popravi Odvisnosti" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "Napake pri nalaganju!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Trajno izbriÅ¡em %d predmet(e)? (Brez vrnitve!)" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "Lastnik" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "" +msgstr "Viri Brez Izrecnega LastniÅ¡tva:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" @@ -673,7 +680,7 @@ msgstr "Raziskovalec Osamljenih Virov" #: editor/dependency_editor.cpp msgid "Delete selected files?" -msgstr "" +msgstr "IzbriÅ¡em izbrane datoteke?" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -681,35 +688,35 @@ msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp #: editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "IzbriÅ¡i" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "" +msgstr "Spremeni Slovarski KljuÄ" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "" +msgstr "Spremeni Slovarsko Vrednost" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" +msgstr "Zahvaljujemo se vam iz skupnosti Godota!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "" +msgstr "Hvala!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "Godot Engine sodelovci" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "" +msgstr "Ustanovitelji Projekta" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "Vodilni Razvajalec" #: editor/editor_about.cpp msgid "Project Manager " @@ -717,47 +724,47 @@ msgstr "Upravljalnik Projekta " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "Razvajalci" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Avtorji" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "Platina Sponzorji" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "Zlati Sponzorji" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "" +msgstr "Majhni Sponzorji" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "Zlati Donatorji" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "Srebrni Donatorji" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "Bronasti Donatorji" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "Donatorji" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Licenca" #: editor/editor_about.cpp msgid "Thirdparty License" -msgstr "" +msgstr "Licenca Tretjih Oseb" #: editor/editor_about.cpp msgid "" @@ -766,125 +773,125 @@ msgid "" "is an exhaustive list of all such thirdparty components with their " "respective copyright statements and license terms." msgstr "" +"Godot Engine se nanaÅ¡a na Å¡tevilne brezplaÄne in odprokodne knjižnice tretih " +"oseb, ki so združljive z doloÄili MIT licence. SledeÄi obÅ¡iren seznam " +"predstavi komponente tretjih oseb s pripadajoÄimi izjavami o avtorskih " +"pravicah in licenÄnimi pogoji." #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "Vse Komponente" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "Komponente" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licence" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in zip format." -msgstr "" +msgstr "Napaka pri odpiranju datoteke paketa, ker ni v formatu zip." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "" +msgstr "RazÅ¡irjenje Dodatkov" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package Installed Successfully!" -msgstr "" +msgstr "Paket je UspeÅ¡no NameÅ¡Äen!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Uspelo je!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install" -msgstr "" +msgstr "Namesti" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "" +msgstr "Namestnik Paketov" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "ZvoÄniki" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "Dodaj UÄinek" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "Preimenuj Funkcijo" +msgstr "Preimenuj ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "Preimenuj Funkcijo" +msgstr "Spremeni Glasnost ZvoÄnega Vodila" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "" +msgstr "Preklopi samo na ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "" +msgstr "Preklopi na Tihi NaÄin ZvoÄnega Vodila" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "" +msgstr "Preklopi na UÄinke Prehoda ZvoÄnega Vodila" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "" +msgstr "Izberi PoÅ¡lji možnost ZvoÄnega vodila" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Dodaj uÄinek ZvoÄnega Vodila" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "" +msgstr "Premakni uÄinek Vodila" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i uÄinek Vodila" #: editor/editor_audio_buses.cpp msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "" +msgstr "ZvoÄno Vodilo, Povelci in Izpusti za preureditev." #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Sam" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Nem" #: editor/editor_audio_buses.cpp msgid "Bypass" -msgstr "" +msgstr "Prehod" #: editor/editor_audio_buses.cpp msgid "Bus options" -msgstr "" +msgstr "Možnosti Vodila" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "" +msgstr "Podvoji" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "" +msgstr "Ponastavi Glasnost" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Effect" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i UÄinek" #: editor/editor_audio_buses.cpp msgid "Audio" @@ -892,154 +899,156 @@ msgstr "Zvok" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "" +msgstr "Dodaj ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "" +msgstr "Glavno vodilo ni mogoÄe izbrisati!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "" +msgstr "IzbriÅ¡i ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "" +msgstr "Podvoji ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "" +msgstr "Ponastavi Glasnost Vodila" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "" +msgstr "Premakni ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "" +msgid "Save Audio Bus Layout As..." +msgstr "Shrani Postavitev ZvoÄnega Vodila Kot..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "" +msgid "Location for New Layout..." +msgstr "Lokacija za Novo Postavitev..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "" +msgstr "Odpri ZvoÄno Vodilo" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "" +msgstr "Datoteka 'res://default_bus_layout.tres' ne obstaja." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "" +msgstr "Neveljavna datoteka, ker ni postavitve zvoÄnega vodila." #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "" +msgstr "Dodaj Vodilo" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "" +msgstr "Ustvari novo Postavitev Vodila." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp msgid "Load" -msgstr "" +msgstr "Naloži" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "" +msgstr "Naloži obstojeÄo Postavitev Vodila." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "" +msgstr "Shrani Kot" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "" +msgstr "Shrani to Postavitev Vodila v datoteko." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "" +msgstr "Naložite Prevzeto" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "" +msgstr "Naloži prevezeto Postavitev Vodila." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "" +msgstr "Neveljavno ime." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "" +msgstr "Veljavni znaki:" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing engine class name." -msgstr "" +msgstr "Neveljavno ime. Ne sme se prekrivati z obstojeÄim imenom razreda." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing buit-in type name." msgstr "" +"Neveljavno ime. Ne sme se prekrivati z obstojeÄim vgrajenim imenom tipa." #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" +"Neveljavno ime. Ne sme se prekrivati z obstojeÄim imenom globalne konstante." #: editor/editor_autoload_settings.cpp msgid "Invalid Path." -msgstr "" +msgstr "Neveljavna Pot." #: editor/editor_autoload_settings.cpp msgid "File does not exist." -msgstr "" +msgstr "Datoteka ne obstaja." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "" +msgstr "Ni na poti virov." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "" +msgstr "Dodaj SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "" +msgstr "SamodejnoNalaganje '%s' že obstaja!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "" +msgstr "Preimenuj SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "" +msgstr "Preklopi na Globalno SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "" +msgstr "Premakni SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "" +msgstr "Odstrani SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "" +msgstr "OmogoÄi" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "" +msgstr "Preuredi SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Pot:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Ime Gradnika:" #: editor/editor_autoload_settings.cpp editor/editor_profiler.cpp #: editor/project_manager.cpp editor/settings_config_dialog.cpp @@ -1048,35 +1057,35 @@ msgstr "Ime" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "" +msgstr "Posameznik" #: editor/editor_data.cpp msgid "Updating Scene" msgstr "Posodabljanje Scene" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "" +msgid "Storing local changes..." +msgstr "Shranjevanje lokalnih sprememb..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Posodabljanje scene.." +msgid "Updating scene..." +msgstr "Posodabljanje scene..." #: editor/editor_data.cpp msgid "[empty]" -msgstr "[prazen]" +msgstr "[prazno]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[neshranjeno]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first" -msgstr "" +msgstr "Najprej izberi osnovno mapo" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "" +msgstr "Izberi Mapo" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp @@ -1088,32 +1097,32 @@ msgstr "Ustvarite Mapo" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp #: scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "Ime:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Mape ni mogoÄe ustvariti." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "" +msgstr "Izberi" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "" +msgstr "Shranjevanje Datoteke:" #: editor/editor_export.cpp msgid "Packing" -msgstr "" +msgstr "Pakiranje" #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "" +msgstr "Predloge ni mogoÄe najti:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Datoteka Obstaja, PrepiÅ¡em?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" @@ -1121,23 +1130,23 @@ msgstr "Izberite Trenutno Mapo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Kopiraj Pot" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Show In File Manager" -msgstr "" +msgstr "Pokaži V Upravitelju Datotek" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "" +msgid "New Folder..." +msgstr "Nova Mapa..." #: editor/editor_file_dialog.cpp msgid "Refresh" -msgstr "" +msgstr "Osveži" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Vse Prepoznano" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1145,69 +1154,69 @@ msgstr "Vse Datoteke (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Odpri v Datoteki" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Odpri Datotek(o/e)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Odpri v Mapi" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Odpri Datoteko ali Mapo" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "Shrani" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Shrani Datoteko" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Pojdi Nazaj" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Pojdi Naprej" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Pojdi Navzgor" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Preklopi na Skrite Datoteke" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Preklopi na NajljubÅ¡e" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" -msgstr "" +msgstr "Preklopi NaÄin" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Poudari Pot" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "Premakni Priljubljeno Navzgor" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "Premakni Priljubljeno Navzdol" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "Pojdi v nadrejeno mapo" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1215,7 +1224,7 @@ msgstr "Mape & Datoteke:" #: editor/editor_file_dialog.cpp msgid "Preview:" -msgstr "" +msgstr "Predogled:" #: editor/editor_file_dialog.cpp editor/script_editor_debugger.cpp #: scene/gui/file_dialog.cpp @@ -1224,53 +1233,52 @@ msgstr "Datoteka:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "" +msgstr "Uporabiti moraÅ¡ valjavno razÅ¡iritev." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "" +msgstr "BranjeVirov" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "" +msgstr "Uvoz Dodatkov" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "IÅ¡Äi PomoÄ" #: editor/editor_help.cpp msgid "Class List:" -msgstr "" +msgstr "Seznam Razredov:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "" +msgstr "IÅ¡Äi Razrede" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" -msgstr "" +msgstr "Vrh" #: editor/editor_help.cpp editor/property_editor.cpp msgid "Class:" -msgstr "" +msgstr "Razred:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp msgid "Inherits:" -msgstr "" +msgstr "Dedovanja:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "" +msgstr "Podedovano od:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "" +msgstr "Kratek Opis:" #: editor/editor_help.cpp -#, fuzzy msgid "Members" -msgstr "ÄŒlani:" +msgstr "ÄŒlani" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -1278,53 +1286,51 @@ msgstr "ÄŒlani:" #: editor/editor_help.cpp msgid "Public Methods" -msgstr "" +msgstr "Javne Metode" #: editor/editor_help.cpp msgid "Public Methods:" -msgstr "" +msgstr "Javne Metode:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "" +msgstr "Elementi GUI Teme" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "" +msgstr "Elementi GUI Teme:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Signali:" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Funkcije:" +msgstr "OÅ¡tevilÄenja" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations:" -msgstr "Funkcije:" +msgstr "OÅ¡tevilÄenja:" #: editor/editor_help.cpp msgid "enum " -msgstr "" +msgstr "oÅ¡tevil " #: editor/editor_help.cpp msgid "Constants" -msgstr "" +msgstr "Konstante" #: editor/editor_help.cpp msgid "Constants:" -msgstr "" +msgstr "Konstante:" #: editor/editor_help.cpp msgid "Description" -msgstr "" +msgstr "Opis" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "" +msgstr "Spletne Vaje:" #: editor/editor_help.cpp msgid "" @@ -1332,42 +1338,48 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" +"Trenutno ni vaj za ta razred, lahko ga [color=$color][url=$url]prispevate[/" +"url][/color] ali [color=$color][url=$url2]zahtevate enega[/url][/color]." #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "Lastnosti" #: editor/editor_help.cpp msgid "Property Description:" -msgstr "" +msgstr "Opis lastnosti:" #: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Trenutno ni opisa za to lastnost. Pomagajte nam s [color=$color][url=" +"$url]prispevkom[/url][/color]!" #: editor/editor_help.cpp msgid "Methods" -msgstr "" +msgstr "Metode" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "" +msgstr "Opis Metode:" #: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Trenutno ni opisa za to metodo. Pomagajte nam s [color=$color][url=" +"$url]prispevkom[/url][/color]!" #: editor/editor_help.cpp msgid "Search Text" -msgstr "" +msgstr "IÅ¡Äi Besedilo" #: editor/editor_help.cpp msgid "Find" -msgstr "" +msgstr "Najdi" #: editor/editor_log.cpp msgid "Output:" @@ -1378,60 +1390,60 @@ msgstr "Izhod:" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "" +msgstr "PoÄisti" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "" +msgstr "PoÄisti Izhod" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Izvoz projekta ni uspelo s kodno napako %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "" +msgstr "Napaka pri shranjevanju virov!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "" +msgid "Save Resource As..." +msgstr "Shrani Vire Kot..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "" +msgid "I see..." +msgstr "Vidim..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "" +msgstr "Datoteke ni mogoÄe odpreti za pisanje:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "" +msgstr "Zahtevan format datoteke ni znan:" #: editor/editor_node.cpp msgid "Error while saving." -msgstr "" +msgstr "Napaka med shranjevanjem." #: editor/editor_node.cpp msgid "Can't open '%s'." -msgstr "" +msgstr "Ni mogoÄe odpreti '%s'." #: editor/editor_node.cpp msgid "Error while parsing '%s'." -msgstr "" +msgstr "Napaka pri razÄlenjevanju '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "" +msgstr "NepriÄakovan konec datoteke '%s'." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "" +msgstr "Manjka '%s' ali njegove odvisnosti." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "" +msgstr "Napaka pri nalaganju '%s'." #: editor/editor_node.cpp msgid "Saving Scene" @@ -1439,57 +1451,59 @@ msgstr "Shranjevanje Scene" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "" +msgstr "Analiziranje" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "" +msgstr "Ustvarjanje SliÄic" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "" +msgstr "Te operacije ne moremo storiti brez osnovnega drevesa." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" +"Ni mogoÄe shraniti scene. Najverjetneje odvisnosti (primeri ali dedovanja) " +"ne morejo biti izpolnjene." #: editor/editor_node.cpp msgid "Failed to load resource." -msgstr "" +msgstr "Napaka pri nalaganju vira." #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "Knjižnice Modelov ni mogoÄe naložiti za združitev!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "" +msgstr "Napaka pri shranjevanju Knjižnice Modelov!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "PloÅ¡ÄniNiz ni mogoÄe naložiti za združitev!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "" +msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "" +msgstr "Napaka pri shranjevanju postavitev!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "" +msgstr "Privzeti urejevalnik postavitev je bil prepisan." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "" +msgstr "Ime postavitve ni mogoÄe najti!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "" +msgstr "Privzeta postavitev je bila ponastavljena na osnovne nastaviteve." #: editor/editor_node.cpp msgid "" @@ -1497,18 +1511,24 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Ta vir pripada uvoženi sceni, zato ga ne moremo spreminjati.\n" +"Za boljÅ¡e razumevanje preberi dokumentacijo namenjeno za uvažanje scen." #: editor/editor_node.cpp msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it will not be kept when saving the current scene." msgstr "" +"Ta vir pripada sceni, ki je dedovana ali je primer druge.\n" +"Pri shranjevanju trenutne scene se spremembe ne bodo ohranile." #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" +"Ta vir je bil uvožen tako, da ga ne morete spreminjati. Spremenite svoje " +"nastavitve na ploÅ¡Äi za uvoz in nato znova uvozite." #: editor/editor_node.cpp msgid "" @@ -1517,6 +1537,9 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Ta scena je bila uvožena tako, da spremembe ne bodo shranjene.\n" +"Primer druge ali dedovanje bo omogoÄilo spremembe v njem.\n" +"Za boljÅ¡e razumevanje preberi dokumentacijo namenjeno za uvažanje scen." #: editor/editor_node.cpp msgid "" @@ -1524,46 +1547,48 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"To je objekt odprt na daljavo, zato spremembe v njem ne bodo shranjene.\n" +"Za boljÅ¡e razumevanje preberi dokumentacijo namenjeno razhroÅ¡Äevanju." #: editor/editor_node.cpp msgid "Expand all properties" -msgstr "" +msgstr "RazÅ¡iri vse lastnosti" #: editor/editor_node.cpp msgid "Collapse all properties" -msgstr "" +msgstr "SkrÄi vse lastnosti" #: editor/editor_node.cpp msgid "Copy Params" -msgstr "" +msgstr "Kopiraj Parametre" #: editor/editor_node.cpp msgid "Paste Params" -msgstr "" +msgstr "Prilepi Parametre" #: editor/editor_node.cpp editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" -msgstr "" +msgstr "Prilepi Vir" #: editor/editor_node.cpp msgid "Copy Resource" -msgstr "" +msgstr "Kopiraj Vir" #: editor/editor_node.cpp msgid "Make Built-In" -msgstr "" +msgstr "Naredi Vgrajeno" #: editor/editor_node.cpp msgid "Make Sub-Resources Unique" -msgstr "" +msgstr "Naredi Pod-Vire Samostojne" #: editor/editor_node.cpp msgid "Open in Help" -msgstr "" +msgstr "Odpri v PomoÄi" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "" +msgstr "Ni doloÄene scene za zagon." #: editor/editor_node.cpp msgid "" @@ -1571,6 +1596,9 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Glavna scena ni bila doloÄena, izberem eno?\n" +"Kasneje jo lahko spremeniÅ¡ v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "" @@ -1578,6 +1606,9 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Izbrana scena '%s' ne obstaja, izberem veljavno?\n" +"Kasneje jo lahko spremeniÅ¡ v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "" @@ -1585,14 +1616,17 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"Izbrana scena '%s' ni datoteka scene, izberem veljavno?\n" +"Kasneje jo lahko spremeniÅ¡ v \"Nastavitve Projekta\" pod kategorijo " +"'aplikacija'." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "" +msgstr "Trenutna scena ni bila shranjena, shranite jo pred zagonom." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "" +msgstr "Nemorem zaÄeti podprocesa!" #: editor/editor_node.cpp msgid "Open Scene" @@ -1603,76 +1637,76 @@ msgid "Open Base Scene" msgstr "Odpri Osnovno Sceno" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Hitro Odpri Sceno.." +msgid "Quick Open Scene..." +msgstr "Hitro Odpri Sceno..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Hitro Odpri Skripto.." +msgid "Quick Open Script..." +msgstr "Hitro Odpri Skripto..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Shrani & Zapri" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Shranim spremembe v '%s' pred zapiranjem?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Shrani Sceno Kot.." +msgid "Save Scene As..." +msgstr "Shrani Sceno Kot..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Ne" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Da" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Ta scena ni bila nikoli shranjena. Shranim pred zagonom?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Ta operacija ni mogoÄa brez scene." #: editor/editor_node.cpp msgid "Export Mesh Library" -msgstr "" +msgstr "Izvozi Knjižnico Modelov" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Ta operacija ni mogoÄa brez osnovnega gradnika." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "" +msgstr "Izvozi PloÅ¡Äno Zbirko" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Te operacije ne moremo storiti brez izbranega gradnika." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Trenutna scena ni shranjena. Vseeno odprem?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Ni mogoÄe osvežiti scene, ki ni bila shranjena." #: editor/editor_node.cpp msgid "Revert" -msgstr "" +msgstr "Povrni" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "" +msgstr "Tega dejanja ni mogoÄe razveljaviti. Vseeno povrni?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Hitro Zaženi Sceno.." +msgid "Quick Run Scene..." +msgstr "Hitro Zaženi Sceno..." #: editor/editor_node.cpp msgid "Quit" @@ -1680,187 +1714,200 @@ msgstr "Zapri" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "Zaprem urejevalnik?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Odprem Upravljalnik Projekta?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "Shrani & Zapri" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "" +msgstr "Shranim spremembe na sledeÄih scenah pred zaprtjem?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" +"Shranim spremembe na sledeÄih scenah pred odpiranjem Upravljalnika Projekta?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" +"Ta možnost je zastarela. Situacije, kjer je treba osvežitev prisiliti, se " +"zdaj Å¡tejejo za napako. Prosimo, prijavite." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "" +msgstr "Izberi Glavno Sceno" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" +"Ni mogoÄe omogoÄiti dodatnega vtiÄnika na: '%s'. RazÄlenjevanje " +"konfiguracije ni uspelo." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" +"Ni mogoÄe najti polja skripte za dodatni vtiÄnik na: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "" +msgstr "Ni mogoÄe naložiti dodatno skripto iz poti: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" +"Ni mogoÄe naložiti dodatno skripto iz poti: '%s' Osnovni tip ni " +"UrejevalniVtiÄnik." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" +"Ni mogoÄe naložiti dodatno skripto iz poti: '%s' Skripta ni v naÄinu orodje." #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" +"Scena '%s' je bila samodejno uvožena, zato je ni mogoÄe spremeniti.\n" +"ÄŒe želite narediti spremembe, lahko ustvarite novo podedovano sceno." #: editor/editor_node.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ugh" -msgstr "" +msgstr "Uh" #: editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" +"Napaka pri nalaganju prizora, zato ker ni znotraj poti projekta. Uporabite " +"'Uvoz', da odprete prizor in ga nato shranite znotraj poti projekta." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "" +msgstr "Prizor '%s' ima pretrgane odvisnosti:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" -msgstr "PoÄisti Nedavne Scene" +msgstr "PoÄisti Nedavne Prizore" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "" +msgstr "Shrani Postavitev" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "" +msgstr "IzbriÅ¡i Postavitev" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp msgid "Default" -msgstr "" +msgstr "Prevzeto" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "" +msgstr "Preklopi na zavihek Prizor" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "" +msgstr "%d veÄ datotek ali map" #: editor/editor_node.cpp msgid "%d more folders" -msgstr "" +msgstr "%d veÄ map" #: editor/editor_node.cpp msgid "%d more files" -msgstr "" +msgstr "%d veÄ datotek" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "" +msgstr "Položaj Sidranja" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "" +msgstr "NaÄin Brez Motenj" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "" +msgstr "Preklop naÄin pisanja brez motenj." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "Dodaj novo Sceno." +msgstr "Dodaj nov Prizor." #: editor/editor_node.cpp msgid "Scene" -msgstr "Scena" +msgstr "Prizor" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "Pojdite na predhodno odprte scene." +msgstr "Pojdi na predhodno odprti prizor." #: editor/editor_node.cpp msgid "Next tab" -msgstr "" +msgstr "Naslednji zavihek" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "" +msgstr "PrejÅ¡nji zavihek" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "" +msgid "Filter Files..." +msgstr "Filtriraj datoteke..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "" +msgstr "Operacije z datotekami prizora." #: editor/editor_node.cpp msgid "New Scene" -msgstr "Nova Scena" +msgstr "Nov Prizor" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Nova Podedovana Scena.." +msgid "New Inherited Scene..." +msgstr "Nov Podedovan Prizor..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Odpri Sceno.." +msgid "Open Scene..." +msgstr "Odpri Prizor..." #: editor/editor_node.cpp msgid "Save Scene" -msgstr "Shrani Sceno" +msgstr "Shrani Prizor" #: editor/editor_node.cpp msgid "Save all Scenes" -msgstr "Shrani vse Scene" +msgstr "Shrani vse Prizore" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "Zapri Sceno" +msgstr "Zapri Prizor" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "Odpri Nedavno" +msgstr "Odpri Nedavne" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Pretvori V.." +msgid "Convert To..." +msgstr "Pretvori V..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "" +msgid "MeshLibrary..." +msgstr "Knjižnica Modelov..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -1875,11 +1922,11 @@ msgstr "Ponovi" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "Povrni Sceno" +msgstr "Povrni Prizor" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "" +msgstr "RazliÄna projektna ali prizorska orodja." #: editor/editor_node.cpp msgid "Project" @@ -1891,7 +1938,7 @@ msgstr "Nastavitve Projekta" #: editor/editor_node.cpp msgid "Run Script" -msgstr "" +msgstr "Zaženi Skripto" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" @@ -1918,6 +1965,8 @@ msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" +"Pri izvažanju ali uvajanju se bo konÄna izvrÅ¡ljiva datoteka razhroÅ¡Äevala, " +"tako da se bo skuÅ¡ala povezati z IP-jem tega raÄunalnika." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" @@ -1932,30 +1981,39 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" +"Ko je ta možnost omogoÄena, se bo pri izvozu ali uvajanju ustvarila " +"minimalna izvrÅ¡ljiva datoteka.\n" +"DatoteÄni sistem bo iz projekta zagotovljen z urejevalnikom preko omrežja.\n" +"Na Androidu bo uvajanje zaradi hitrejÅ¡ega delovanja potekalo preko kabla " +"USB. Ta možnost pospeÅ¡i testiranje iger z velikim odtisom." #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "" +msgstr "Vidne Oblike Trka" #: editor/editor_node.cpp msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" +"Gradniki oblike trka in prikaz žarka (za 2D in 3D) bodo vidni pri poteku " +"igre, Äe je ta možnost vklopljena." #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Vidna Navigacija" #: editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" +"ÄŒe je ta možnost vkljuÄena, bodo navigacijske oblike in poligoni vidni pri " +"poteku igre." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "" +msgstr "Usklajuj Spremembe Prizora" #: editor/editor_node.cpp msgid "" @@ -1964,10 +2022,12 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Ko je ta možnost vkljuÄena, bodo vse spremebe v prizoru ali urejevalniku " +"ponovljene med potekom igre." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "" +msgstr "Usklajuj Spremembe Skript" #: editor/editor_node.cpp msgid "" @@ -1976,6 +2036,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"ÄŒe je ta možnost vkljuÄena, bo vsaka shranjena skripta ponovno naložena v " +"igro, ki se izvaja.\n" +"ÄŒe se uporablja napravo na daljavo, je to bolj uÄinkovito pri omrežnem " +"datoteÄnem sistemu." #: editor/editor_node.cpp msgid "Editor" @@ -1983,19 +2047,19 @@ msgstr "Urejevalnik" #: editor/editor_node.cpp editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "" +msgstr "Nastavitve Urejevalnika" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "" +msgstr "Postavitev Urejevalnika" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "" +msgstr "Preklopi na Celozaslonski NaÄin" #: editor/editor_node.cpp editor/project_export.cpp msgid "Manage Export Templates" -msgstr "" +msgstr "Upravljaj Izvozne Predloge" #: editor/editor_node.cpp msgid "Help" @@ -2003,7 +2067,7 @@ msgstr "PomoÄ" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Classes" -msgstr "" +msgstr "Razredi" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2014,119 +2078,119 @@ msgstr "Iskanje" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Online Docs" -msgstr "" +msgstr "Spletna Dokumentacija" #: editor/editor_node.cpp msgid "Q&A" -msgstr "" +msgstr "V&O" #: editor/editor_node.cpp msgid "Issue Tracker" -msgstr "" +msgstr "Sledilnik Napak" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "" +msgstr "Skupnost" #: editor/editor_node.cpp msgid "About" -msgstr "" +msgstr "O Programu" #: editor/editor_node.cpp msgid "Play the project." -msgstr "" +msgstr "Zaženi projekt." #: editor/editor_node.cpp msgid "Play" -msgstr "" +msgstr "Zaženi" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "" +msgstr "Zaustavi prizor" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "" +msgstr "Zaustavi prizor" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "" +msgstr "Ustavi Prizor." #: editor/editor_node.cpp msgid "Stop" -msgstr "" +msgstr "Ustavi" #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "" +msgstr "Zaženi prizor u urejanju." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Zaženi Prizor" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "" +msgstr "Zaženi prizor po meri" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "" +msgstr "Zaženi Prizor po Meri" #: editor/editor_node.cpp msgid "Spins when the editor window repaints!" -msgstr "" +msgstr "Vrti se ob spremembi okna urejevalnika!" #: editor/editor_node.cpp msgid "Update Always" -msgstr "" +msgstr "Posodobi Vedno" #: editor/editor_node.cpp msgid "Update Changes" -msgstr "" +msgstr "Posodobi Spremembe" #: editor/editor_node.cpp msgid "Disable Update Spinner" -msgstr "" +msgstr "OnemogoÄi Posodobitve Kolesca" #: editor/editor_node.cpp msgid "Inspector" -msgstr "" +msgstr "Nadzornik" #: editor/editor_node.cpp msgid "Create a new resource in memory and edit it." -msgstr "" +msgstr "Ustvari nov vir v pomnilniku in ga uredi." #: editor/editor_node.cpp msgid "Load an existing resource from disk and edit it." -msgstr "" +msgstr "Naloži obstojeÄi vir iz spomina in ga uredi." #: editor/editor_node.cpp msgid "Save the currently edited resource." -msgstr "" +msgstr "Shrani trenutno urejani vir." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "" +msgid "Save As..." +msgstr "Shrani Kot..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." -msgstr "" +msgstr "Pojdi na prejÅ¡nji urejani objekt v zgodovini." #: editor/editor_node.cpp msgid "Go to the next edited object in history." -msgstr "" +msgstr "Pojdi na naslednji urejani objekt v zgodovini." #: editor/editor_node.cpp msgid "History of recently edited objects." -msgstr "" +msgstr "Zgodovina nedavno urejanih objektov." #: editor/editor_node.cpp msgid "Object properties." -msgstr "" +msgstr "Lastnosti objekta." #: editor/editor_node.cpp msgid "Changes may be lost!" -msgstr "" +msgstr "Spremembe se lahko izgubijo!" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/project_manager.cpp @@ -2135,7 +2199,7 @@ msgstr "Uvozi" #: editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Gradnik" #: editor/editor_node.cpp msgid "FileSystem" @@ -2147,521 +2211,526 @@ msgstr "Izhod" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "" +msgstr "Ne Shrani" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Uvozi Predloge iz ZIP Datoteke" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" -msgstr "" +msgstr "Izvozi Projekt" #: editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Izvozi Knjižnico" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "" +msgstr "Spoji z ObstojeÄim" #: editor/editor_node.cpp msgid "Password:" -msgstr "" +msgstr "Geslo:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Odpri & Zaženi Skripto" #: editor/editor_node.cpp msgid "New Inherited" -msgstr "" +msgstr "Novo Podedovano" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "" +msgstr "Napake pri Nalaganju" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "" +msgstr "Izberi" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "" +msgstr "Odpri 2D Urejevalnik" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "" +msgstr "Odpri 3D Urejevalnik" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "" +msgstr "Odpri Urejevalnik Skript" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Odprite Asset Library" +msgstr "Odpri Knjižnico Dodatkov" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "" +msgstr "Odpri naslednji Urejevalnik" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "" +msgstr "Odpri prejÅ¡nji Urejevalnik" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "" +msgstr "Ustvari Predogled Modela" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "" +msgid "Thumbnail..." +msgstr "SliÄica..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "" +msgstr "NameÅ¡Äeni VtiÄniki:" #: editor/editor_plugin_settings.cpp msgid "Update" -msgstr "" +msgstr "Posodobi" #: editor/editor_plugin_settings.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Version:" -msgstr "" +msgstr "RazliÄica:" #: editor/editor_plugin_settings.cpp msgid "Author:" -msgstr "" +msgstr "Avtor:" #: editor/editor_plugin_settings.cpp msgid "Status:" -msgstr "" +msgstr "Stanje:" #: editor/editor_profiler.cpp msgid "Stop Profiling" -msgstr "" +msgstr "Ustavi Modeliranje" #: editor/editor_profiler.cpp msgid "Start Profiling" -msgstr "" +msgstr "ZaÄni Modeliranje" #: editor/editor_profiler.cpp msgid "Measure:" -msgstr "" +msgstr "Mera:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Okvirni ÄŒas (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" -msgstr "" +msgstr "PovpreÄni ÄŒas (sek)" #: editor/editor_profiler.cpp msgid "Frame %" -msgstr "" +msgstr "Okvir %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "" +msgstr "Fizikalni Okvir %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" -msgstr "" +msgstr "ÄŒas:" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "" +msgstr "VkljuÄno" #: editor/editor_profiler.cpp msgid "Self" -msgstr "" +msgstr "Samo" #: editor/editor_profiler.cpp msgid "Frame #:" -msgstr "" +msgstr "Okvir #:" #: editor/editor_profiler.cpp msgid "Time" -msgstr "" +msgstr "ÄŒas" #: editor/editor_profiler.cpp msgid "Calls" -msgstr "" +msgstr "Klici" #: editor/editor_run_native.cpp msgid "Select device from the list" -msgstr "" +msgstr "Izberite napravo s seznama" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" +"Za to platformo ni mogoÄe najti obstojeÄih izvoznih nastavitev.\n" +"V izvoznem meniju dodajte svoje nastavitve." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "NapiÅ¡ite svojo logiko v metodi _run() ." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Tu že obstaja prizor v urejanju." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Ni mogoÄe ustvariti primera skripte:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Ali si pozabil kljuÄno besedo 'orodje'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Ni mogoÄe zagnati skripte:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Ali si pozabil metodo '_run' ?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" -msgstr "" +msgstr "Privzeto (Enako kot Urejevalnik)" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "" +msgstr "Izberi Gradnik(e) za Uvoz" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Pot Prizora:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Uvozi iz Gradnika:" #: editor/export_template_manager.cpp msgid "Re-Download" -msgstr "" +msgstr "Ponovno Prenesi" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "" +msgstr "Odstrani" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "" +msgstr "(NameÅ¡Äeno)" #: editor/export_template_manager.cpp msgid "Download" -msgstr "" +msgstr "Prenesi" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(ManjkajoÄe)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "" +msgstr "(Trenutno)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "" +msgid "Retrieving mirrors, please wait..." +msgstr "Pridobivanje virov, poÄakajte..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "ŽeliÅ¡ odstraniti predlogo razliÄice '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "" +msgstr "Ne morem odpreti zip izvozne predloge." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates." -msgstr "" +msgstr "Neveljaven format version.txt znotraj predloge." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "" +msgstr "Datoteke version.txt ni v predlogi." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "" +msgstr "Napaka pri ustvarjanju poti za predloge:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "" +msgstr "RazÅ¡irjanje Izvoznih Predlog" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "Uvažanje:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Za to razliÄico ni mogoÄe najti linkov za prenos. Neposredni prenos je na " +"voljo samo za uradne izdaje." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Ni mogoÄe razreÅ¡iti." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "" +msgstr "NemogoÄe se je povezati." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Ni odgovora." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request Failed." -msgstr "" +msgstr "Zahteva Ni Uspela." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Preusmeritev Zanke." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "Spodletelo:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Prenos je DokonÄan." #: editor/export_template_manager.cpp msgid "Error requesting url: " -msgstr "" +msgstr "Napaka pri zahtevi URL-ja: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "" +msgid "Connecting to Mirror..." +msgstr "Povezovanje z Virom..." #: editor/export_template_manager.cpp msgid "Disconnected" -msgstr "" +msgstr "Nepovezano" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "RazreÅ¡evanje" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Ni MogoÄe RazreÅ¡iti" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "" +msgid "Connecting..." +msgstr "Povezovanje..." #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "" +msgstr "NemogoÄe se je Povezati" #: editor/export_template_manager.cpp msgid "Connected" -msgstr "" +msgstr "Povezano" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "" +msgid "Requesting..." +msgstr "Zahtevam..." #: editor/export_template_manager.cpp msgid "Downloading" -msgstr "" +msgstr "PrenaÅ¡anje" #: editor/export_template_manager.cpp msgid "Connection Error" -msgstr "" +msgstr "Napaka Pri Povezavi" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Napaka Pri Usklanjevanju SSH" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Trenutna RazliÄica:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "NameÅ¡Äene RazliÄice:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Namesti Iz Datoteke" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Predlogo" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "" +msgstr "Izberi datoteko predloge" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "" +msgstr "Izvozni Upravitelj Predlog" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Odstrani Spremenljivko" +msgstr "Prenesi Predloge" #: editor/export_template_manager.cpp msgid "Select mirror from list: " -msgstr "" +msgstr "Izberi vire s seznama: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" +"Za pisanje ni mogoÄe odpreti file_type_cache.cch, ne da bi shranili " +"predpomnilnik tipa datoteke!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" +"Ne morem se postaviti na mesto '%s', ker ni bilo najdeno v datoteÄnem " +"sistemu!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "" +msgstr "Oglejte si elemente, kot mrežo sliÄic" #: editor/filesystem_dock.cpp msgid "View items as a list" -msgstr "" +msgstr "Oglejte si elemente v seznamu" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" +"Stanje: Uvoz datoteke ni uspel. Popravi datoteko in ponovno roÄno uvozi." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "" +msgstr "Ni mogoÄe premakniti/preimenovati osnovne vire." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "Mape ni mogoÄe premakniti vase." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Napaka naložitve pisave." +msgstr "Napaka pri premikanju:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Preimenuj Spremenljivko" +msgstr "Napaka pri podvajanju:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "" +msgstr "Odvisnosti ni mogoÄe posodobiti:" #: editor/filesystem_dock.cpp msgid "No name provided" -msgstr "" +msgstr "Ime ni na voljo" #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters" -msgstr "" +msgstr "VneÅ¡eno ime vsebuje neveljavne znake" #: editor/filesystem_dock.cpp msgid "No name provided." -msgstr "" +msgstr "Ime ni doloÄeno." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "" +msgstr "Ime vsebuje neveljavne znake." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "Datoteka ali mapa s tem imenom že obstaja." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Preimenuj Spremenljivko" +msgstr "Preimenovanje Datoteke:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "Preimenovanje mape:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Preimenuj Spremenljivko" +msgstr "Podvajanje datoteke:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "" +msgstr "Podvajanje mape:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "" +msgstr "RazÅ¡iri vse" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "" +msgstr "SkrÄi vse" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "" +msgid "Rename..." +msgstr "Preimenuj..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "" +msgid "Move To..." +msgstr "Premakni V..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" -msgstr "" +msgstr "Odpri Prizor(e)" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "" +msgstr "Primer" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "" +msgid "Edit Dependencies..." +msgstr "Uredi Odvisnosti..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "" +msgid "View Owners..." +msgstr "Poglej Lastnike..." #: editor/filesystem_dock.cpp -#, fuzzy -msgid "Duplicate.." -msgstr "Podvoji Izbrano" +msgid "Duplicate..." +msgstr "Podvoji..." #: editor/filesystem_dock.cpp msgid "Previous Directory" -msgstr "" +msgstr "PrejÅ¡na Mapa" #: editor/filesystem_dock.cpp msgid "Next Directory" -msgstr "" +msgstr "Naslednja Mapa" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Ponovno Preglej DatoteÄni Sistem" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "" +msgstr "Nastavi mapo status kot Priljubljeno" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." msgstr "" +"Naredi primer iz izbranih prizorov, ki bo naslednik izbranega gradnika." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" +"Pregledovanje Datotek,\n" +"Prosimo, PoÄakajte..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2674,120 +2743,120 @@ msgstr "Preimenuj" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Dodaj v Skupino" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Odstrani iz Skupine" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Uvozi kot En Prizor" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Uvozi z LoÄenimi Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Uvozi z LoÄenimi Materiali" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Uvozi z LoÄenimi Objekti" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Uvozi z LoÄenimi Objekti+Materiali" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Uvozi z LoÄenimi Objekti+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Uvozi z LoÄenimi Materiali+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Uvozi z LoÄenimi Objekti+Materiali+Animacijami" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Uvozi kot VeÄ Prizorov" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Uvozi kot VeÄkratnik Prizorov+Materialov" #: editor/import/resource_importer_scene.cpp #: editor/plugins/cube_grid_theme_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Uvozi Prizor" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "" +msgid "Importing Scene..." +msgstr "Uvažanje Prizora..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "Ustvarjanje Svetlobnih Kart" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "Ustvarjanje za Model: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "" +msgid "Running Custom Script..." +msgstr "Izvajanje Skripte Po Meri..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "" +msgstr "Skripte po uvozu ni bilo mogoÄe naložiti:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" +msgstr "Neveljavna/pokvarjena skripta za naknadno uvažanje (Glej konzolo):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "" +msgstr "Napaka pri zagonu skripte po uvozu:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "" +msgid "Saving..." +msgstr "Shranjevanje..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "" +msgstr "Nastavi kot Privzeto za '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "" +msgstr "PoÄisti privzeto za '%s'" #: editor/import_dock.cpp msgid " Files" -msgstr "" +msgstr " Datoteke" #: editor/import_dock.cpp msgid "Import As:" -msgstr "" +msgstr "Uvozi Kot:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "" +msgid "Preset..." +msgstr "Prednastavitev..." #: editor/import_dock.cpp msgid "Reimport" -msgstr "" +msgstr "Ponovno Uvozi" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "" +msgstr "Niz VeÄkratnih Gradnikov" #: editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Skupine" #: editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." @@ -2831,9 +2900,8 @@ msgid "" msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Delete points" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i toÄke" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -2987,9 +3055,8 @@ msgid "Enable Onion Skinning" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "Funkcije:" +msgstr "Smeri" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" @@ -3064,9 +3131,8 @@ msgid "New name:" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Uredi Spremenljivko:" +msgstr "Uredi Filtre" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3191,7 +3257,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3199,13 +3265,12 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Približaj Animacijo" +msgstr "AnimacijskoDrevo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Free" @@ -3268,7 +3333,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3335,8 +3400,8 @@ msgid "Site:" msgstr "Stran:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "Podpora.." +msgid "Support..." +msgstr "Podpora..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3362,6 +3427,8 @@ msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" +"Brez modelov za peko. Poskrbi, da vsebujejo kanal UV2 in da je vkljuÄena " +"oznaka 'ZapeÄi Svetlobo'." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -3415,9 +3482,8 @@ msgid "Create new vertical guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove vertical guide" -msgstr "Odstrani Spremenljivko" +msgstr "Odstranite navpiÄni vodnik" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move horizontal guide" @@ -3428,9 +3494,8 @@ msgid "Create new horizontal guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove horizontal guide" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani vodoravno vodilo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create new horizontal and vertical guides" @@ -3506,9 +3571,8 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggles snapping" -msgstr "Preklopi na Zaustavitev" +msgstr "Preklopi pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Snap" @@ -3527,8 +3591,9 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "" +msgstr "Preoblikuj Zaskok..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3667,9 +3732,8 @@ msgid "Drag pivot from mouse position" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Set pivot at mouse position" -msgstr "Odstrani Signal" +msgstr "Nastavite toÄko na položaj miÅ¡ke" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -3778,14 +3842,12 @@ msgid "Load Curve Preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add point" -msgstr "Dodaj Signal" +msgstr "Dodaj toÄko" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove point" -msgstr "Odstrani Signal" +msgstr "Odstrani toÄko" #: editor/plugins/curve_editor_plugin.cpp msgid "Left linear" @@ -3800,9 +3862,8 @@ msgid "Load preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Curve Point" -msgstr "Odstrani Signal" +msgstr "Odstrani Krivuljno ToÄko" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -3869,11 +3930,11 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "" +msgstr "Model je prazen!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "" +msgstr "Ustvari StatiÄno Telo TriModel" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" @@ -3952,7 +4013,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4157,7 +4218,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4336,19 +4397,16 @@ msgid "Curve Point #" msgstr "" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Položaj Krivuljne ToÄke" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Krivuljo na Položaj" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "Odstrani Signal" +msgstr "Nastavi Krivuljo iz Položaja" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -4359,9 +4417,8 @@ msgid "Remove Path Point" msgstr "" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Remove Out-Control Point" -msgstr "Odstrani Funkcijo" +msgstr "Odstrani ToÄko Izven Nadzora" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" @@ -4522,7 +4579,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4602,9 +4659,8 @@ msgid "Close Docs" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close All" -msgstr "Zapri" +msgstr "Zapri Vse" #: editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -4620,7 +4676,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4745,9 +4801,8 @@ msgid "Select All" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i Vrstico" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -4762,9 +4817,8 @@ msgid "Toggle Comment" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Fold/Unfold Line" -msgstr "IzbriÅ¡i Izbrano" +msgstr "Pregibna/Nepregibna ÄŒrta" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" @@ -4828,15 +4882,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5028,9 +5082,8 @@ msgid "Material Changes" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes" -msgstr "Spremeni" +msgstr "Spremebe v Shader" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" @@ -5267,9 +5320,8 @@ msgid "Align Selection With View" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "IzbriÅ¡i Izbrano" +msgstr "Izbira Orodja" #: editor/plugins/spatial_editor_plugin.cpp msgid "Tool Move" @@ -5284,21 +5336,16 @@ msgid "Tool Scale" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Freelook" -msgstr "Preklopi na Zaustavitev" +msgstr "Preklopi Svobodni Pregled" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform" msgstr "Preoblikovanje" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Preoblikuj Zaskok.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Preoblikovanje Dialoga.." +msgid "Transform Dialog..." +msgstr "Preoblikovanje Dialoga..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5542,17 +5589,15 @@ msgid "Remove Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Items" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Vse Stvari" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All" -msgstr "Odstrani Signal" +msgstr "Odstrani Vse" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5620,7 +5665,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5776,9 +5821,8 @@ msgid "" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Select current edited sub-tile." -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi trenutno pod-ploÅ¡Äo v urejanju." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select sub-tile to change its priority." @@ -5809,7 +5853,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5899,6 +5943,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Ime Projekta:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -5933,9 +5982,8 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Rename Project" -msgstr "Preimenuj Funkcijo" +msgstr "Preimenuj Projekt" #: editor/project_manager.cpp msgid "New Game Project" @@ -6088,8 +6136,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6117,7 +6165,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6213,9 +6261,8 @@ msgid "Wheel Down." msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Dodaj Getter Lastnost" +msgstr "Dodaj Globalno Lastnost" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" @@ -6230,9 +6277,8 @@ msgid "Setting '%s' is internal, and it can't be deleted." msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "IzbriÅ¡i Izbrano" +msgstr "IzbriÅ¡i Predmet" #: editor/project_settings_editor.cpp msgid "Already existing" @@ -6303,7 +6349,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6399,11 +6445,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6411,9 +6457,8 @@ msgid "Assign" msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi Gradnik" #: editor/property_editor.cpp msgid "New Script" @@ -6468,9 +6513,8 @@ msgid "Properties:" msgstr "" #: editor/property_selector.cpp -#, fuzzy msgid "Select Property" -msgstr "Dodaj Setter Lastnost" +msgstr "Izberi Lastnost" #: editor/property_selector.cpp msgid "Select Virtual Method" @@ -6576,7 +6620,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -6692,9 +6736,8 @@ msgid "Clear a script for the selected node." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "Odstrani Signal" +msgstr "Upravljalnik" #: editor/scene_tree_dock.cpp msgid "Local" @@ -6823,18 +6866,16 @@ msgid "Wrong extension chosen" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr ": Neveljavni argumenti: " +msgstr "Neveljavna Pot" #: editor/script_create_dialog.cpp msgid "Invalid class name" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path" -msgstr "Neveljaven indeks lastnosti imena." +msgstr "Neveljaveno prevzeto ime ali pot nadrejenega" #: editor/script_create_dialog.cpp msgid "Script valid" @@ -6869,9 +6910,8 @@ msgid "Class Name" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Odstrani Spremenljivko" +msgstr "Predloga" #: editor/script_create_dialog.cpp msgid "Built-in Script" @@ -6882,9 +6922,8 @@ msgid "Attach Node Script" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Odstrani Signal" +msgstr "Upravljalnik " #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -7075,9 +7114,8 @@ msgid "Select dependencies of the library for this entry" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Odstrani Signal" +msgstr "Odstrani trenutni vnos" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -7191,9 +7229,8 @@ msgid "Floor:" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "IzbriÅ¡i Izbrano" +msgstr "GridMap IzbriÅ¡i Izbor" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -7272,9 +7309,8 @@ msgid "Erase Area" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "IzbriÅ¡i Izbrano" +msgstr "PoÄisti izbrano" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -7345,8 +7381,8 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"VozliÅ¡Äe se je ustavilo brez delovnega spomina! Prosimo preberite si v " -"dokumentaciji, kako pravilno ustaviti vozliÅ¡Äe." +"Gradnik je bil ustavljen brez delovnega spomina, v dokumentaciji si " +"preberite kako ga pravilno ustaviti!" #: modules/visual_script/visual_script.cpp msgid "" @@ -7378,9 +7414,8 @@ msgid "Stack overflow with stack depth: " msgstr "Sklad prepoln z stack depth: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Uredi Argumente Signala:" +msgstr "Spremeni Argumente Signala" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" @@ -7395,9 +7430,8 @@ msgid "Set Variable Default Value" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Uredi Spremenljivko:" +msgstr "Nastavite Tip Spremenljivke" #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" @@ -7448,9 +7482,8 @@ msgid "Add Node" msgstr "Dodaj vozliÅ¡Äe" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Gradnike VizualnaSkripta" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" @@ -7485,9 +7518,8 @@ msgid "Add Preload Node" msgstr "Dodaj prednaloženo vozliÅ¡Äe" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s) From Tree" -msgstr "Dodaj vozliÅ¡Äe(a) iz drevesa" +msgstr "Dodaj Gradnik(e) iz Drevesa" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -7498,18 +7530,16 @@ msgid "Add Setter Property" msgstr "Dodaj Setter Lastnost" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Osnovni Tip:" +msgstr "Spremeni Osnovni Tip" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Odstrani Spremenljivko" +msgstr "Odstrani Gradnik VizualnaSkripta" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" @@ -7572,18 +7602,16 @@ msgid "Remove Function" msgstr "Odstrani Funkcijo" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Variable" -msgstr "Uredi Spremenljivko:" +msgstr "Uredi Spremenljivko" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" msgstr "Odstrani Spremenljivko" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Signal" -msgstr "Urejanje Signala:" +msgstr "Uredi Signal" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" @@ -7710,9 +7738,8 @@ msgid "Could not open template for export:" msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Neveljaven indeks lastnosti imena." +msgstr "Neveljavna izvozna predloga:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 2c2b1eb001..fbfc998111 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -500,7 +500,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Повежи '%s' Ñа '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "Повежи..." #: editor/connections_dialog.cpp @@ -925,11 +925,11 @@ msgid "Move Audio Bus" msgstr "Помери звучни баÑ" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "Сачувај раÑпоред звучног баÑа као..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "Локација за нови раÑпоред..." #: editor/editor_audio_buses.cpp @@ -1065,11 +1065,11 @@ msgid "Updating Scene" msgstr "Ðжурирање Ñцене" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "Чувам локалне промене..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "Ðжурирам Ñцену..." #: editor/editor_data.cpp @@ -1140,7 +1140,7 @@ msgid "Show In File Manager" msgstr "Покажи у менаџеру датотека" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "Ðови директоријум..." #: editor/editor_file_dialog.cpp @@ -1411,12 +1411,12 @@ msgid "Error saving resource!" msgstr "Грешка при чувању реÑурÑа!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "Сачувај реÑÑƒÑ€Ñ ÐºÐ°Ð¾..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "Разумем..." #: editor/editor_node.cpp @@ -1645,11 +1645,11 @@ msgid "Open Base Scene" msgstr "Отвори базну Ñцену" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "Брзо отварање Ñцене..." #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "Брзо отварање Ñкриптице..." #: editor/editor_node.cpp @@ -1661,7 +1661,7 @@ msgid "Save changes to '%s' before closing?" msgstr "Сачувај промене '%s' пре излаÑка?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "Сачувај Ñцену као..." #: editor/editor_node.cpp @@ -1713,7 +1713,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Ова акција Ñе не може опозвати. ÐаÑтави?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "Брзо покретање Ñцене..." #: editor/editor_node.cpp @@ -1869,7 +1869,7 @@ msgid "Previous tab" msgstr "Претходни таб" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Филтрирај датотеке..." #: editor/editor_node.cpp @@ -1881,11 +1881,11 @@ msgid "New Scene" msgstr "Ðова Ñцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "Ðова наÑлеђена Ñцена..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "Отвори Ñцену..." #: editor/editor_node.cpp @@ -1905,15 +1905,15 @@ msgid "Open Recent" msgstr "Отвори недавно коришћено" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "Конвертуј у..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2177,7 +2177,7 @@ msgid "Save the currently edited resource." msgstr "Сачувај тренутно измењени реÑурÑ." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Сачувај као..." #: editor/editor_node.cpp @@ -2286,7 +2286,7 @@ msgid "Creating Mesh Previews" msgstr "Ðаправи приказ мрежа" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "Сличица..." #: editor/editor_plugin_settings.cpp @@ -2441,7 +2441,7 @@ msgid "(Current)" msgstr "(Тренутно)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "Прихватам одредишта, молим Ñачекајте..." #: editor/export_template_manager.cpp @@ -2521,7 +2521,7 @@ msgid "Error requesting url: " msgstr "Грешка при захтеву url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "Повезивање Ñа одредиштем..." #: editor/export_template_manager.cpp @@ -2538,7 +2538,7 @@ msgstr "Ðе могу решити" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "Повезивање..." #: editor/export_template_manager.cpp @@ -2552,7 +2552,7 @@ msgstr "Повезан" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Захтевање..." #: editor/export_template_manager.cpp @@ -2696,11 +2696,11 @@ msgid "Collapse all" msgstr "Умањи Ñве" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Преименуј..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Помери у..." #: editor/filesystem_dock.cpp @@ -2713,16 +2713,16 @@ msgid "Instance" msgstr "Додај инÑтанцу" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "Измени завиÑноÑти..." #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "Погледај влаÑнике..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Дуплирај" #: editor/filesystem_dock.cpp @@ -2748,7 +2748,7 @@ msgstr "Ðаправи Ñледећу Ñцену/е као дете одабра #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Скенирање датотека,\n" "Молим Ñачекајте..." @@ -2816,7 +2816,7 @@ msgid "Import Scene" msgstr "Увези Ñцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Увожење Ñцеене..." #: editor/import/resource_importer_scene.cpp @@ -2830,7 +2830,7 @@ msgid "Generating for Mesh: " msgstr "ГенериÑање оÑног поравнаног граничниог оквира (AABB)" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "Обрађивање Ñкриптице..." #: editor/import/resource_importer_scene.cpp @@ -2846,7 +2846,7 @@ msgid "Error running post-import script:" msgstr "Грешка при обрађивању поÑÑ‚-увозне Ñкриптице:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Чување..." #: editor/import_dock.cpp @@ -2866,7 +2866,7 @@ msgid "Import As:" msgstr "Увези као:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "ПоÑтавке..." #: editor/import_dock.cpp @@ -3284,7 +3284,7 @@ msgid "Transition Node" msgstr "Transition чвор" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "Увези анимације..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3292,7 +3292,7 @@ msgid "Edit Node Filters" msgstr "Измени филтере чвора" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Филтери..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3361,7 +3361,7 @@ msgid "Fetching:" msgstr "Преузимање:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Решавање..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3428,7 +3428,7 @@ msgid "Site:" msgstr "Веб Ñтраница:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Подршка..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3618,6 +3618,7 @@ msgid "Use Rotation Snap" msgstr "КориÑти лепљење ротације" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ПоÑтавке лепљења..." @@ -4045,7 +4046,7 @@ msgid "Create Convex Collision Sibling" msgstr "Ðаправи конвекÑног Ñударног брата" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "Ðаправи ивичну мрежу..." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4253,7 +4254,7 @@ msgid "Error loading image:" msgstr "Грешка при учитавању Ñлике:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "У Ñлици нема пикÑела Ñа транÑпарентношћу већом од 128..." #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4618,7 +4619,7 @@ msgid "Import Theme" msgstr "Увези тему" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Сачувај тему као..." #: editor/plugins/script_editor_plugin.cpp @@ -4717,7 +4718,7 @@ msgstr "Прикажи панел Ñкриптица" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "Тражи..." #: editor/plugins/script_editor_plugin.cpp @@ -4928,15 +4929,15 @@ msgid "Find Previous" msgstr "Ðађи претходни" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "Замени..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "Иди на функцију..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "Иди на линију..." #: editor/plugins/script_text_editor.cpp @@ -5393,11 +5394,7 @@ msgid "Transform" msgstr "ТранÑформација" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Конфигуриши лепљење..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Прозор транÑформације..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5653,7 +5650,7 @@ msgid "Remove All" msgstr "Обриши Ñве" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Измени тему..." #: editor/plugins/theme_editor_plugin.cpp @@ -5725,7 +5722,8 @@ msgid "Options" msgstr "Опција" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Има,много,неколико,опција!" #: editor/plugins/theme_editor_plugin.cpp @@ -5924,7 +5922,7 @@ msgid "Presets" msgstr "ПоÑтавке" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Додај..." #: editor/project_export.cpp @@ -6020,6 +6018,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Ðеважеће име." + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "ÐеуÑпех при прављењу директоријума." @@ -6209,8 +6212,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6238,7 +6241,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6423,7 +6426,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6519,11 +6522,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6695,7 +6698,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index d7cb85af1b..975418d4fb 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-25 14:41+0000\n" +"PO-Revision-Date: 2018-05-15 08:41+0000\n" "Last-Translator: Milos Ponjavusic <brane@branegames.com>\n" "Language-Team: Serbian (latin) <https://hosted.weblate.org/projects/godot-" "engine/godot/sr_Latn/>\n" @@ -215,7 +215,7 @@ msgstr "Animacija dodaj kljuÄ" #: editor/animation_editor.cpp msgid "Change Anim Len" -msgstr "" +msgstr "Promijeni Dužinu Animacije" #: editor/animation_editor.cpp msgid "Change Anim Loop" @@ -223,15 +223,15 @@ msgstr "" #: editor/animation_editor.cpp msgid "Anim Create Typed Value Key" -msgstr "" +msgstr "Animacija Napravit Tip Vrijednosni KljuÄ" #: editor/animation_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "Animacija Umetni" #: editor/animation_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "Animacija Skaliraj KljuÄeve" #: editor/animation_editor.cpp msgid "Anim Add Call Track" @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -905,11 +905,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1045,11 +1045,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1118,7 +1118,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1380,12 +1380,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1590,11 +1590,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1606,7 +1606,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1658,7 +1658,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1803,7 +1803,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1815,11 +1815,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1839,15 +1839,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2092,7 +2092,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2201,7 +2201,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2352,7 +2352,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2428,7 +2428,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2445,7 +2445,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2458,7 +2458,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2590,11 +2590,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2606,15 +2606,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2640,7 +2640,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2706,7 +2706,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2718,7 +2718,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2734,7 +2734,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2754,7 +2754,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3168,7 +3168,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3176,7 +3176,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3244,7 +3244,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3311,7 +3311,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3498,6 +3498,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3919,7 +3920,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4124,7 +4125,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4485,7 +4486,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4582,7 +4583,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4788,15 +4789,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5247,11 +5248,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5504,7 +5501,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5572,7 +5569,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5760,7 +5757,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5850,6 +5847,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6036,8 +6037,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6065,7 +6066,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6249,7 +6250,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6345,11 +6346,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6520,7 +6521,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 4a861d1b76..1f1b6f1397 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -3,21 +3,23 @@ # Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # -# bergmarklund <davemcgroin@gmail.com>, 2017. +# bergmarklund <davemcgroin@gmail.com>, 2017, 2018. # Christoffer Sundbom <christoffer_karlsson@live.se>, 2017. +# Jakob Sinclair <sinclair.jakob@mailbox.org>, 2018. +# . <grenoscar@gmail.com>, 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2017-12-01 23:50+0000\n" -"Last-Translator: bergmarklund <davemcgroin@gmail.com>\n" +"PO-Revision-Date: 2018-05-07 11:42+0000\n" +"Last-Translator: anonymous <>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/" "godot/sv/>\n" "Language: sv\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.18-dev\n" +"X-Generator: Weblate 3.0-dev\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -41,17 +43,16 @@ msgid "Anim Change Transform" msgstr "Anim Ändra Transformation" #: editor/animation_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "Anim Ändra Värde" +msgstr "Anim Ändra Värde PÃ¥ Tidsnyckeln" #: editor/animation_editor.cpp msgid "Anim Change Call" -msgstr "Anim Ändra Samtal" +msgstr "Anim Ändra Anrop" #: editor/animation_editor.cpp msgid "Anim Add Track" -msgstr "Lägg till spÃ¥r" +msgstr "Anim Lägg till spÃ¥r" #: editor/animation_editor.cpp msgid "Anim Duplicate Keys" @@ -59,11 +60,11 @@ msgstr "Anim Duplicera Nycklar" #: editor/animation_editor.cpp msgid "Move Anim Track Up" -msgstr "Flytta Anim SpÃ¥ra Upp" +msgstr "Flytta Anim SpÃ¥ra UppÃ¥t" #: editor/animation_editor.cpp msgid "Move Anim Track Down" -msgstr "Flytta Anim SpÃ¥r Ner" +msgstr "Flytta Anim SpÃ¥r NerÃ¥t" #: editor/animation_editor.cpp msgid "Remove Anim Track" @@ -83,16 +84,15 @@ msgstr "Anim Ändra SpÃ¥rets Interpolation" #: editor/animation_editor.cpp msgid "Anim Track Change Value Mode" -msgstr "" +msgstr "Ändra Anim SpÃ¥rets Värde Läge" #: editor/animation_editor.cpp msgid "Anim Track Change Wrap Mode" msgstr "" #: editor/animation_editor.cpp -#, fuzzy msgid "Edit Node Curve" -msgstr "Redigera Node-Kurva" +msgstr "Redigera Nodkurva" #: editor/animation_editor.cpp #, fuzzy @@ -491,7 +491,7 @@ msgstr "Skapa Funktion" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "Uppskjuten" #: editor/connections_dialog.cpp #, fuzzy @@ -531,8 +531,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Anslut '%s' till '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Anslut.." +msgid "Connect..." +msgstr "Anslut..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -733,7 +733,7 @@ msgstr "Resurser Utan Explicit Ägande:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "Föräldralös Resursutforskare" #: editor/dependency_editor.cpp msgid "Delete selected files?" @@ -988,7 +988,7 @@ msgstr "Ta bort Effekt" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "Ljud" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1022,13 +1022,13 @@ msgstr "Flytta Ljud-Buss" #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Save Audio Bus Layout As.." -msgstr "Spara Ljud-Buss Layout Som.." +msgid "Save Audio Bus Layout As..." +msgstr "Spara Ljud-Buss Layout Som..." #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Location for New Layout.." -msgstr "Plats för Ny Layout.." +msgid "Location for New Layout..." +msgstr "Plats för Ny Layout..." #: editor/editor_audio_buses.cpp #, fuzzy @@ -1193,12 +1193,12 @@ msgstr "Uppdaterar Scen" #: editor/editor_data.cpp #, fuzzy -msgid "Storing local changes.." -msgstr "Lagrar lokala ändringar.." +msgid "Storing local changes..." +msgstr "Lagrar lokala ändringar..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Uppdaterar scen.." +msgid "Updating scene..." +msgstr "Uppdaterar scen..." #: editor/editor_data.cpp #, fuzzy @@ -1276,8 +1276,8 @@ msgid "Show In File Manager" msgstr "Visa I Filhanteraren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Ny Mapp.." +msgid "New Folder..." +msgstr "Ny Mapp..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1285,7 +1285,7 @@ msgstr "Uppdatera" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "" +msgstr "Alla Erkända" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1348,7 +1348,7 @@ msgstr "Växla Läge" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Fokusera pÃ¥ Sökväg" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -1360,7 +1360,7 @@ msgstr "Flytta Favorit Ner" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" -msgstr "" +msgstr "GÃ¥ till överordnad mapp" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy @@ -1464,11 +1464,11 @@ msgstr "Signaler:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "" +msgstr "Enumerations" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "" +msgstr "Enumerations:" #: editor/editor_help.cpp #, fuzzy @@ -1570,7 +1570,7 @@ msgstr "Output:" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Projekt exporten misslyckades med följande felmeddelande %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -1578,13 +1578,13 @@ msgid "Error saving resource!" msgstr "Fel vid sparande av resurs!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Spara Resurs Som.." +msgid "Save Resource As..." +msgstr "Spara Resurs Som..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Jag förstÃ¥r.." +msgid "I see..." +msgstr "Jag förstÃ¥r..." #: editor/editor_node.cpp #, fuzzy @@ -1845,13 +1845,13 @@ msgstr "Öppna Bas-Scen" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Scene.." -msgstr "Snabböppna Scen.." +msgid "Quick Open Scene..." +msgstr "Snabböppna Scen..." #: editor/editor_node.cpp #, fuzzy -msgid "Quick Open Script.." -msgstr "Snabböppna Skript.." +msgid "Quick Open Script..." +msgstr "Snabböppna Skript..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1863,8 +1863,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Spara ändringar i '%s' innan stängning?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Spara Scen Som.." +msgid "Save Scene As..." +msgstr "Spara Scen Som..." #: editor/editor_node.cpp msgid "No" @@ -1925,8 +1925,8 @@ msgstr "Ã…tgärden kan inte Ã¥ngras. Ã…terställ ändÃ¥?" #: editor/editor_node.cpp #, fuzzy -msgid "Quick Run Scene.." -msgstr "Snabbkör Scen.." +msgid "Quick Run Scene..." +msgstr "Snabbkör Scen..." #: editor/editor_node.cpp msgid "Quit" @@ -2102,8 +2102,8 @@ msgid "Previous tab" msgstr "FöregÃ¥ende flik" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Filtrera Filer.." +msgid "Filter Files..." +msgstr "Filtrera Filer..." #: editor/editor_node.cpp #, fuzzy @@ -2116,12 +2116,12 @@ msgstr "Ny Scen" #: editor/editor_node.cpp #, fuzzy -msgid "New Inherited Scene.." -msgstr "Ny Ärvd Scen.." +msgid "New Inherited Scene..." +msgstr "Ny Ärvd Scen..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Öppna Scen.." +msgid "Open Scene..." +msgstr "Öppna Scen..." #: editor/editor_node.cpp msgid "Save Scene" @@ -2141,18 +2141,18 @@ msgid "Open Recent" msgstr "Öppna Senaste" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Konvertera Till.." +msgid "Convert To..." +msgstr "Konvertera Till..." #: editor/editor_node.cpp #, fuzzy -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp #, fuzzy -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2340,7 +2340,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Play" -msgstr "" +msgstr "Spela" #: editor/editor_node.cpp msgid "Pause the scene" @@ -2366,7 +2366,7 @@ msgstr "Spela den redigerade scenen." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "" +msgstr "Spela Scen" #: editor/editor_node.cpp msgid "Play custom scene" @@ -2412,8 +2412,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Spara Som.." +msgid "Save As..." +msgstr "Spara Som..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2526,8 +2526,8 @@ msgstr "" #: editor/editor_plugin.cpp #, fuzzy -msgid "Thumbnail.." -msgstr "Miniatyr.." +msgid "Thumbnail..." +msgstr "Miniatyr..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2564,7 +2564,7 @@ msgstr "" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" -msgstr "" +msgstr "Bildrutetid (sek)" #: editor/editor_profiler.cpp msgid "Average Time (sec)" @@ -2686,7 +2686,7 @@ msgid "(Current)" msgstr "(Nuvarande)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2767,7 +2767,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2786,8 +2786,8 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." -msgstr "Ansluter.." +msgid "Connecting..." +msgstr "Ansluter..." #: editor/export_template_manager.cpp #, fuzzy @@ -2801,7 +2801,7 @@ msgstr "Ansluten" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2951,13 +2951,13 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." -msgstr "Byt namn.." +msgid "Rename..." +msgstr "Byt namn..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To.." -msgstr "Flytta Till.." +msgid "Move To..." +msgstr "Flytta Till..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2970,17 +2970,17 @@ msgid "Instance" msgstr "Instans" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "View Owners.." -msgstr "Visa Ägare.." +msgid "View Owners..." +msgstr "Visa Ägare..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Duplicera" #: editor/filesystem_dock.cpp @@ -3007,7 +3007,7 @@ msgstr "Instansiera valda scen(er) som barn till vald Node." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -3077,8 +3077,8 @@ msgstr "Importera Scen" #: editor/import/resource_importer_scene.cpp #, fuzzy -msgid "Importing Scene.." -msgstr "Importerar Scen.." +msgid "Importing Scene..." +msgstr "Importerar Scen..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3089,7 +3089,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -3105,8 +3105,8 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "Sparar.." +msgid "Saving..." +msgstr "Sparar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -3126,7 +3126,7 @@ msgid "Import As:" msgstr "Importera Som:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3156,25 +3156,26 @@ msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly" -msgstr "" +msgstr "Redigera Polygon" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "" +msgstr "Infoga Punkt" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/collision_polygon_editor_plugin.cpp #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "" +msgstr "Redigera Polygon (ta bort punkt)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Poly And Point" -msgstr "" +msgstr "Ta bort Polygon och Punkt" #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "Create a new polygon from scratch" -msgstr "" +msgstr "Skapa ny polygon frÃ¥n grunden" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -3186,7 +3187,7 @@ msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" -msgstr "" +msgstr "Radera punkter" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -3194,7 +3195,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nytt Animationsnamn:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -3202,7 +3203,7 @@ msgstr "Ny Anim" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "Ändra Animationsnamn:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3215,11 +3216,11 @@ msgstr "Ta bort Animation" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Invalid animation name!" -msgstr "" +msgstr "ERROR: Ogiltigt animationsnamn!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: Animation name already exists!" -msgstr "" +msgstr "ERROR: Animationsnamn finns redan!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3558,8 +3559,8 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Import Animations.." -msgstr "Importera Animationer.." +msgid "Import Animations..." +msgstr "Importera Animationer..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3568,8 +3569,8 @@ msgstr "Redigera Node-Filter" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy -msgid "Filters.." -msgstr "Filter.." +msgid "Filters..." +msgstr "Filter..." #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy @@ -3638,7 +3639,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3707,7 +3708,7 @@ msgid "Site:" msgstr "Webbplats:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3895,6 +3896,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4328,7 +4330,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4497,7 +4499,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Partitioning..." -msgstr "Partitionerar.." +msgstr "Partitionerar..." #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy @@ -4542,7 +4544,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4914,8 +4916,8 @@ msgstr "Importera Tema" #: editor/plugins/script_editor_plugin.cpp #, fuzzy -msgid "Save Theme As.." -msgstr "Spara Tema Som.." +msgid "Save Theme As..." +msgstr "Spara Tema Som..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -5023,8 +5025,8 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Find.." -msgstr "Hitta.." +msgid "Find..." +msgstr "Hitta..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5244,15 +5246,15 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy -msgid "Replace.." -msgstr "Ersätt.." +msgid "Replace..." +msgstr "Ersätt..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5733,11 +5735,7 @@ msgid "Transform" msgstr "Transformera" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5999,8 +5997,8 @@ msgstr "Ta bort Alla" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy -msgid "Edit theme.." -msgstr "Redigera tema.." +msgid "Edit theme..." +msgstr "Redigera tema..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -6069,8 +6067,9 @@ msgid "Options" msgstr "Alternativ" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "Alternativ" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -6201,7 +6200,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6267,8 +6266,8 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Lägg till.." +msgid "Add..." +msgstr "Lägg till..." #: editor/project_export.cpp msgid "Resources" @@ -6362,6 +6361,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "Projektnamn:" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "Kunde inte skapa mapp." @@ -6572,8 +6576,8 @@ msgstr "Musknapp" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6602,8 +6606,8 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp #, fuzzy -msgid "Press a Key.." -msgstr "Tryck pÃ¥ en Knapp.." +msgid "Press a Key..." +msgstr "Tryck pÃ¥ en Knapp..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6791,7 +6795,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6892,11 +6896,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." -msgstr "Fil.." +msgid "File..." +msgstr "Fil..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -7082,8 +7086,8 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Save New Scene As.." -msgstr "Spara Ny Scen Som.." +msgid "Save New Scene As..." +msgstr "Spara Ny Scen Som..." #: editor/scene_tree_dock.cpp #, fuzzy diff --git a/editor/translations/ta.po b/editor/translations/ta.po index e7269ffa0e..d7910c2c87 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -496,7 +496,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -906,11 +906,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1046,11 +1046,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1119,7 +1119,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1381,12 +1381,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1591,11 +1591,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1607,7 +1607,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1659,7 +1659,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1804,7 +1804,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1816,11 +1816,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1840,15 +1840,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2093,7 +2093,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2202,7 +2202,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2353,7 +2353,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2429,7 +2429,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2446,7 +2446,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2459,7 +2459,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2591,11 +2591,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2607,16 +2607,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "அசைவூடà¯à®Ÿà¯ போலிபசà¯à®šà®¾à®µà®¿à®•ளà¯" #: editor/filesystem_dock.cpp @@ -2642,7 +2642,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2708,7 +2708,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2720,7 +2720,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2736,7 +2736,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2756,7 +2756,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3170,7 +3170,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3178,7 +3178,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3246,7 +3246,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3313,7 +3313,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3500,6 +3500,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3921,7 +3922,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4126,7 +4127,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4487,7 +4488,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4584,7 +4585,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4790,15 +4791,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5249,11 +5250,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5506,7 +5503,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5574,7 +5571,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5762,7 +5759,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5852,6 +5849,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6038,8 +6039,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6067,7 +6068,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6251,7 +6252,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6347,11 +6348,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6522,7 +6523,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/th.po b/editor/translations/th.po index 74e2270f2c..f49b08d272 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -495,8 +495,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "ลบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง '%s' à¸à¸±à¸š '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "เชื่à¸à¸¡à¹‚ยง.." +msgid "Connect..." +msgstr "เชื่à¸à¸¡à¹‚ยง..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -914,12 +914,12 @@ msgid "Move Audio Bus" msgstr "ย้าย Audio Bus" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ขà¸à¸‡ Audio Bus เป็น.." +msgid "Save Audio Bus Layout As..." +msgstr "บันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ขà¸à¸‡ Audio Bus เป็น..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸‚à¸à¸‡à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ใหม่.." +msgid "Location for New Layout..." +msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸‚à¸à¸‡à¹€à¸¥à¸¢à¹Œà¹€à¸à¸²à¸•์ใหม่..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1054,12 +1054,12 @@ msgid "Updating Scene" msgstr "à¸à¸±à¸žà¹€à¸”ทฉาà¸" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "เà¸à¹‡à¸šà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ ายใน.." +msgid "Storing local changes..." +msgstr "เà¸à¹‡à¸šà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸ ายใน..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "à¸à¸±à¸žà¹€à¸”ทฉาà¸.." +msgid "Updating scene..." +msgstr "à¸à¸±à¸žà¹€à¸”ทฉาà¸..." #: editor/editor_data.cpp msgid "[empty]" @@ -1127,8 +1127,8 @@ msgid "Show In File Manager" msgstr "à¹à¸ªà¸”งในตัวจัดà¸à¸²à¸£à¹„ฟล์" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "สร้างโฟลเดà¸à¸£à¹Œ.." +msgid "New Folder..." +msgstr "สร้างโฟลเดà¸à¸£à¹Œ..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1391,13 +1391,13 @@ msgid "Error saving resource!" msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¸œà¸´à¸”พลาด!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¹€à¸›à¹‡à¸™.." +msgid "Save Resource As..." +msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¹€à¸›à¹‡à¸™..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "ตà¸à¸¥à¸‡.." +msgid "I see..." +msgstr "ตà¸à¸¥à¸‡..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1616,12 +1616,12 @@ msgid "Open Base Scene" msgstr "เปิดไฟล์ฉาà¸à¸—ี่ใช้สืบทà¸à¸”" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "เปิดไฟล์ฉาà¸à¸”่วน.." +msgid "Quick Open Scene..." +msgstr "เปิดไฟล์ฉาà¸à¸”่วน..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "เปิดไฟล์สคริปต์ด่วน.." +msgid "Quick Open Script..." +msgstr "เปิดไฟล์สคริปต์ด่วน..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1632,8 +1632,8 @@ msgid "Save changes to '%s' before closing?" msgstr "บันทึภ'%s' à¸à¹ˆà¸à¸™à¸›à¸´à¸”โปรà¹à¸à¸£à¸¡à¸«à¸£à¸·à¸à¹„ม่?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "บันทึà¸à¸‰à¸²à¸à¹€à¸›à¹‡à¸™.." +msgid "Save Scene As..." +msgstr "บันทึà¸à¸‰à¸²à¸à¹€à¸›à¹‡à¸™..." #: editor/editor_node.cpp msgid "No" @@ -1684,8 +1684,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "à¸à¸²à¸£à¸„ืนà¸à¸¥à¸±à¸šà¹„ม่สามารถยà¸à¹€à¸¥à¸´à¸à¹„ด้ คืนà¸à¸¥à¸±à¸š?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "เริ่มฉาà¸à¸”่วน.." +msgid "Quick Run Scene..." +msgstr "เริ่มฉาà¸à¸”่วน..." #: editor/editor_node.cpp msgid "Quit" @@ -1834,8 +1834,8 @@ msgid "Previous tab" msgstr "à¹à¸—็บà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "คัดà¸à¸£à¸à¸‡à¹„ฟล์.." +msgid "Filter Files..." +msgstr "คัดà¸à¸£à¸à¸‡à¹„ฟล์..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1846,12 +1846,12 @@ msgid "New Scene" msgstr "ฉาà¸à¹ƒà¸«à¸¡à¹ˆ" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "สืบทà¸à¸”ฉาà¸à¹ƒà¸«à¸¡à¹ˆ.." +msgid "New Inherited Scene..." +msgstr "สืบทà¸à¸”ฉาà¸à¹ƒà¸«à¸¡à¹ˆ..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "เปิดไฟล์ฉาà¸.." +msgid "Open Scene..." +msgstr "เปิดไฟล์ฉาà¸..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1870,16 +1870,16 @@ msgid "Open Recent" msgstr "เปิดไฟล์ล่าสุด" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™.." +msgid "Convert To..." +msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2130,8 +2130,8 @@ msgid "Save the currently edited resource." msgstr "บันทึà¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¸—ี่à¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸±à¸šà¹à¸•่ง" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "บันทึà¸à¹€à¸›à¹‡à¸™.." +msgid "Save As..." +msgstr "บันทึà¸à¹€à¸›à¹‡à¸™..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2239,8 +2239,8 @@ msgid "Creating Mesh Previews" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸ าพตัวà¸à¸¢à¹ˆà¸²à¸‡ Mesh" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "รูปตัวà¸à¸¢à¹ˆà¸²à¸‡.." +msgid "Thumbnail..." +msgstr "รูปตัวà¸à¸¢à¹ˆà¸²à¸‡..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2392,8 +2392,8 @@ msgid "(Current)" msgstr "(ปัจจุบัน)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸µà¸¢à¸à¸‚้à¸à¸¡à¸¹à¸¥ โปรดรà¸.." +msgid "Retrieving mirrors, please wait..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸µà¸¢à¸à¸‚้à¸à¸¡à¸¹à¸¥ โปรดรà¸..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2468,8 +2468,8 @@ msgid "Error requesting url: " msgstr "ผิดพลาดขณะร้à¸à¸‡à¸‚à¸à¸—ี่à¸à¸¢à¸¹à¹ˆ: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸.." +msgid "Connecting to Mirror..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2477,7 +2477,7 @@ msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸à¸ªà¸´à¹‰à¸™à¸ªà¸¸à¸”" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา..." #: editor/export_template_manager.cpp msgid "Can't Resolve" @@ -2485,8 +2485,8 @@ msgstr "ค้นหาไม่สำเร็จ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸.." +msgid "Connecting..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2498,8 +2498,8 @@ msgstr "เชื่à¸à¸¡à¸•่à¸à¹à¸¥à¹‰à¸§" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸.." +msgid "Requesting..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2630,12 +2630,12 @@ msgid "Collapse all" msgstr "ยุบโฟลเดà¸à¸£à¹Œ" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "เปลี่ยนชื่à¸.." +msgid "Rename..." +msgstr "เปลี่ยนชื่à¸..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "ย้ายไป.." +msgid "Move To..." +msgstr "ย้ายไป..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2646,16 +2646,16 @@ msgid "Instance" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡.." +msgid "Edit Dependencies..." +msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ดูเจ้าขà¸à¸‡.." +msgid "View Owners..." +msgstr "ดูเจ้าขà¸à¸‡..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "ทำซ้ำ.." +msgid "Duplicate..." +msgstr "ทำซ้ำ..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2680,10 +2680,10 @@ msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸—ี่เลืà¸à¸à¹ƒà¸«à¹‰à¹€ #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¹„ฟล์,\n" -"à¸à¸£à¸¸à¸“ารà¸.." +"à¸à¸£à¸¸à¸“ารà¸..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2748,8 +2748,8 @@ msgid "Import Scene" msgstr "นำเข้าฉาà¸" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸™à¸³à¹€à¸‚้าฉาà¸.." +msgid "Importing Scene..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸™à¸³à¹€à¸‚้าฉาà¸..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2760,8 +2760,8 @@ msgid "Generating for Mesh: " msgstr "สร้างสำหรับพื้นผิว: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸™à¸ªà¸„ริปต์.." +msgid "Running Custom Script..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸™à¸ªà¸„ริปต์..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2776,8 +2776,8 @@ msgid "Error running post-import script:" msgstr "ผิดพลาดขณะรันสคริปต์หลังนำเข้า:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸.." +msgid "Saving..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2796,8 +2796,8 @@ msgid "Import As:" msgstr "นำเข้าเป็น:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "à¹à¸šà¸š.." +msgid "Preset..." +msgstr "à¹à¸šà¸š..." #: editor/import_dock.cpp msgid "Reimport" @@ -3214,16 +3214,16 @@ msgid "Transition Node" msgstr "โหนดทรานสิชัน" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "นำเข้าà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™.." +msgid "Import Animations..." +msgstr "นำเข้าà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸à¸‡à¹‚หนด" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "ตัวà¸à¸£à¸à¸‡.." +msgid "Filters..." +msgstr "ตัวà¸à¸£à¸à¸‡..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3290,8 +3290,8 @@ msgid "Fetching:" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸±à¸šà¸‚้à¸à¸¡à¸¹à¸¥:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา.." +msgid "Resolving..." +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸„้นหา..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3357,8 +3357,8 @@ msgid "Site:" msgstr "ไซต์:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™.." +msgid "Support..." +msgstr "à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3549,6 +3549,7 @@ msgid "Use Rotation Snap" msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¸«à¸¡à¸¸à¸™" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”..." @@ -3976,8 +3977,8 @@ msgid "Create Convex Collision Sibling" msgstr "สร้างรูปทรงตันà¸à¸²à¸¢à¸ าพเป็นโหนดà¸à¸²à¸•ิ" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "สร้างเส้นขà¸à¸š Mesh.." +msgid "Create Outline Mesh..." +msgstr "สร้างเส้นขà¸à¸š Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4181,8 +4182,8 @@ msgid "Error loading image:" msgstr "ผิดพลาดขณะโหลดรูป:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "รูปไม่มีพิà¸à¹€à¸‹à¸¥à¹ƒà¸”ที่ความโปร่งà¹à¸ªà¸‡ > 128 .." +msgid "No pixels with transparency > 128 in image..." +msgstr "รูปไม่มีพิà¸à¹€à¸‹à¸¥à¹ƒà¸”ที่ความโปร่งà¹à¸ªà¸‡ > 128 ..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4542,7 +4543,7 @@ msgid "Import Theme" msgstr "นำเข้าธีม" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "บันทึà¸à¸˜à¸µà¸¡à¹€à¸›à¹‡à¸™" #: editor/plugins/script_editor_plugin.cpp @@ -4639,8 +4640,8 @@ msgstr "เปิด/ปิดà¹à¸œà¸‡à¸ªà¸„ริปต์" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "ค้นหา.." +msgid "Find..." +msgstr "ค้นหา..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4847,16 +4848,16 @@ msgid "Find Previous" msgstr "ค้นหาà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "à¹à¸—นที่.." +msgid "Replace..." +msgstr "à¹à¸—นที่..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "ไปยังฟังà¸à¹Œà¸Šà¸±à¸™.." +msgid "Goto Function..." +msgstr "ไปยังฟังà¸à¹Œà¸Šà¸±à¸™..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "ไปยังบรรทัด.." +msgid "Goto Line..." +msgstr "ไปยังบรรทัด..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5309,12 +5310,8 @@ msgid "Transform" msgstr "เคลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢.." +msgid "Transform Dialog..." +msgstr "เครื่à¸à¸‡à¸¡à¸·à¸à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5566,8 +5563,8 @@ msgid "Remove All" msgstr "ลบทั้งหมด" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "à¹à¸à¹‰à¹„ขธีม.." +msgid "Edit theme..." +msgstr "à¹à¸à¹‰à¹„ขธีม..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5636,7 +5633,8 @@ msgid "Options" msgstr "ตัวเลืà¸à¸" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "มี,มาà¸à¸¡à¸²à¸¢,หลาย,ตัวเลืà¸à¸!" #: editor/plugins/theme_editor_plugin.cpp @@ -5826,8 +5824,8 @@ msgid "Presets" msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "เพิ่ม.." +msgid "Add..." +msgstr "เพิ่ม..." #: editor/project_export.cpp msgid "Resources" @@ -5916,6 +5914,11 @@ msgid "Imported Project" msgstr "นำเข้าโปรเจà¸à¸•์à¹à¸¥à¹‰à¸§" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "ชื่à¸à¹‚ปรเจà¸à¸•์:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" @@ -6111,8 +6114,8 @@ msgstr "ปุ่มเมาส์" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6140,8 +6143,8 @@ msgid "Control+" msgstr "Control+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "à¸à¸”ปุ่ม.." +msgid "Press a Key..." +msgstr "à¸à¸”ปุ่ม..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6324,8 +6327,8 @@ msgid "Property:" msgstr "คุณสมบัติ:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "à¸à¸³à¸«à¸™à¸”เฉพาะ.." +msgid "Override For..." +msgstr "à¸à¸³à¸«à¸™à¸”เฉพาะ..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6420,12 +6423,12 @@ msgid "Easing Out-In" msgstr "à¸à¸à¸-เข้านุ่มนวล" #: editor/property_editor.cpp -msgid "File.." -msgstr "ไฟล์.." +msgid "File..." +msgstr "ไฟล์..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "โฟลเดà¸à¸£à¹Œ.." +msgid "Dir..." +msgstr "โฟลเดà¸à¸£à¹Œ..." #: editor/property_editor.cpp msgid "Assign" @@ -6595,8 +6598,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "ทำà¸à¸±à¸šà¸‰à¸²à¸à¸—ี่เป็นà¸à¸´à¸™à¸ªà¹à¸•นซ์ไม่ได้" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "บันทึà¸à¸‰à¸²à¸à¹ƒà¸«à¸¡à¹ˆà¹€à¸›à¹‡à¸™.." +msgid "Save New Scene As..." +msgstr "บันทึà¸à¸‰à¸²à¸à¹ƒà¸«à¸¡à¹ˆà¹€à¸›à¹‡à¸™..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -8242,8 +8245,8 @@ msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" #~ msgid "Exporting for %s" #~ msgstr "ส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸š %s" -#~ msgid "Setting Up.." -#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸•ั้งค่า.." +#~ msgid "Setting Up..." +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸•ั้งค่า..." #~ msgid "Error loading scene." #~ msgstr "ผิดพลาดขณะโหลดฉาà¸" @@ -8303,8 +8306,8 @@ msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" #~ msgid "Info" #~ msgstr "ข้à¸à¸¡à¸¹à¸¥" -#~ msgid "Re-Import.." -#~ msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง.." +#~ msgid "Re-Import..." +#~ msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง..." #~ msgid "No bit masks to import!" #~ msgstr "ไม่มีบิตà¹à¸¡à¸ªà¸à¹Œà¹ƒà¸«à¹‰à¸™à¸³à¹€à¸‚้า!" @@ -8684,14 +8687,14 @@ msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" #~ msgid "Zoom (%):" #~ msgstr "ซูม (%):" -#~ msgid "Skeleton.." -#~ msgstr "โครงà¸à¸£à¸°à¸”ูà¸.." +#~ msgid "Skeleton..." +#~ msgstr "โครงà¸à¸£à¸°à¸”ูà¸..." #~ msgid "Zoom Reset" #~ msgstr "รีเซ็ตà¸à¸²à¸£à¸‹à¸¹à¸¡" -#~ msgid "Zoom Set.." -#~ msgstr "ตั้งค่าà¸à¸²à¸£à¸‹à¸¹à¸¡.." +#~ msgid "Zoom Set..." +#~ msgstr "ตั้งค่าà¸à¸²à¸£à¸‹à¸¹à¸¡..." #~ msgid "Set a Value" #~ msgstr "เซ็ตค่า" @@ -9105,8 +9108,8 @@ msgstr "ขนาดฟà¸à¸™à¸•์ผิดพลาด" #~ msgid "Export Project PCK" #~ msgstr "ส่งà¸à¸à¸ PCK โปรเจà¸à¸•์" -#~ msgid "Export.." -#~ msgstr "ส่งà¸à¸à¸.." +#~ msgid "Export..." +#~ msgstr "ส่งà¸à¸à¸..." #~ msgid "Project Export" #~ msgstr "ส่งà¸à¸à¸à¹‚ปรเจà¸à¸•์" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 5e4a18ce28..5be2415c0e 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -10,7 +10,9 @@ # Fatih Mert DoÄŸancan <fatihmertdogancan@hotmail.com>, 2017. # hubbyist <hub@legrud.net>, 2017. # H.Hüseyin CİHANGİR <hashusfb@gmail.com>, 2018. +# Kaan Gül <qaantum@hotmail.com>, 2018. # M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016. +# monolifed <monolifed@gmail.com>, 2018. # Orkun Turan <holygatestudio@yandex.com>, 2016-2017. # razah <icnikerazah@gmail.com>, 2017-2018. # stnmycri <satenmeycri@gmail.com>, 2017-2018. @@ -19,15 +21,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-04-19 12:41+0000\n" -"Last-Translator: H.Hüseyin CİHANGİR <hashusfb@gmail.com>\n" +"PO-Revision-Date: 2018-06-05 05:45+0000\n" +"Last-Translator: Kaan Gül <qaantum@hotmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.0-dev\n" +"X-Generator: Weblate 3.0\n" #: editor/animation_editor.cpp msgid "Disabled" @@ -509,7 +511,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "Åžunun: '%s' ÅŸununla: '%s' baÄŸlantısını kes" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "BaÄŸlan..." #: editor/connections_dialog.cpp @@ -929,12 +931,12 @@ msgid "Move Audio Bus" msgstr "Audio Bus'ı Taşı" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Audio Bus YerleÅŸim Düzenini Farklı Kaydet.." +msgid "Save Audio Bus Layout As..." +msgstr "Audio Bus YerleÅŸim Düzenini Farklı Kaydet..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Yeni YerleÅŸim Düzeni için Konum.." +msgid "Location for New Layout..." +msgstr "Yeni YerleÅŸim Düzeni için Konum..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1069,12 +1071,12 @@ msgid "Updating Scene" msgstr "Sahne Güncelleniyor" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Yerel deÄŸiÅŸiklikler kayıt ediliyor.." +msgid "Storing local changes..." +msgstr "Yerel deÄŸiÅŸiklikler kayıt ediliyor..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "Sahne güncelleniyor.." +msgid "Updating scene..." +msgstr "Sahne güncelleniyor..." #: editor/editor_data.cpp msgid "[empty]" @@ -1142,8 +1144,8 @@ msgid "Show In File Manager" msgstr "Dosya Yöneticisinde Göster" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Yeni Klasör.." +msgid "New Folder..." +msgstr "Yeni Klasör..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1404,20 +1406,20 @@ msgstr "Çıktıyı Temizle" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Proje dışa aktarımı %d hata koduyla baÅŸarısız." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Kaynak kaydedilirken hata!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Kaynağı Farklı Kaydet.." +msgid "Save Resource As..." +msgstr "Kaynağı Farklı Kaydet..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Anlıyorum.." +msgid "I see..." +msgstr "Anlıyorum..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1648,12 +1650,12 @@ msgid "Open Base Scene" msgstr "Ana Sahneyi Aç" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Sahneyi Hızlı Aç.." +msgid "Quick Open Scene..." +msgstr "Sahneyi Hızlı Aç..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "BetiÄŸi Hızlı Aç.." +msgid "Quick Open Script..." +msgstr "BetiÄŸi Hızlı Aç..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1664,8 +1666,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Kapatmadan önce deÄŸiÅŸklikler buraya '%s' kaydedilsin mi?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Sahneyi Farklı Kaydet.." +msgid "Save Scene As..." +msgstr "Sahneyi Farklı Kaydet..." #: editor/editor_node.cpp msgid "No" @@ -1716,8 +1718,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Bu eylem geri alınamaz. Yine de geri dönsün mü?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Sahneyi Hızlı Çalıştır.." +msgid "Quick Run Scene..." +msgstr "Sahneyi Hızlı Çalıştır..." #: editor/editor_node.cpp msgid "Quit" @@ -1872,8 +1874,8 @@ msgid "Previous tab" msgstr "Önceki sekme" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "Dosyaları Süz.." +msgid "Filter Files..." +msgstr "Dosyaları Süz..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1884,12 +1886,12 @@ msgid "New Scene" msgstr "Yeni Sahne" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Yeni Miras Alınmış Sahne .." +msgid "New Inherited Scene..." +msgstr "Yeni Miras Alınmış Sahne ..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Sahne Aç.." +msgid "Open Scene..." +msgstr "Sahne Aç..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1908,16 +1910,16 @@ msgid "Open Recent" msgstr "En Sonuncuyu Aç" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Åžuna Dönüştür.." +msgid "Convert To..." +msgstr "Åžuna Dönüştür..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary .." +msgid "MeshLibrary..." +msgstr "MeshLibrary ..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet .." +msgid "TileSet..." +msgstr "TileSet ..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1966,9 +1968,8 @@ msgid "Debug" msgstr "Hata Ayıklama" #: editor/editor_node.cpp -#, fuzzy msgid "Deploy with Remote Debug" -msgstr "Uzaktan Hata Ayıklama ile Aç" +msgstr "Uzaktan Hata Ayıklama ile Dağıt" #: editor/editor_node.cpp msgid "" @@ -2181,8 +2182,8 @@ msgid "Save the currently edited resource." msgstr "Düzenlenen kaynağı kaydedin." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "Farklı Kaydet.." +msgid "Save As..." +msgstr "Farklı Kaydet..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2290,8 +2291,8 @@ msgid "Creating Mesh Previews" msgstr "Mesh Önizlemeleri OluÅŸturuluyor" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Küçük Resim.." +msgid "Thumbnail..." +msgstr "Küçük Resim..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2443,8 +2444,8 @@ msgid "(Current)" msgstr "(Åžuanki)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "Aynalar alınıyor, lütfen bekleyin.." +msgid "Retrieving mirrors, please wait..." +msgstr "Aynalar alınıyor, lütfen bekleyin..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -2521,8 +2522,8 @@ msgid "Error requesting url: " msgstr "Url isteÄŸi hatası: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "Aynaya baÄŸlanılıyor.." +msgid "Connecting to Mirror..." +msgstr "Aynaya baÄŸlanılıyor..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2538,8 +2539,8 @@ msgstr "Çözümlenemedi" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "BaÄŸlanılıyor.." +msgid "Connecting..." +msgstr "BaÄŸlanılıyor..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2551,8 +2552,8 @@ msgstr "BaÄŸlı" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." -msgstr "İsteniyor.." +msgid "Requesting..." +msgstr "İsteniyor..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -2687,12 +2688,12 @@ msgid "Collapse all" msgstr "Hepsini daralt" #: editor/filesystem_dock.cpp -msgid "Rename.." -msgstr "Yeniden Adlandır.." +msgid "Rename..." +msgstr "Yeniden Adlandır..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "Åžuraya Taşı.." +msgid "Move To..." +msgstr "Åžuraya Taşı..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2703,16 +2704,16 @@ msgid "Instance" msgstr "Örnek" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Bağımlılıkları Düzenle.." +msgid "Edit Dependencies..." +msgstr "Bağımlılıkları Düzenle..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Sahipleri Görüntüle.." +msgid "View Owners..." +msgstr "Sahipleri Görüntüle..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "ÇoÄŸalt.." +msgid "Duplicate..." +msgstr "ÇoÄŸalt..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2737,10 +2738,10 @@ msgstr "Seçilen sahneyi/sahneleri seçilen düğüme çocuk olarak örneklendir #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Dosyalar Taranıyor,\n" -"Lütfen Bekleyiniz.." +"Lütfen Bekleyiniz..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2805,7 +2806,7 @@ msgid "Import Scene" msgstr "Sahneyi İçe Aktar" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "Sahneyi İçe Aktarıyor..." #: editor/import/resource_importer_scene.cpp @@ -2817,8 +2818,8 @@ msgid "Generating for Mesh: " msgstr "Örüntü için Üretiliyor: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "Çalışan Özel Betik.." +msgid "Running Custom Script..." +msgstr "Çalışan Özel Betik..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2835,7 +2836,7 @@ msgid "Error running post-import script:" msgstr "sonradan-içe aktarılmış betik çalıştırılırken hata:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "Kaydediliyor..." #: editor/import_dock.cpp @@ -2855,8 +2856,8 @@ msgid "Import As:" msgstr "Åžu Åžekilde İçe Aktar:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Ön ayar.." +msgid "Preset..." +msgstr "Ön ayar..." #: editor/import_dock.cpp msgid "Reimport" @@ -3273,15 +3274,15 @@ msgid "Transition Node" msgstr "GeçiÅŸ Düğümü" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Animasyonları İçe Aktar.." +msgid "Import Animations..." +msgstr "Animasyonları İçe Aktar..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Düğüm Süzgeçlerini Düzenle" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Süzgeçler..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3349,7 +3350,7 @@ msgid "Fetching:" msgstr "Alınıyor:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "Çözümleniyor..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3416,7 +3417,7 @@ msgid "Site:" msgstr "Yer:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Destek..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3614,6 +3615,7 @@ msgid "Use Rotation Snap" msgstr "Döndürme Yapışması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "Yapışmayı Yapılandır..." @@ -3710,14 +3712,12 @@ msgid "Show Guides" msgstr "Kılavuzları göster" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "BaÅŸlatım Görünümü" +msgstr "BaÅŸlatımı Göster" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 Görüntükapısı" +msgstr "Görüntükapısını Göster" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3773,7 +3773,7 @@ msgstr "Ekle %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "Ekliyor %s.." +msgstr "Ekliyor %s..." #: editor/plugins/canvas_item_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Ok" @@ -4010,7 +4010,7 @@ msgstr "Örüntü anahat oluÅŸturmak için bir yüzeye sahip deÄŸil!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Örüntü ilkel türü PRIMITIVE_TRIANGLES deÄŸil!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4041,8 +4041,8 @@ msgid "Create Convex Collision Sibling" msgstr "Dışbükey Çarpışma KardeÅŸi OluÅŸtur" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Anahat Örüntüsü OluÅŸtur.." +msgid "Create Outline Mesh..." +msgstr "Anahat Örüntüsü OluÅŸtur..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4246,8 +4246,8 @@ msgid "Error loading image:" msgstr "Resim yüklenirken hata:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Saydamlığı olan nokta yok > 128 bedizde.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Saydamlığı olan nokta yok > 128 bedizde..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4607,8 +4607,8 @@ msgid "Import Theme" msgstr "Kalıbı İçe Aktar" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "Temayı Farklı Kaydet.." +msgid "Save Theme As..." +msgstr "Temayı Farklı Kaydet..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4704,8 +4704,8 @@ msgstr "Betikler Panelini Aç/Kapa" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Bul.." +msgid "Find..." +msgstr "Bul..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4914,16 +4914,16 @@ msgid "Find Previous" msgstr "Öncekini Bul" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "DeÄŸiÅŸtir.." +msgid "Replace..." +msgstr "DeÄŸiÅŸtir..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "İşleve Git.." +msgid "Goto Function..." +msgstr "İşleve Git..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Dizeye Git.." +msgid "Goto Line..." +msgstr "Dizeye Git..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5376,12 +5376,8 @@ msgid "Transform" msgstr "Dönüşüm" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Yapışmayı Yapılandır.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "Dönüştürme İletiÅŸim Kutusu.." +msgid "Transform Dialog..." +msgstr "Dönüştürme İletiÅŸim Kutusu..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5633,8 +5629,8 @@ msgid "Remove All" msgstr "Tümünü Kaldır" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "Tema düzenle.." +msgid "Edit theme..." +msgstr "Tema düzenle..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5681,14 +5677,12 @@ msgid "Checked Item" msgstr "Denetlenen Öğe" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Öğe Ekle" +msgstr "Radyo Ögesi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Denetlenen Öğe" +msgstr "Seçili Radyo Ögesi" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5703,7 +5697,8 @@ msgid "Options" msgstr "Seçenekler" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Bir Çok,Seçenek,Var!" #: editor/plugins/theme_editor_plugin.cpp @@ -5895,8 +5890,8 @@ msgid "Presets" msgstr "Önayarlar" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "Ekle.." +msgid "Add..." +msgstr "Ekle..." #: editor/project_export.cpp msgid "Resources" @@ -5989,6 +5984,11 @@ msgid "Imported Project" msgstr "İçe Aktarılan Proje" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Proje Adı:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Klasör oluÅŸturulamadı." @@ -6188,8 +6188,8 @@ msgstr "Fare Düğmesi" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6217,8 +6217,8 @@ msgid "Control+" msgstr "Denetim+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "Bir Dokunaca Basın.." +msgid "Press a Key..." +msgstr "Bir Dokunaca Basın..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6401,8 +6401,8 @@ msgid "Property:" msgstr "Özellik:" #: editor/project_settings_editor.cpp -msgid "Override For.." -msgstr "Åžunun Üzerine Yaz.." +msgid "Override For..." +msgstr "Åžunun Üzerine Yaz..." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -6497,12 +6497,12 @@ msgid "Easing Out-In" msgstr "Kararma Açılma" #: editor/property_editor.cpp -msgid "File.." -msgstr "Dosya.." +msgid "File..." +msgstr "Dosya..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "Diz.." +msgid "Dir..." +msgstr "Diz..." #: editor/property_editor.cpp msgid "Assign" @@ -6674,8 +6674,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "Bu iÅŸlem örneklenmiÅŸ sahnelerde yapılamaz." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "Yeni Sahneyi Farklı Kaydet .." +msgid "Save New Scene As..." +msgstr "Yeni Sahneyi Farklı Kaydet ..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7389,11 +7389,11 @@ msgstr "Uzaklık Seç:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." -msgstr "solü oluÅŸturuluyor..." +msgstr "Çözüm oluÅŸturuluyor..." #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating C# project..." @@ -7442,7 +7442,7 @@ msgstr "Uyarılar" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "İç özel durum yığını izlemesinin sonu" #: modules/visual_script/visual_script.cpp msgid "" @@ -8380,7 +8380,7 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Exporting for %s" #~ msgstr "%s için Dışa Aktarım" -#~ msgid "Setting Up.." +#~ msgid "Setting Up..." #~ msgstr "Kurulum..." #~ msgid "Error loading scene." @@ -8435,8 +8435,8 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Info" #~ msgstr "Bilgi" -#~ msgid "Re-Import.." -#~ msgstr "Yeniden İçe Aktar.." +#~ msgid "Re-Import..." +#~ msgstr "Yeniden İçe Aktar..." #~ msgid "No bit masks to import!" #~ msgstr "Alınacak hiç bit örteci yok!" @@ -8832,14 +8832,14 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Zoom (%):" #~ msgstr "YaklaÅŸ (%):" -#~ msgid "Skeleton.." -#~ msgstr "İskelet.." +#~ msgid "Skeleton..." +#~ msgstr "İskelet..." #~ msgid "Zoom Reset" #~ msgstr "YakınlaÅŸmayı Sıfırla" -#~ msgid "Zoom Set.." -#~ msgstr "YakınlaÅŸmayı Ayarla.." +#~ msgid "Zoom Set..." +#~ msgstr "YakınlaÅŸmayı Ayarla..." #~ msgid "Set a Value" #~ msgstr "Bir DeÄŸer Ata" @@ -8980,7 +8980,7 @@ msgstr "Geçersiz yazıtipi boyutu." #~ "Download and install export templates." #~ msgstr "" #~ "Hiçbir dışa aktarım kalıbı bulunamadı.\n" -#~ "Dışa aktarım kalıplarını indirin ve yükleyin.." +#~ "Dışa aktarım kalıplarını indirin ve yükleyin..." #~ msgid "Custom debug package not found." #~ msgstr "Özel kusur ayıklama çıkını bulunmadı." @@ -9303,8 +9303,8 @@ msgstr "Geçersiz yazıtipi boyutu." #~ msgid "Export Project PCK" #~ msgstr "Tasarı PCK Dışa Aktar" -#~ msgid "Export.." -#~ msgstr "Dışa Aktar.." +#~ msgid "Export..." +#~ msgstr "Dışa Aktar..." #~ msgid "Project Export" #~ msgstr "Tasarı Dışa Aktar" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 45138cd5de..730d6a38ca 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" -"PO-Revision-Date: 2018-04-20 18:42+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2018-05-18 10:42+0000\n" +"Last-Translator: МакÑим Якимчук <xpinovo@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -345,7 +345,7 @@ msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… анімації" #: editor/animation_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—(Ñ–) (не ÑкаÑувати!)" +msgstr "ОчиÑтити анімацію(Ñ—) (ÐЕ СКÐСУВÐТИ!)" #: editor/animation_editor.cpp msgid "Clean-Up" @@ -492,7 +492,7 @@ msgstr "З'єднати" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ '%s' Ð´Ð»Ñ %s'" +msgstr "Приєднати '%s' до %s'" #: editor/connections_dialog.cpp msgid "Connecting Signal:" @@ -503,8 +503,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "Від'єднати '%s' від '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "Приєднати.." +msgid "Connect..." +msgstr "Приєднати..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -666,7 +666,7 @@ msgstr "Помилки завантаженнÑ!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "ОÑтаточно вилучити %d об'єкти (неможливо ÑкаÑувати)" +msgstr "ОÑтаточно вилучити %d об'єкт(и)? (Ðеможливо ÑкаÑувати)" #: editor/dependency_editor.cpp msgid "Owns" @@ -706,7 +706,7 @@ msgstr "СпаÑибі від Ñпільноти Godot!" #: editor/editor_about.cpp msgid "Thanks!" -msgstr "ДÑкую!" +msgstr "ПодÑка!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -776,7 +776,7 @@ msgid "" "respective copyright statements and license terms." msgstr "" "Рушій Godot ÑпираєтьÑÑ Ð½Ð° Ñ€Ñд Ñторонніх безкоштовних Ñ– відкритих бібліотек, " -"ÑуміÑних з умовами ліцензії mit. Ðижче наводитьÑÑ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð½Ð¸Ð¹ ÑпиÑок вÑÑ–Ñ… " +"ÑуміÑних з умовами ліцензії MIT. Ðижче наводитьÑÑ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð½Ð¸Ð¹ ÑпиÑок вÑÑ–Ñ… " "таких Ñторонніх компонентів з відповідними заÑвами авторÑьких прав Ñ– умов " "ліцензійної угоди." @@ -824,7 +824,7 @@ msgstr "Динаміки" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "Додати ефект" +msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐµÑ„ÐµÐºÑ‚Ñƒ" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -852,7 +852,7 @@ msgstr "Вибір передачі аудіо шини" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "Додати ефект аудіо шини" +msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐµÑ„ÐµÐºÑ‚Ñƒ аудіо шини" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -897,11 +897,11 @@ msgstr "Видалити ефект" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "Звук" +msgstr "Ðудіо" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "Додати аудіо шину" +msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾ шини" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" @@ -924,16 +924,16 @@ msgid "Move Audio Bus" msgstr "ПереміÑтити аудіо шину" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "Зберегти макет аудіо шини Ñк.." +msgid "Save Audio Bus Layout As..." +msgstr "Зберегти ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾ шини Ñк..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ макета..." +msgid "Location for New Layout..." +msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ компонуваннÑ..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "Відкрити макет аудіо шини" +msgstr "Відкрити ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾ шини" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." @@ -941,7 +941,7 @@ msgstr "Файл 'res: //default_bus_layout.tres' не знайдено." #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "ÐеприпуÑтимий файл, це не макет аудіо-шини." +msgstr "ÐеприпуÑтимий файл, це не ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾-шини." #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -949,7 +949,7 @@ msgstr "Додати шину" #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ макету шини." +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ¸Ð½Ð¸." #: editor/editor_audio_buses.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp @@ -958,16 +958,16 @@ msgstr "Завантажити" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ñнуючого макета шини." +msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ñнуючого ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ¸Ð½Ð¸." #: editor/editor_audio_buses.cpp #: editor/plugins/animation_player_editor_plugin.cpp msgid "Save As" -msgstr "Зберегти Як" +msgstr "Зберегти Ñк" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "Зберегти цей макет шини у файлі." +msgstr "Зберегти це ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ¸Ð½Ð¸ у файлі." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -975,7 +975,7 @@ msgstr "Завантажити типовий" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "Завантажити типовий макет шини." +msgstr "Завантажити типове ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ¸Ð½Ð¸." #: editor/editor_autoload_settings.cpp msgid "Invalid name." @@ -998,7 +998,7 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Invalid name. Must not collide with an existing global constant name." msgstr "" -"Ðеправильне ім'Ñ. Ðе повинно збігатиÑÑŒ з іменем Ñ–Ñнуючої глобальної " +"ÐеприпуÑтиме ім'Ñ. Ðе повинно збігатиÑÑŒ з іменем Ñ–Ñнуючої глобальної " "конÑтанти." #: editor/editor_autoload_settings.cpp @@ -1068,12 +1068,12 @@ msgid "Updating Scene" msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñцени" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… змін.." +msgid "Storing local changes..." +msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… змін..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñцени.." +msgid "Updating scene..." +msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñцени..." #: editor/editor_data.cpp msgid "[empty]" @@ -1141,8 +1141,8 @@ msgid "Show In File Manager" msgstr "Показати в файловому менеджері" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "Створити теку.." +msgid "New Folder..." +msgstr "Створити теку..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1154,7 +1154,7 @@ msgstr "УÑе розпізнано" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "УÑÑ– фали (*)" +msgstr "УÑÑ– файли (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" @@ -1180,11 +1180,11 @@ msgstr "Зберегти" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ" +msgstr "Зберегти файл" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "ПовертатиÑÑ" +msgstr "ПовернутиÑÑ Ð½Ð°Ð·Ð°Ð´" #: editor/editor_file_dialog.cpp msgid "Go Forward" @@ -1212,11 +1212,11 @@ msgstr "ФокуÑувати шлÑÑ…" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "ПереміÑтити обране вгору" +msgstr "ПереміÑтити вибране вгору" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "ПереміÑтити обране вниз" +msgstr "ПереміÑтити вибране вниз" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder" @@ -1245,7 +1245,7 @@ msgstr "Сканувати Ñирці" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "(Re)Імпорт активів" +msgstr "Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ñ–Ð²" #: editor/editor_help.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1258,7 +1258,7 @@ msgstr "СпиÑок клаÑів:" #: editor/editor_help.cpp msgid "Search Classes" -msgstr "Пошук клаÑу" +msgstr "Пошук клаÑів" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -1274,19 +1274,19 @@ msgstr "УÑпадковує:" #: editor/editor_help.cpp msgid "Inherited by:" -msgstr "УÑпадкована:" +msgstr "УÑпадковано:" #: editor/editor_help.cpp msgid "Brief Description:" -msgstr "Короткий опиÑ:" +msgstr "СтиÑлий опиÑ:" #: editor/editor_help.cpp msgid "Members" -msgstr "УчаÑники" +msgstr "Члени" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Members:" -msgstr "УчаÑники:" +msgstr "Члени:" #: editor/editor_help.cpp msgid "Public Methods" @@ -1298,11 +1298,11 @@ msgstr "Публічні методи:" #: editor/editor_help.cpp msgid "GUI Theme Items" -msgstr "Елементи графічного інтерфейÑу теми" +msgstr "Тема елементів ГІК" #: editor/editor_help.cpp msgid "GUI Theme Items:" -msgstr "Елементи графічного інтерфейÑу теми:" +msgstr "Тема елементів ГІК:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1310,15 +1310,15 @@ msgstr "Сигнали:" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "Перелік" +msgstr "Перелічуваний" #: editor/editor_help.cpp msgid "Enumerations:" -msgstr "Перелік:" +msgstr "Перелічуваний:" #: editor/editor_help.cpp msgid "enum " -msgstr "перелік " +msgstr "перелічуваний " #: editor/editor_help.cpp msgid "Constants" @@ -1368,7 +1368,7 @@ msgstr "Методи" #: editor/editor_help.cpp msgid "Method Description:" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ñƒ:" +msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ñ–Ð²:" #: editor/editor_help.cpp msgid "" @@ -1403,20 +1403,20 @@ msgstr "ОчиÑтити вивід" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати проект, код помилки — %d." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÑурÑу!" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "Зберегти реÑÑƒÑ€Ñ Ñк.." +msgid "Save Resource As..." +msgstr "Зберегти реÑÑƒÑ€Ñ Ñк..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "Бачу.." +msgid "I see..." +msgstr "Бачу..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1496,7 +1496,7 @@ msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ тайлів!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "Помилка при Ñпробі зберегти макет!" +msgstr "Помилка при Ñпробі зберегти компонуваннÑ!" #: editor/editor_node.cpp msgid "Default editor layout overridden." @@ -1504,7 +1504,7 @@ msgstr "Типове ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° перевизР#: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "Ðазву макета не знайдено!" +msgstr "Ðазву ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдено!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." @@ -1516,7 +1516,7 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"Цей реÑÑƒÑ€Ñ Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ до Ñцени, Ñкий було імпортовано, тому не можна " +"Цей реÑÑƒÑ€Ñ Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ до Ñцени, Ñкий було імпортовано, тому його не можна " "редагувати.\n" "Будь лаÑка, прочитайте документацію, що ÑтоÑуютьÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñцен, щоб " "краще зрозуміти цей робочий процеÑ." @@ -1597,7 +1597,7 @@ msgstr "Відкрити у довідці" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "Ðе Ñ–Ñнує визначеної Ñцени Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку." +msgstr "Ðемає визначеної Ñцени Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ." #: editor/editor_node.cpp msgid "" @@ -1647,12 +1647,12 @@ msgid "Open Base Scene" msgstr "Відкрити оÑновну Ñцену" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "Швидке Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñцени.." +msgid "Quick Open Scene..." +msgstr "Швидке Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñцени..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "Швидке Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñкрипту.." +msgid "Quick Open Script..." +msgstr "Швидке Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñкрипту..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1660,11 +1660,11 @@ msgstr "Зберегти та закрити" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "Зберегти зміни, внеÑені до '%s ' перед закриттÑм?" +msgstr "Зберегти зміни, внеÑені до '%s' перед закриттÑм?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Зберегти Ñцени, Ñк..." +msgid "Save Scene As..." +msgstr "Зберегти Ñцену Ñк..." #: editor/editor_node.cpp msgid "No" @@ -1715,8 +1715,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "Цю дію не можна ÑкаÑувати. ПовернутиÑÑ Ð² будь-Ñкому випадку?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "Швидкий запуÑк Ñцени.." +msgid "Quick Run Scene..." +msgstr "Швидкий запуÑк Ñцени..." #: editor/editor_node.cpp msgid "Quit" @@ -1815,11 +1815,11 @@ msgstr "ОчиÑтити недавні Ñцени" #: editor/editor_node.cpp msgid "Save Layout" -msgstr "Зберегти макет" +msgstr "Зберегти компонуваннÑ" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "Видалити макет" +msgstr "Видалити компонуваннÑ" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -1828,7 +1828,7 @@ msgstr "Типовий" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Перемкнути вкладку \"Сцена\"" +msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ¸ \"Сцена\"" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -1875,7 +1875,7 @@ msgid "Previous tab" msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "Фільтрувати файли..." #: editor/editor_node.cpp @@ -1887,12 +1887,12 @@ msgid "New Scene" msgstr "Ðова Ñцена" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Ðова уÑпадкована Ñцена.." +msgid "New Inherited Scene..." +msgstr "Ðова уÑпадкована Ñцена..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "Відкрити Ñцену.." +msgid "Open Scene..." +msgstr "Відкрити Ñцену..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1911,16 +1911,16 @@ msgid "Open Recent" msgstr "Відкрити оÑтанні" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "Перетворити на.." +msgid "Convert To..." +msgstr "Перетворити на..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "Бібліотека Ñітки.." +msgid "MeshLibrary..." +msgstr "Бібліотека Ñітки..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "Ðабір тайлів.." +msgid "TileSet..." +msgstr "Ðабір тайлів..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -1930,7 +1930,7 @@ msgstr "СкаÑувати" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp msgid "Redo" -msgstr "Повторити" +msgstr "Повернути" #: editor/editor_node.cpp msgid "Revert Scene" @@ -1954,7 +1954,7 @@ msgstr "ЗапуÑтити Ñкрипт" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export" -msgstr "ЕкÑпортувати" +msgstr "ЕкÑпортуваннÑ" #: editor/editor_node.cpp msgid "Tools" @@ -2001,14 +2001,14 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "Видимі форми зіткнень" +msgstr "Видимі контури зіткнень" #: editor/editor_node.cpp msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"Форми Ð·Ñ–Ñ‚ÐºÐ½ÐµÐ½Ð½Ñ Ñ‚Ð° вузли raycast (Ð´Ð»Ñ 2D та 3D) будуть видно в роботі гри, " +"Контури Ð·Ñ–Ñ‚ÐºÐ½ÐµÐ½Ð½Ñ Ñ‚Ð° вузли raycast (Ð´Ð»Ñ 2D та 3D) буде видно в роботі гри, " "Ñкщо Ñ†Ñ Ð¾Ð¿Ñ†Ñ–Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð°." #: editor/editor_node.cpp @@ -2036,8 +2036,8 @@ msgid "" msgstr "" "Якщо цей параметр увімкнено, будь-Ñкі зміни, внеÑені в Ñцену в редакторі, " "будуть відтворені в роботі гри.\n" -"Коли він викориÑтовуєтьÑÑ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾ на приÑтрої, це більш ефективно з " -"мережевою файловою ÑиÑтемою." +"При віддаленому викориÑтанні на приÑтрої, це більш ефективно з мережевою " +"файловою ÑиÑтемою." #: editor/editor_node.cpp msgid "Sync Script Changes" @@ -2052,8 +2052,8 @@ msgid "" msgstr "" "Якщо цей параметр увімкнено, будь-Ñкий Ñкрипт, Ñкий буде збережений, буде " "перезавантажений у поточній грі.\n" -"Коли він викориÑтовуєтьÑÑ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾ на приÑтрої, це більш ефективно з " -"мережевою файловою ÑиÑтемою." +"При віддаленому викориÑтанні на приÑтрої, це більш ефективно з мережевою " +"файловою ÑиÑтемою." #: editor/editor_node.cpp msgid "Editor" @@ -2065,7 +2065,7 @@ msgstr "Параметри редактора" #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "Редактор макетів" +msgstr "Редактор компонуваннÑ" #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2108,7 +2108,7 @@ msgstr "Спільнота" #: editor/editor_node.cpp msgid "About" -msgstr "Про програму" +msgstr "Про" #: editor/editor_node.cpp msgid "Play the project." @@ -2160,7 +2160,7 @@ msgstr "Завжди оновлювати" #: editor/editor_node.cpp msgid "Update Changes" -msgstr "Оновити зміни" +msgstr "Оновлювати зміни" #: editor/editor_node.cpp msgid "Disable Update Spinner" @@ -2183,7 +2183,7 @@ msgid "Save the currently edited resource." msgstr "Зберегти поточний редагований реÑурÑ." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "Зберегти Ñк..." #: editor/editor_node.cpp @@ -2257,7 +2257,7 @@ msgstr "Ðовий уÑпадкований" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "Завантажити помилки" +msgstr "Помилки завантаженнÑ" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" @@ -2292,12 +2292,12 @@ msgid "Creating Mesh Previews" msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду Ñітки" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "Мініатюра.." +msgid "Thumbnail..." +msgstr "Мініатюра..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" -msgstr "Ð’Ñтановлені плагіни:" +msgstr "Ð’Ñтановлені плаґіни:" #: editor/editor_plugin_settings.cpp msgid "Update" @@ -2342,7 +2342,7 @@ msgstr "Кадр %" #: editor/editor_profiler.cpp msgid "Physics Frame %" -msgstr "Фізика кадрів %" +msgstr "Фізичний кадр %" #: editor/editor_profiler.cpp editor/script_editor_debugger.cpp msgid "Time:" @@ -2386,7 +2386,7 @@ msgstr "Ðапишіть Ñвою логіку в методі _run ()." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "Є вже редагована Ñцена." +msgstr "Редагована Ñцена вже Ñ–Ñнує." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -2394,7 +2394,7 @@ msgstr "Ðеможливо Ñтворити екземплÑÑ€ Ñкрипту:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "Ви забули ключове Ñлово \"інÑтрумент\"?" +msgstr "Ви забули ключове Ñлово 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" @@ -2402,7 +2402,7 @@ msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñкрипт:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "Ви забули метод \"_run\"?" +msgstr "Ви забули метод '_run'?" #: editor/editor_settings.cpp msgid "Default (Same as Editor)" @@ -2445,12 +2445,12 @@ msgid "(Current)" msgstr "(Поточний)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." -msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð·ÐµÑ€ÐºÐ°Ð», будь лаÑка, зачекайте.." +msgid "Retrieving mirrors, please wait..." +msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð·ÐµÑ€ÐºÐ°Ð», будь лаÑка, зачекайте..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "Видалити верÑÑ–ÑŽ шаблону '%s'?" +msgstr "Видалити верÑÑ–ÑŽ шаблону '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2470,7 +2470,7 @@ msgstr "Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑˆÐ»Ñху Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "ВитÑг шаблонів екÑпорту" +msgstr "Ð Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð² екÑпорту" #: editor/export_template_manager.cpp msgid "Importing:" @@ -2481,8 +2481,8 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" -"Ðемає поÑилань на Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ—. ПрÑме Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ñтупне " -"лише Ð´Ð»Ñ Ð¾Ñ„Ñ–Ñ†Ñ–Ð¹Ð½Ð¸Ñ… випуÑків." +"Ðе знайдено поÑилань Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ—. ПрÑме Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ " +"доÑтупне лише Ð´Ð»Ñ Ð¾Ñ„Ñ–Ñ†Ñ–Ð¹Ð½Ð¸Ñ… випуÑків." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2523,8 +2523,8 @@ msgid "Error requesting url: " msgstr "Помилка запиту url: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." -msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ дзеркала.." +msgid "Connecting to Mirror..." +msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ дзеркала..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -2540,8 +2540,8 @@ msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ñ€Ñ–ÑˆÐ¸Ñ‚Ð¸" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "З’єднаннÑ.." +msgid "Connecting..." +msgstr "З’єднаннÑ..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2553,7 +2553,7 @@ msgstr "З’єднано" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "Запит..." #: editor/export_template_manager.cpp @@ -2566,7 +2566,7 @@ msgstr "Помилка з'єднаннÑ" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "Помилка SSL Handshake" +msgstr "Помилка SSL РукоÑтиÑканнÑ" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -2586,7 +2586,7 @@ msgstr "Видалити шаблон" #: editor/export_template_manager.cpp msgid "Select template file" -msgstr "Виберіть файл шаблону" +msgstr "Вибрати файл шаблону" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -2603,18 +2603,17 @@ msgstr "Виберіть дзеркало зі ÑпиÑку: " #: editor/file_type_cache.cpp msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "" -"Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл file_type_cache.cch Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑаннÑ, кеш тип файлу " -"не буде збережений!" +"Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ file_type_cache.cch Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу, не буде збережений файл " +"тип кешу!" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" msgstr "" -"Ðеможливо перейти до \"'%s' , оÑкільки він не був знайдений в файлової " -"ÑиÑтемі!" +"Ðеможливо перейти до '%s' , оÑкільки він не був знайдений в файловій ÑиÑтемі!" #: editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails" -msgstr "ПереглÑд елементів у виглÑді Ñітки еÑкізів" +msgstr "ПереглÑд елементів у виглÑді Ñітки мініатюр" #: editor/filesystem_dock.cpp msgid "View items as a list" @@ -2623,8 +2622,8 @@ msgstr "ПереглÑд елементів Ñк ÑпиÑок" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"СтатуÑ: не вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ файл. Виправте файл та повторно імпортуйте " -"вручну." +"СтатуÑ: не вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ файл. Будь лаÑка, виправте файл та повторно " +"імпортуйте вручну." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." @@ -2684,18 +2683,18 @@ msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÐ¸:" #: editor/filesystem_dock.cpp msgid "Expand all" -msgstr "Розгорнути вÑÑ–" +msgstr "Розгорнути вÑе" #: editor/filesystem_dock.cpp msgid "Collapse all" -msgstr "Згорнути вÑÑ–" +msgstr "Згорнути вÑе" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Перейменувати..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "ПереміÑтити до..." #: editor/filesystem_dock.cpp @@ -2707,16 +2706,16 @@ msgid "Instance" msgstr "ЕкземплÑÑ€" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Редагувати залежноÑті.." +msgid "Edit Dependencies..." +msgstr "Редагувати залежноÑті..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "ПереглÑнути влаÑників.." +msgid "View Owners..." +msgstr "ПереглÑнути влаÑників..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "Дублювати.." +msgid "Duplicate..." +msgstr "Дублювати..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2728,20 +2727,20 @@ msgstr "ÐаÑтупний каталог" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "Повторне ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми" +msgstr "ПереÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми" #: editor/filesystem_dock.cpp msgid "Toggle folder status as Favorite" -msgstr "Переключити ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ‚ÐµÐºÐ¸ у вибране" +msgstr "Переключити ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ‚ÐµÐºÐ¸ Ñк обране" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Додати обрану Ñцену(и), Ñк нащадка обраного вузла." +msgstr "Додати вибрану Ñцену(и), Ñк нащадка вибраного вузла." #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²,\n" "будь лаÑка, зачекайте..." @@ -2809,8 +2808,8 @@ msgid "Import Scene" msgstr "Імпортувати Ñцену" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñцени.." +msgid "Importing Scene..." +msgstr "Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñцени..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2821,8 +2820,8 @@ msgid "Generating for Mesh: " msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñітки: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "ЗапуÑк кориÑтувацького Ñкрипту.." +msgid "Running Custom Script..." +msgstr "ЗапуÑк кориÑтувацького Ñкрипту..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2837,16 +2836,16 @@ msgid "Error running post-import script:" msgstr "Помилка запуÑку піÑÐ»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ Ñкрипту:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "ЗбереженнÑ..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "Ð’Ñтановити за замовчуваннÑм Ð´Ð»Ñ \"%s\"" +msgstr "Ð’Ñтановити Ñк типове Ð´Ð»Ñ '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "ОчиÑтити за замовчуваннÑм Ð´Ð»Ñ '%s'" +msgstr "ОчиÑтити типове Ð´Ð»Ñ '%s'" #: editor/import_dock.cpp msgid " Files" @@ -2857,12 +2856,12 @@ msgid "Import As:" msgstr "Імпортувати Ñк:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "Заздалегідь уÑтановлений.." +msgid "Preset..." +msgstr "Заздалегідь уÑтановлений..." #: editor/import_dock.cpp msgid "Reimport" -msgstr "Переімпортивути" +msgstr "Переімпортувати" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -2935,7 +2934,7 @@ msgstr "Ðова анімаціÑ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Змініть ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—:" +msgstr "Змінити ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -2982,7 +2981,7 @@ msgstr "Дублювати анімацію" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation to copy!" -msgstr "ПОМИЛКÐ: Ðемає копії анімації!" +msgstr "ПОМИЛКÐ: Ðемає анімації Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "ERROR: No animation resource on clipboard!" @@ -3031,7 +3030,7 @@ msgstr "Шкала Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾ анімації д #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create new animation in player." -msgstr "Створювати нові анімації у програвачі." +msgstr "Створити нову анімацію у програвачі." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load animation from disk." @@ -3276,15 +3275,15 @@ msgid "Transition Node" msgstr "Вузол переходу" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "Імпортувати анімації.." +msgid "Import Animations..." +msgstr "Імпортувати анімації..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "Редагувати фільтри вузла" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "Фільтри..." #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3352,7 +3351,7 @@ msgid "Fetching:" msgstr "ВидобуваннÑ:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "ВирішеннÑ..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3419,7 +3418,7 @@ msgid "Site:" msgstr "Сайт:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "Підтримка..." #: editor/plugins/asset_library_editor_plugin.cpp @@ -3617,6 +3616,7 @@ msgid "Use Rotation Snap" msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ð²'Ñзки" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ð²'Ñзки..." @@ -3713,14 +3713,12 @@ msgid "Show Guides" msgstr "Показати напрÑмні" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" -msgstr "ПереглÑд центра" +msgstr "Показати центр" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1 панель переглÑду" +msgstr "Показати панель переглÑду" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4014,7 +4012,7 @@ msgstr "Сітка не має поверхні, щоб Ñтворити ÐºÐ¾Ð½Ñ #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "Типом Ñітки примітива не Ñ” PRIMITIVE_TRIANGLES!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -4045,8 +4043,8 @@ msgid "Create Convex Collision Sibling" msgstr "Створити опуклу облаÑть зіткненнÑ" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "Створити контурну Ñітку .." +msgid "Create Outline Mesh..." +msgstr "Створити контурну Ñітку ..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4251,8 +4249,8 @@ msgid "Error loading image:" msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "Ð’ зображенні немає пікÑелів з прозоріÑтю > 128.." +msgid "No pixels with transparency > 128 in image..." +msgstr "Ð’ зображенні немає пікÑелів з прозоріÑтю > 128..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4612,7 +4610,7 @@ msgid "Import Theme" msgstr "Імпортувати тему" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "Зберегти тему Ñк..." #: editor/plugins/script_editor_plugin.cpp @@ -4709,8 +4707,8 @@ msgstr "Перемкнути панель Ñценаріїв" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "Знайти.." +msgid "Find..." +msgstr "Знайти..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4835,7 +4833,7 @@ msgstr "Копіювати" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "Вибрати вÑе" +msgstr "Виділити вÑе" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" @@ -4919,16 +4917,16 @@ msgid "Find Previous" msgstr "Знайти попереднє" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "Замінити.." +msgid "Replace..." +msgstr "Замінити..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "Перейти до функції.." +msgid "Goto Function..." +msgstr "Перейти до функції..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "Перейти до Ñ€Ñдка.." +msgid "Goto Line..." +msgstr "Перейти до Ñ€Ñдка..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5381,11 +5379,7 @@ msgid "Transform" msgstr "ПеретвореннÑ" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "Ðалаштувати прилипаннÑ..." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "Вікно перетвореннÑ..." #: editor/plugins/spatial_editor_plugin.cpp @@ -5638,7 +5632,7 @@ msgid "Remove All" msgstr "Вилучити уÑÑ–" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "Редагувати тему..." #: editor/plugins/theme_editor_plugin.cpp @@ -5686,14 +5680,12 @@ msgid "Checked Item" msgstr "Позначений елемент" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Додати елемент" +msgstr "Пункт варіанта" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Позначений елемент" +msgstr "Позначений пункт варіанта" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5705,10 +5697,11 @@ msgstr "Багато" #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "Параметрів" +msgstr "Параметри" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "Має,Багато,Декілька,Параметрів!" #: editor/plugins/theme_editor_plugin.cpp @@ -5901,7 +5894,7 @@ msgid "Presets" msgstr "Ðабори" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "Додати..." #: editor/project_export.cpp @@ -5996,6 +5989,11 @@ msgid "Imported Project" msgstr "Імпортований проект" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "Ðазва проекту:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "Ðеможливо Ñтворити теку." @@ -6195,10 +6193,13 @@ msgid "Mouse Button" msgstr "Кнопка миші" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" +"Ðекоректна назва дії. Ðазва не може бути порожньою Ñ– не може міÑтити " +"Ñимволів «/», «:», «=», «\\» та «\"»" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6225,7 +6226,7 @@ msgid "Control+" msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "ÐатиÑніть клавішу,..." #: editor/project_settings_editor.cpp @@ -6402,14 +6403,14 @@ msgstr "Параметри проекту (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "Загальне" +msgstr "\"Загальне\"" #: editor/project_settings_editor.cpp editor/property_editor.cpp msgid "Property:" msgstr "ВлаÑтивіÑть:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "Перевизначити на..." #: editor/project_settings_editor.cpp @@ -6454,19 +6455,19 @@ msgstr "ПереÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° локаллю:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "Локаль" +msgstr "Мова" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "Фільтр локалей" +msgstr "Фільтр локалізацій" #: editor/project_settings_editor.cpp msgid "Show all locales" -msgstr "Показати уÑÑ– локалі" +msgstr "Показати уÑÑ– локалізації" #: editor/project_settings_editor.cpp msgid "Show only selected locales" -msgstr "Показати лише позначені локалі" +msgstr "Показати лише позначені локалізації" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -6474,7 +6475,7 @@ msgstr "Режим фільтруваннÑ:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "Локалі:" +msgstr "Мови:" #: editor/project_settings_editor.cpp msgid "AutoLoad" @@ -6505,11 +6506,11 @@ msgid "Easing Out-In" msgstr "Перейти з-у" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "Файл..." #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "Каталог..." #: editor/property_editor.cpp @@ -6683,7 +6684,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "Цю дію не можна виконувати над Ñценами з екземплÑрами." #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "Зберегти нову Ñцену Ñк..." #: editor/scene_tree_dock.cpp @@ -7401,7 +7402,7 @@ msgstr "ВідÑтань вибору:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Ðазвою клаÑу не може бути зарезервоване ключове Ñлово" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -8114,7 +8115,7 @@ msgstr "" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment потребує реÑурÑу Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -8128,6 +8129,9 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Цей Ð·Ð°Ð¿Ð¸Ñ WorldEnvironment проігноровано. Ðбо додайте Ð·Ð°Ð¿Ð¸Ñ Camera (Ð´Ð»Ñ " +"проÑторових Ñцен) або вÑтановіть Ð´Ð»Ñ Background Mode цього Ñередовища " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Canvas (Ð´Ð»Ñ Ð´Ð²Ð¾Ð²Ð¸Ð¼Ñ–Ñ€Ð½Ð¸Ñ… Ñцен)." #: scene/3d/sprite_3d.cpp msgid "" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 4f03e8a387..0162eb0788 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -495,7 +495,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -909,11 +909,11 @@ msgid "Move Audio Bus" msgstr "ایکشن منتقل کریں" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1051,11 +1051,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1124,7 +1124,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1391,12 +1391,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1601,11 +1601,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1617,7 +1617,7 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "" #: editor/editor_node.cpp @@ -1669,7 +1669,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1815,7 +1815,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1827,11 +1827,11 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1851,15 +1851,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2104,7 +2104,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2214,7 +2214,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2365,7 +2365,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2441,7 +2441,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2458,7 +2458,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2471,7 +2471,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2605,11 +2605,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2621,15 +2621,15 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "" #: editor/filesystem_dock.cpp @@ -2655,7 +2655,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2721,7 +2721,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2733,7 +2733,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2749,7 +2749,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2769,7 +2769,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3185,7 +3185,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3193,7 +3193,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3261,7 +3261,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3328,7 +3328,7 @@ msgid "Site:" msgstr "سائٹ:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr ".سپورٹ" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3519,6 +3519,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3944,7 +3945,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4149,7 +4150,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4514,7 +4515,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4612,7 +4613,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4818,15 +4819,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5280,11 +5281,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5541,7 +5538,7 @@ msgid "Remove All" msgstr ".تمام کا انتخاب" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5609,7 +5606,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5798,7 +5795,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5888,6 +5885,10 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +msgid "Invalid Project Name." +msgstr "" + +#: editor/project_manager.cpp #, fuzzy msgid "Couldn't create folder." msgstr "سب سکریپشن بنائیں" @@ -6078,8 +6079,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6107,7 +6108,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6292,7 +6293,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6388,11 +6389,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6564,7 +6565,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/vi.po b/editor/translations/vi.po index d6284d640e..2ed1d729c7 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -498,7 +498,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "" #: editor/connections_dialog.cpp @@ -908,11 +908,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1048,11 +1048,11 @@ msgid "Updating Scene" msgstr "" #: editor/editor_data.cpp -msgid "Storing local changes.." +msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "" #: editor/editor_data.cpp @@ -1121,7 +1121,7 @@ msgid "Show In File Manager" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." +msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp @@ -1383,12 +1383,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "" #: editor/editor_node.cpp @@ -1593,11 +1593,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1609,8 +1609,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "Lưu Scene vá»›i tên.." +msgid "Save Scene As..." +msgstr "Lưu Scene vá»›i tên..." #: editor/editor_node.cpp msgid "No" @@ -1661,7 +1661,7 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." +msgid "Quick Run Scene..." msgstr "" #: editor/editor_node.cpp @@ -1808,7 +1808,7 @@ msgid "Previous tab" msgstr "" #: editor/editor_node.cpp -msgid "Filter Files.." +msgid "Filter Files..." msgstr "" #: editor/editor_node.cpp @@ -1820,11 +1820,11 @@ msgid "New Scene" msgstr "Tạo Scene Má»›i" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "Tạo Scene Con.." +msgid "New Inherited Scene..." +msgstr "Tạo Scene Con..." #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "" #: editor/editor_node.cpp @@ -1844,15 +1844,15 @@ msgid "Open Recent" msgstr "" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "" #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2097,7 +2097,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2206,7 +2206,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2357,7 +2357,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2433,7 +2433,7 @@ msgid "Error requesting url: " msgstr "" #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp @@ -2450,7 +2450,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." +msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp @@ -2463,7 +2463,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2595,11 +2595,11 @@ msgid "Collapse all" msgstr "Thu gá»n tất cả" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "Äổi tên..." #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "Di chuyển đến..." #: editor/filesystem_dock.cpp @@ -2611,15 +2611,15 @@ msgid "Instance" msgstr "Thêm và o scene" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "Chỉnh sá»a các File phụ thuá»™c.." +msgid "Edit Dependencies..." +msgstr "Chỉnh sá»a các File phụ thuá»™c..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "Xem các scene sở hữu.." +msgid "View Owners..." +msgstr "Xem các scene sở hữu..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." +msgid "Duplicate..." msgstr "Nhân đôi..." #: editor/filesystem_dock.cpp @@ -2645,10 +2645,10 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "Äang quét file,\n" -"Chá» môt chút.." +"Chá» môt chút..." #: editor/filesystem_dock.cpp msgid "Move" @@ -2713,7 +2713,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2725,7 +2725,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2741,7 +2741,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2761,7 +2761,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3175,7 +3175,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3183,7 +3183,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3251,7 +3251,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3318,7 +3318,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3505,6 +3505,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3926,7 +3927,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4131,7 +4132,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4492,7 +4493,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4589,7 +4590,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4795,15 +4796,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5254,11 +5255,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5511,7 +5508,7 @@ msgid "Remove All" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5579,7 +5576,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5767,7 +5764,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5857,6 +5854,11 @@ msgid "Imported Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "KÃch thước font không hợp lệ." + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "" @@ -6045,8 +6047,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6074,7 +6076,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6258,7 +6260,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6354,11 +6356,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6529,7 +6531,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 45d2d81505..b04de228dd 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -12,9 +12,11 @@ # Bruce Guo <guoboism@hotmail.com>, 2016. # dragonandy <dragonandy@foxmail.com>, 2017-2018. # Geequlim <geequlim@gmail.com>, 2016-2018. +# jie Shi <meishijiemeimeimei@gmail.com>, 2018. # lalalaring <783482203@qq.com>, 2017. # Luo Jun <vipsbpig@gmail.com>, 2016-2017. # oberon-tonya <360119124@qq.com>, 2016. +# plumsky <x-wolf@163.com>, 2018. # Qichunren <whyruby@gmail.com>, 2017. # seanfy <everxiao@qq.com>, 2018. # sersoong <seraphim945@qq.com>, 2017-2018. @@ -28,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2018-05-03 08:59+0000\n" -"Last-Translator: Geequlim <geequlim@gmail.com>\n" +"PO-Revision-Date: 2018-05-11 03:34+0000\n" +"Last-Translator: plumsky <x-wolf@163.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\n" @@ -515,8 +517,8 @@ msgid "Disconnect '%s' from '%s'" msgstr "å–æ¶ˆ'%s'的连接'%s'" #: editor/connections_dialog.cpp -msgid "Connect.." -msgstr "连接信å·.." +msgid "Connect..." +msgstr "连接信å·..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_editor_plugin.cpp @@ -927,12 +929,12 @@ msgid "Move Audio Bus" msgstr "移动音频总线" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." -msgstr "将音频Bus布局ä¿å˜ä¸º.." +msgid "Save Audio Bus Layout As..." +msgstr "将音频Bus布局ä¿å˜ä¸º..." #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." -msgstr "新布局的ä½ç½®.." +msgid "Location for New Layout..." +msgstr "新布局的ä½ç½®..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -970,7 +972,7 @@ msgstr "å¦å˜ä¸º" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "将音频Bus布局ä¿å˜ä¸º.." +msgstr "将音频Bus布局ä¿å˜ä¸º..." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1067,12 +1069,12 @@ msgid "Updating Scene" msgstr "更新场景" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "ä¿å˜ä¿®æ”¹ä¸.." +msgid "Storing local changes..." +msgstr "ä¿å˜ä¿®æ”¹ä¸..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "更新场景ä¸.." +msgid "Updating scene..." +msgstr "更新场景ä¸..." #: editor/editor_data.cpp msgid "[empty]" @@ -1140,8 +1142,8 @@ msgid "Show In File Manager" msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -msgid "New Folder.." -msgstr "新建文件夹 .." +msgid "New Folder..." +msgstr "新建文件夹 ..." #: editor/editor_file_dialog.cpp msgid "Refresh" @@ -1401,20 +1403,20 @@ msgstr "清空输出" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "" +msgstr "项目导出失败,错误代ç " #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" msgstr "ä¿å˜èµ„æºå‡ºé”™ï¼" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." -msgstr "资æºå¦å˜ä¸º.." +msgid "Save Resource As..." +msgstr "资æºå¦å˜ä¸º..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." -msgstr "好å§.." +msgid "I see..." +msgstr "好å§..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -1634,12 +1636,12 @@ msgid "Open Base Scene" msgstr "打开父场景" #: editor/editor_node.cpp -msgid "Quick Open Scene.." -msgstr "快速打开场景.." +msgid "Quick Open Scene..." +msgstr "快速打开场景..." #: editor/editor_node.cpp -msgid "Quick Open Script.." -msgstr "快速打开脚本.." +msgid "Quick Open Script..." +msgstr "快速打开脚本..." #: editor/editor_node.cpp msgid "Save & Close" @@ -1650,8 +1652,8 @@ msgid "Save changes to '%s' before closing?" msgstr "在关é—å‰ä¿å˜æ›´æ”¹åˆ° %s å—?" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "场景å¦å˜ä¸º.." +msgid "Save Scene As..." +msgstr "场景å¦å˜ä¸º..." #: editor/editor_node.cpp msgid "No" @@ -1702,8 +1704,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "æ¤æ“ä½œæ— æ³•æ’¤é”€ï¼Œç¡®å®šè¦ç»§ç»å—?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "快速è¿è¡Œåœºæ™¯.." +msgid "Quick Run Scene..." +msgstr "快速è¿è¡Œåœºæ™¯..." #: editor/editor_node.cpp msgid "Quit" @@ -1850,8 +1852,8 @@ msgid "Previous tab" msgstr "上一个目录" #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "ç›é€‰æ–‡ä»¶.." +msgid "Filter Files..." +msgstr "ç›é€‰æ–‡ä»¶..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1862,12 +1864,12 @@ msgid "New Scene" msgstr "新建场景" #: editor/editor_node.cpp -msgid "New Inherited Scene.." -msgstr "从现有场景ä¸åˆ›å»º.." +msgid "New Inherited Scene..." +msgstr "从现有场景ä¸åˆ›å»º..." #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "打开场景.." +msgid "Open Scene..." +msgstr "打开场景..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1886,16 +1888,16 @@ msgid "Open Recent" msgstr "最近打开" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "转æ¢ä¸º.." +msgid "Convert To..." +msgstr "转æ¢ä¸º..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary(ç½‘æ ¼åº“).." +msgid "MeshLibrary..." +msgstr "MeshLibrary(ç½‘æ ¼åº“)..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "ç –å—集.." +msgid "TileSet..." +msgstr "ç –å—集..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2148,8 +2150,8 @@ msgid "Save the currently edited resource." msgstr "ä¿å˜å½“å‰ç¼–辑的资æºã€‚" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "å¦å˜ä¸º.." +msgid "Save As..." +msgstr "å¦å˜ä¸º..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2257,8 +2259,8 @@ msgid "Creating Mesh Previews" msgstr "åˆ›å»ºç½‘æ ¼é¢„è§ˆ" #: editor/editor_plugin.cpp -msgid "Thumbnail.." -msgstr "缩略图.." +msgid "Thumbnail..." +msgstr "缩略图..." #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2410,7 +2412,7 @@ msgid "(Current)" msgstr "(当å‰)" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "检索镜åƒï¼Œè¯·ç‰å¾…..." #: editor/export_template_manager.cpp @@ -2486,7 +2488,7 @@ msgid "Error requesting url: " msgstr "请求链接错误: " #: editor/export_template_manager.cpp -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "æ£åœ¨è¿žæŽ¥é•œåƒç½‘站。。" #: editor/export_template_manager.cpp @@ -2503,8 +2505,8 @@ msgstr "æ— æ³•è§£æž" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Connecting.." -msgstr "连接ä¸.." +msgid "Connecting..." +msgstr "连接ä¸..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -2516,7 +2518,7 @@ msgstr "已连接" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "æ£åœ¨è¯·æ±‚。。" #: editor/export_template_manager.cpp @@ -2648,12 +2650,12 @@ msgid "Collapse all" msgstr "收起所有" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "é‡å‘½å为..." #: editor/filesystem_dock.cpp -msgid "Move To.." -msgstr "移动.." +msgid "Move To..." +msgstr "移动..." #: editor/filesystem_dock.cpp msgid "Open Scene(s)" @@ -2664,16 +2666,16 @@ msgid "Instance" msgstr "创建实例节点" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." -msgstr "编辑ä¾èµ–.." +msgid "Edit Dependencies..." +msgstr "编辑ä¾èµ–..." #: editor/filesystem_dock.cpp -msgid "View Owners.." -msgstr "查看所有者.." +msgid "View Owners..." +msgstr "查看所有者..." #: editor/filesystem_dock.cpp -msgid "Duplicate.." -msgstr "æ‹·è´.." +msgid "Duplicate..." +msgstr "æ‹·è´..." #: editor/filesystem_dock.cpp msgid "Previous Directory" @@ -2698,7 +2700,7 @@ msgstr "将选ä¸çš„场景实例为选ä¸èŠ‚ç‚¹çš„å节点。" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" "æ‰«ææ–‡ä»¶ï¼Œ\n" "请ç¨å€™ã€‚" @@ -2766,8 +2768,8 @@ msgid "Import Scene" msgstr "导入场景" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." -msgstr "导入场景.." +msgid "Importing Scene..." +msgstr "导入场景..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -2778,8 +2780,8 @@ msgid "Generating for Mesh: " msgstr "æ£åœ¨ç”ŸæˆMesh: " #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." -msgstr "执行自定义脚本.." +msgid "Running Custom Script..." +msgstr "执行自定义脚本..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -2794,7 +2796,7 @@ msgid "Error running post-import script:" msgstr "åŽå¤„ç†è„šæœ¬è¿è¡Œå‘生错误:" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "ä¿å˜ä¸..." #: editor/import_dock.cpp @@ -2814,8 +2816,8 @@ msgid "Import As:" msgstr "导入为:" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." -msgstr "预设.." +msgid "Preset..." +msgstr "预设..." #: editor/import_dock.cpp msgid "Reimport" @@ -3232,16 +3234,16 @@ msgid "Transition Node" msgstr "过渡节点" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." -msgstr "导入动画.." +msgid "Import Animations..." +msgstr "导入动画..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "Edit Node Filters" msgstr "编辑节点ç›é€‰" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." -msgstr "ç›é€‰.." +msgid "Filters..." +msgstr "ç›é€‰..." #: editor/plugins/animation_tree_editor_plugin.cpp msgid "AnimationTree" @@ -3308,8 +3310,8 @@ msgid "Fetching:" msgstr "获å–:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." -msgstr "è§£æžä¸.." +msgid "Resolving..." +msgstr "è§£æžä¸..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" @@ -3375,8 +3377,8 @@ msgid "Site:" msgstr "站点:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." -msgstr "支æŒ.." +msgid "Support..." +msgstr "支æŒ..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -3565,8 +3567,9 @@ msgid "Use Rotation Snap" msgstr "使用旋转å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "设置å¸é™„.." +msgstr "设置å¸é™„..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -3661,14 +3664,12 @@ msgid "Show Guides" msgstr "显示引导" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Origin" msgstr "显示原点" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "1个视å£" +msgstr "显示视图窗å£" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -3961,7 +3962,7 @@ msgstr "Mesh(ç½‘æ ¼)æ²¡æœ‰è¡¨é¢æ¥åˆ›å»ºè½®å»“(outlines)ï¼" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "" +msgstr "ç½‘æ ¼åŽŸå§‹ç±»åž‹ä¸æ˜¯ PRIMITIVE_TRIANGLES(ä¸‰è§’å½¢ç½‘æ ¼)ï¼" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" @@ -3992,8 +3993,8 @@ msgid "Create Convex Collision Sibling" msgstr "创建凸(Convex)碰撞åŒçº§" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." -msgstr "åˆ›å»ºè½®å»“ç½‘æ ¼(Outline Mesh).." +msgid "Create Outline Mesh..." +msgstr "åˆ›å»ºè½®å»“ç½‘æ ¼(Outline Mesh)..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -4197,8 +4198,8 @@ msgid "Error loading image:" msgstr "åŠ è½½å›¾ç‰‡å‡ºé”™:" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." -msgstr "å›¾ç‰‡ä¸æ²¡æœ‰é€æ˜Žåº¦> 128çš„åƒç´ .." +msgid "No pixels with transparency > 128 in image..." +msgstr "å›¾ç‰‡ä¸æ²¡æœ‰é€æ˜Žåº¦> 128çš„åƒç´ ..." #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" @@ -4558,8 +4559,8 @@ msgid "Import Theme" msgstr "导入主题" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." -msgstr "主题å¦å˜ä¸º.." +msgid "Save Theme As..." +msgstr "主题å¦å˜ä¸º..." #: editor/plugins/script_editor_plugin.cpp msgid " Class Reference" @@ -4655,8 +4656,8 @@ msgstr "切æ¢è„šæœ¬é¢æ¿" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." -msgstr "查找.." +msgid "Find..." +msgstr "查找..." #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4863,16 +4864,16 @@ msgid "Find Previous" msgstr "查找上一项" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." -msgstr "替æ¢.." +msgid "Replace..." +msgstr "替æ¢..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." -msgstr "å‰å¾€å‡½æ•°.." +msgid "Goto Function..." +msgstr "å‰å¾€å‡½æ•°..." #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." -msgstr "å‰å¾€è¡Œ.." +msgid "Goto Line..." +msgstr "å‰å¾€è¡Œ..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5325,12 +5326,8 @@ msgid "Transform" msgstr "å˜æ¢" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "设置å¸é™„.." - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." -msgstr "å˜æ¢å¯¹è¯æ¡†.." +msgid "Transform Dialog..." +msgstr "å˜æ¢å¯¹è¯æ¡†..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -5582,8 +5579,8 @@ msgid "Remove All" msgstr "移除全部" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." -msgstr "编辑主题.." +msgid "Edit theme..." +msgstr "编辑主题..." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -5630,14 +5627,12 @@ msgid "Checked Item" msgstr "已选项目(Checked Item)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "æ·»åŠ é¡¹ç›®" +msgstr "å•选项目" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "已选项目(Checked Item)" +msgstr "已选å•选项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -5652,7 +5647,8 @@ msgid "Options" msgstr "选项" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +#, fuzzy +msgid "Has,Many,Options" msgstr "æœ‰ï¼Œå¾ˆå¤šï¼Œå‡ ä¸ªï¼Œé€‰é¡¹(Have,Many,Several,Options)ï¼" #: editor/plugins/theme_editor_plugin.cpp @@ -5843,8 +5839,8 @@ msgid "Presets" msgstr "预设" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." -msgstr "æ·»åŠ .." +msgid "Add..." +msgstr "æ·»åŠ ..." #: editor/project_export.cpp msgid "Resources" @@ -5933,6 +5929,11 @@ msgid "Imported Project" msgstr "已导入的项目" #: editor/project_manager.cpp +#, fuzzy +msgid "Invalid Project Name." +msgstr "项目åç§°:" + +#: editor/project_manager.cpp msgid "Couldn't create folder." msgstr "æ— æ³•åˆ›å»ºæ–‡ä»¶å¤¹ã€‚" @@ -6127,10 +6128,11 @@ msgid "Mouse Button" msgstr "é¼ æ ‡æŒ‰é”®" #: editor/project_settings_editor.cpp +#, fuzzy msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" -msgstr "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "æ— æ•ˆçš„æ“作å称。它ä¸èƒ½æ˜¯ç©ºçš„也ä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者 '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -6157,8 +6159,8 @@ msgid "Control+" msgstr "Ctrl+" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." -msgstr "按下一个键.." +msgid "Press a Key..." +msgstr "按下一个键..." #: editor/project_settings_editor.cpp msgid "Mouse Button Index:" @@ -6341,7 +6343,7 @@ msgid "Property:" msgstr "属性:" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "é‡å†™çš„......" #: editor/project_settings_editor.cpp @@ -6437,12 +6439,12 @@ msgid "Easing Out-In" msgstr "å缓入缓出" #: editor/property_editor.cpp -msgid "File.." -msgstr "文件.." +msgid "File..." +msgstr "文件..." #: editor/property_editor.cpp -msgid "Dir.." -msgstr "目录.." +msgid "Dir..." +msgstr "目录..." #: editor/property_editor.cpp msgid "Assign" @@ -6612,8 +6614,8 @@ msgid "This operation can't be done on instanced scenes." msgstr "æ¤æ“作ä¸èƒ½åº”用于实例化的场景。" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." -msgstr "将新场景å¦å˜ä¸º.." +msgid "Save New Scene As..." +msgstr "将新场景å¦å˜ä¸º..." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7323,7 +7325,7 @@ msgstr "拾å–è·ç¦»:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "ç±»åä¸èƒ½æ˜¯ä¿ç•™å…³é”®å—" #: modules/mono/editor/godotsharp_editor.cpp msgid "Generating solution..." @@ -7992,7 +7994,7 @@ msgstr "path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Spatial节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment需è¦ä¸€ä¸ªçŽ¯å¢ƒèµ„æºã€‚" #: scene/3d/scenario_fx.cpp msgid "" @@ -8004,6 +8006,8 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"这个WorldEnvironmentè¢«å¿½ç•¥ã€‚æ·»åŠ æ‘„åƒå¤´ï¼ˆç”¨äºŽ3D场景)或将æ¤çŽ¯å¢ƒçš„èƒŒæ™¯æ¨¡å¼è®¾ç½®" +"为画布(用于2D场景)。" #: scene/3d/sprite_3d.cpp msgid "" @@ -8268,8 +8272,8 @@ msgstr "å—体大å°éžæ³•。" #~ msgid "Exporting for %s" #~ msgstr "æ£åœ¨å¯¼å‡º %s" -#~ msgid "Setting Up.." -#~ msgstr "é…ç½®.." +#~ msgid "Setting Up..." +#~ msgstr "é…ç½®..." #~ msgid "Error loading scene." #~ msgstr "åŠ è½½åœºæ™¯å‡ºé”™ã€‚" @@ -8329,8 +8333,8 @@ msgstr "å—体大å°éžæ³•。" #~ msgid "Info" #~ msgstr "ä¿¡æ¯" -#~ msgid "Re-Import.." -#~ msgstr "釿–°å¯¼å…¥.." +#~ msgid "Re-Import..." +#~ msgstr "釿–°å¯¼å…¥..." #~ msgid "No bit masks to import!" #~ msgstr "没有è¦å¯¼å…¥çš„bit masksï¼" @@ -8721,14 +8725,14 @@ msgstr "å—体大å°éžæ³•。" #~ msgid "Zoom (%):" #~ msgstr "缩放(%):" -#~ msgid "Skeleton.." -#~ msgstr "骨骼.." +#~ msgid "Skeleton..." +#~ msgstr "骨骼..." #~ msgid "Zoom Reset" #~ msgstr "é‡ç½®ç¼©æ”¾" -#~ msgid "Zoom Set.." -#~ msgstr "设置缩放.." +#~ msgid "Zoom Set..." +#~ msgstr "设置缩放..." #~ msgid "Set a Value" #~ msgstr "设置值" @@ -9196,8 +9200,8 @@ msgstr "å—体大å°éžæ³•。" #~ msgid "Export Project PCK" #~ msgstr "导出项目PCK文件" -#~ msgid "Export.." -#~ msgstr "导出.." +#~ msgid "Export..." +#~ msgstr "导出..." #~ msgid "Project Export" #~ msgstr "项目导出" @@ -9286,7 +9290,7 @@ msgstr "å—体大å°éžæ³•。" #~ msgid "Reload Tool Script (Soft)" #~ msgstr "釿–°åŠ è½½Tool脚本(Soft)" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "编辑事件连接" #~ msgid "Set Params" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index f4c6a39788..2a0941da8e 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -534,7 +534,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "ç”± '%s' 連到 '%s'" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "連到..." #: editor/connections_dialog.cpp @@ -972,11 +972,11 @@ msgid "Move Audio Bus" msgstr "移動" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1126,11 +1126,11 @@ msgid "Updating Scene" msgstr "æ›´æ–°å ´æ™¯" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "å„²å˜æœ¬åœ°æ›´æ”¹.." +msgid "Storing local changes..." +msgstr "å„²å˜æœ¬åœ°æ›´æ”¹..." #: editor/editor_data.cpp -msgid "Updating scene.." +msgid "Updating scene..." msgstr "æ£åœ¨æ›´æ–°å ´æ™¯..." #: editor/editor_data.cpp @@ -1203,7 +1203,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "新增資料夾" #: editor/editor_file_dialog.cpp @@ -1481,12 +1481,12 @@ msgid "Error saving resource!" msgstr "儲å˜è³‡æºæ™‚出ç¾éŒ¯èª¤ï¼" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "把資æºå¦å˜ç‚º..." #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "如來如æ¤" #: editor/editor_node.cpp @@ -1713,11 +1713,11 @@ msgid "Open Base Scene" msgstr "é–‹å•ŸåŸºç¤Žå ´æ™¯" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "å¿«é€Ÿé–‹å•Ÿå ´æ™¯ï¼Žï¼Ž" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "快速開啟腳本.." #: editor/editor_node.cpp @@ -1731,7 +1731,7 @@ msgid "Save changes to '%s' before closing?" msgstr "關閉å‰è¦å…ˆå„²å˜å° '%s' 任何更改嗎?" #: editor/editor_node.cpp -msgid "Save Scene As.." +msgid "Save Scene As..." msgstr "æŠŠå ´æ™¯å¦å˜ç‚º" #: editor/editor_node.cpp @@ -1783,8 +1783,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "快速é‹è¡Œå ´æ™¯.." +msgid "Quick Run Scene..." +msgstr "快速é‹è¡Œå ´æ™¯..." #: editor/editor_node.cpp msgid "Quit" @@ -1943,8 +1943,8 @@ msgstr "上一個tab" #: editor/editor_node.cpp #, fuzzy -msgid "Filter Files.." -msgstr "ç¯©é¸æª”案.." +msgid "Filter Files..." +msgstr "ç¯©é¸æª”案..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1955,11 +1955,11 @@ msgid "New Scene" msgstr "æ–°å¢žå ´æ™¯" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." +msgid "Open Scene..." msgstr "é–‹å•“å ´æ™¯" #: editor/editor_node.cpp @@ -1979,16 +1979,16 @@ msgid "Open Recent" msgstr "開啓最近的" #: editor/editor_node.cpp -msgid "Convert To.." +msgid "Convert To..." msgstr "轉為..." #: editor/editor_node.cpp -msgid "MeshLibrary.." -msgstr "MeshLibrary.." +msgid "MeshLibrary..." +msgstr "MeshLibrary..." #: editor/editor_node.cpp -msgid "TileSet.." -msgstr "TileSet.." +msgid "TileSet..." +msgstr "TileSet..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -2236,8 +2236,8 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." -msgstr "å¦å˜ç‚º.." +msgid "Save As..." +msgstr "å¦å˜ç‚º..." #: editor/editor_node.cpp msgid "Go to the previous edited object in history." @@ -2351,7 +2351,7 @@ msgstr "" #: editor/editor_plugin.cpp #, fuzzy -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "縮圖" #: editor/editor_plugin_settings.cpp @@ -2507,7 +2507,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2591,7 +2591,7 @@ msgstr "請求時出ç¾éŒ¯èª¤" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "連到..." #: editor/export_template_manager.cpp @@ -2610,7 +2610,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "連到..." #: editor/export_template_manager.cpp @@ -2625,7 +2625,7 @@ msgstr "連到" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "請求ä¸..." #: editor/export_template_manager.cpp @@ -2771,13 +2771,13 @@ msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Rename.." -msgstr "釿–°å‘½å.." +msgid "Rename..." +msgstr "釿–°å‘½å..." #: editor/filesystem_dock.cpp #, fuzzy -msgid "Move To.." -msgstr "æ¬åˆ°.." +msgid "Move To..." +msgstr "æ¬åˆ°..." #: editor/filesystem_dock.cpp #, fuzzy @@ -2789,16 +2789,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製" #: editor/filesystem_dock.cpp @@ -2824,7 +2824,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2834,7 +2834,7 @@ msgstr "移動" #: editor/filesystem_dock.cpp editor/plugins/animation_tree_editor_plugin.cpp #: editor/project_manager.cpp msgid "Rename" -msgstr "釿–°å‘½å.." +msgstr "釿–°å‘½å..." #: editor/groups_editor.cpp msgid "Add to Group" @@ -2891,7 +2891,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2903,7 +2903,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2919,8 +2919,8 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." -msgstr "儲å˜ä¸.." +msgid "Saving..." +msgstr "儲å˜ä¸..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -2941,7 +2941,7 @@ msgid "Import As:" msgstr "å°Žå…¥" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3364,7 +3364,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3372,7 +3372,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3444,7 +3444,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3511,7 +3511,7 @@ msgid "Site:" msgstr "地å€:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3701,6 +3701,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -4129,7 +4130,7 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -4281,7 +4282,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "å„²å˜æœ¬åœ°æ›´æ”¹.." +msgstr "å„²å˜æœ¬åœ°æ›´æ”¹..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4337,7 +4338,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4704,7 +4705,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4806,7 +4807,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -5019,15 +5020,15 @@ msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5491,11 +5492,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5751,7 +5748,7 @@ msgid "Remove All" msgstr "移除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5819,8 +5816,9 @@ msgid "Options" msgstr "é¸é …" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" -msgstr "" +#, fuzzy +msgid "Has,Many,Options" +msgstr "é¸é …" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -5947,7 +5945,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Tile Set" -msgstr "TileSet.." +msgstr "TileSet..." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6014,7 +6012,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "æ·»åŠ ..." #: editor/project_export.cpp @@ -6109,6 +6107,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "無效å稱" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "無法新增資料夾" @@ -6303,8 +6306,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6332,7 +6335,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6519,7 +6522,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6616,11 +6619,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6798,7 +6801,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -7331,7 +7334,7 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "Dynamic Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" @@ -7340,12 +7343,12 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp #, fuzzy msgid "GDNativeLibrary" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Library" -msgstr "MeshLibrary.." +msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" @@ -8452,7 +8455,7 @@ msgstr "無效å—åž‹" #~ msgid "Cannot go into subdir:" #~ msgstr "無法進入次è¦è³‡æ–™å¤¾" -#~ msgid "Edit Connections.." +#~ msgid "Edit Connections..." #~ msgstr "編輯連接" #~ msgid "Live Editing" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index ccbd45bf31..c38ab9f25b 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -510,7 +510,7 @@ msgid "Disconnect '%s' from '%s'" msgstr "å°‡ '%s' 從 '%s' 䏿–·é€£æŽ¥" #: editor/connections_dialog.cpp -msgid "Connect.." +msgid "Connect..." msgstr "連接..." #: editor/connections_dialog.cpp @@ -936,11 +936,11 @@ msgid "Move Audio Bus" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Save Audio Bus Layout As.." +msgid "Save Audio Bus Layout As..." msgstr "" #: editor/editor_audio_buses.cpp -msgid "Location for New Layout.." +msgid "Location for New Layout..." msgstr "" #: editor/editor_audio_buses.cpp @@ -1076,12 +1076,12 @@ msgid "Updating Scene" msgstr "æ›´æ–°å ´æ™¯" #: editor/editor_data.cpp -msgid "Storing local changes.." -msgstr "æ£åœ¨å„²å˜è®Šæ›´.." +msgid "Storing local changes..." +msgstr "æ£åœ¨å„²å˜è®Šæ›´..." #: editor/editor_data.cpp -msgid "Updating scene.." -msgstr "æ›´æ–°å ´æ™¯ä¸.." +msgid "Updating scene..." +msgstr "æ›´æ–°å ´æ™¯ä¸..." #: editor/editor_data.cpp msgid "[empty]" @@ -1151,7 +1151,7 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy -msgid "New Folder.." +msgid "New Folder..." msgstr "新增資料夾" #: editor/editor_file_dialog.cpp @@ -1415,12 +1415,12 @@ msgid "Error saving resource!" msgstr "" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -msgid "Save Resource As.." +msgid "Save Resource As..." msgstr "" #: editor/editor_node.cpp editor/plugins/spatial_editor_plugin.cpp #: editor/scene_tree_dock.cpp -msgid "I see.." +msgid "I see..." msgstr "我知é“了" #: editor/editor_node.cpp @@ -1626,11 +1626,11 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -msgid "Quick Open Scene.." +msgid "Quick Open Scene..." msgstr "å¿«é€Ÿé–‹å•Ÿå ´æ™¯" #: editor/editor_node.cpp -msgid "Quick Open Script.." +msgid "Quick Open Script..." msgstr "" #: editor/editor_node.cpp @@ -1643,8 +1643,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -msgid "Save Scene As.." -msgstr "å¦å˜å ´æ™¯ç‚º.." +msgid "Save Scene As..." +msgstr "å¦å˜å ´æ™¯ç‚º..." #: editor/editor_node.cpp msgid "No" @@ -1696,8 +1696,8 @@ msgid "This action cannot be undone. Revert anyway?" msgstr "æ¤æ“作無法復原, 確定è¦é‚„原嗎?" #: editor/editor_node.cpp -msgid "Quick Run Scene.." -msgstr "å¿«é€ŸåŸ·è¡Œå ´æ™¯.." +msgid "Quick Run Scene..." +msgstr "å¿«é€ŸåŸ·è¡Œå ´æ™¯..." #: editor/editor_node.cpp msgid "Quit" @@ -1827,7 +1827,7 @@ msgstr "" #: editor/editor_node.cpp #, fuzzy msgid "Add a new scene." -msgstr "æ›´æ–°å ´æ™¯ä¸.." +msgstr "æ›´æ–°å ´æ™¯ä¸..." #: editor/editor_node.cpp #, fuzzy @@ -1847,8 +1847,8 @@ msgid "Previous tab" msgstr "上個分é " #: editor/editor_node.cpp -msgid "Filter Files.." -msgstr "éŽæ¿¾æª”案.." +msgid "Filter Files..." +msgstr "éŽæ¿¾æª”案..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -1859,12 +1859,12 @@ msgid "New Scene" msgstr "" #: editor/editor_node.cpp -msgid "New Inherited Scene.." +msgid "New Inherited Scene..." msgstr "" #: editor/editor_node.cpp -msgid "Open Scene.." -msgstr "é–‹å•Ÿå ´æ™¯.." +msgid "Open Scene..." +msgstr "é–‹å•Ÿå ´æ™¯..." #: editor/editor_node.cpp msgid "Save Scene" @@ -1883,15 +1883,15 @@ msgid "Open Recent" msgstr "開啟最近å˜å–" #: editor/editor_node.cpp -msgid "Convert To.." -msgstr "è½‰æ›æˆ.." +msgid "Convert To..." +msgstr "è½‰æ›æˆ..." #: editor/editor_node.cpp -msgid "MeshLibrary.." +msgid "MeshLibrary..." msgstr "" #: editor/editor_node.cpp -msgid "TileSet.." +msgid "TileSet..." msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp @@ -2137,7 +2137,7 @@ msgid "Save the currently edited resource." msgstr "" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -msgid "Save As.." +msgid "Save As..." msgstr "" #: editor/editor_node.cpp @@ -2248,7 +2248,7 @@ msgid "Creating Mesh Previews" msgstr "" #: editor/editor_plugin.cpp -msgid "Thumbnail.." +msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp @@ -2399,7 +2399,7 @@ msgid "(Current)" msgstr "" #: editor/export_template_manager.cpp -msgid "Retrieving mirrors, please wait.." +msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp @@ -2479,7 +2479,7 @@ msgstr "è¼‰å…¥å ´æ™¯æ™‚ç™¼ç”ŸéŒ¯èª¤" #: editor/export_template_manager.cpp #, fuzzy -msgid "Connecting to Mirror.." +msgid "Connecting to Mirror..." msgstr "連接..." #: editor/export_template_manager.cpp @@ -2498,7 +2498,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy -msgid "Connecting.." +msgid "Connecting..." msgstr "連接..." #: editor/export_template_manager.cpp @@ -2513,7 +2513,7 @@ msgstr "連接..." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Requesting.." +msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp @@ -2653,11 +2653,11 @@ msgid "Collapse all" msgstr "" #: editor/filesystem_dock.cpp -msgid "Rename.." +msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -msgid "Move To.." +msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp @@ -2670,16 +2670,16 @@ msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -msgid "Edit Dependencies.." +msgid "Edit Dependencies..." msgstr "" #: editor/filesystem_dock.cpp -msgid "View Owners.." +msgid "View Owners..." msgstr "" #: editor/filesystem_dock.cpp #, fuzzy -msgid "Duplicate.." +msgid "Duplicate..." msgstr "複製動畫關éµç•«æ ¼" #: editor/filesystem_dock.cpp @@ -2705,7 +2705,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" -"Please Wait.." +"Please Wait..." msgstr "" #: editor/filesystem_dock.cpp @@ -2772,7 +2772,7 @@ msgid "Import Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Importing Scene.." +msgid "Importing Scene..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2784,7 +2784,7 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Running Custom Script.." +msgid "Running Custom Script..." msgstr "" #: editor/import/resource_importer_scene.cpp @@ -2800,7 +2800,7 @@ msgid "Error running post-import script:" msgstr "" #: editor/import/resource_importer_scene.cpp -msgid "Saving.." +msgid "Saving..." msgstr "" #: editor/import_dock.cpp @@ -2820,7 +2820,7 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset.." +msgid "Preset..." msgstr "" #: editor/import_dock.cpp @@ -3112,7 +3112,7 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp #, fuzzy msgid "Edit Filters" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -3237,7 +3237,7 @@ msgid "Transition Node" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Import Animations.." +msgid "Import Animations..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3245,7 +3245,7 @@ msgid "Edit Node Filters" msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp -msgid "Filters.." +msgid "Filters..." msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp @@ -3263,7 +3263,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "View Files" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" @@ -3314,7 +3314,7 @@ msgid "Fetching:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Resolving.." +msgid "Resolving..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3382,7 +3382,7 @@ msgid "Site:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Support.." +msgid "Support..." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp @@ -3571,6 +3571,7 @@ msgid "Use Rotation Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." msgstr "" @@ -3997,18 +3998,18 @@ msgid "Create Convex Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Outline Mesh.." +msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV2" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" @@ -4149,7 +4150,7 @@ msgstr "" #: editor/plugins/navigation_mesh_generator.cpp #, fuzzy msgid "Marking walkable triangles..." -msgstr "æ£åœ¨å„²å˜è®Šæ›´.." +msgstr "æ£åœ¨å„²å˜è®Šæ›´..." #: editor/plugins/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." @@ -4205,7 +4206,7 @@ msgid "Error loading image:" msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp -msgid "No pixels with transparency > 128 in image.." +msgid "No pixels with transparency > 128 in image..." msgstr "" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -4571,7 +4572,7 @@ msgid "Import Theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -msgid "Save Theme As.." +msgid "Save Theme As..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4669,7 +4670,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -msgid "Find.." +msgid "Find..." msgstr "" #: editor/plugins/script_editor_plugin.cpp @@ -4765,7 +4766,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert Case" -msgstr "è½‰æ›æˆ.." +msgstr "è½‰æ›æˆ..." #: editor/plugins/script_text_editor.cpp msgid "Uppercase" @@ -4869,27 +4870,27 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Uppercase" -msgstr "è½‰æ›æˆ.." +msgstr "è½‰æ›æˆ..." #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Convert To Lowercase" -msgstr "è½‰æ›æˆ.." +msgstr "è½‰æ›æˆ..." #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Replace.." +msgid "Replace..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Function.." +msgid "Goto Function..." msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Goto Line.." +msgid "Goto Line..." msgstr "" #: editor/plugins/script_text_editor.cpp @@ -5079,7 +5080,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Material Changes" -msgstr "æ£åœ¨å„²å˜è®Šæ›´.." +msgstr "æ£åœ¨å„²å˜è®Šæ›´..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" @@ -5192,7 +5193,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "View FPS" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Half Resolution" @@ -5346,11 +5347,7 @@ msgid "Transform" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Configure Snap.." -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Transform Dialog.." +msgid "Transform Dialog..." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp @@ -5604,7 +5601,7 @@ msgid "Remove All" msgstr "移除" #: editor/plugins/theme_editor_plugin.cpp -msgid "Edit theme.." +msgid "Edit theme..." msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5672,7 +5669,7 @@ msgid "Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -msgid "Have,Many,Several,Options!" +msgid "Has,Many,Options" msgstr "" #: editor/plugins/theme_editor_plugin.cpp @@ -5863,7 +5860,7 @@ msgid "Presets" msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp -msgid "Add.." +msgid "Add..." msgstr "" #: editor/project_export.cpp @@ -5957,6 +5954,11 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy +msgid "Invalid Project Name." +msgstr "ä¸èƒ½ä½¿ç”¨çš„å稱。" + +#: editor/project_manager.cpp +#, fuzzy msgid "Couldn't create folder." msgstr "無法新增資料夾" @@ -6148,8 +6150,8 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "" -"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " -"'\"'" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." msgstr "" #: editor/project_settings_editor.cpp @@ -6177,7 +6179,7 @@ msgid "Control+" msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -msgid "Press a Key.." +msgid "Press a Key..." msgstr "" #: editor/project_settings_editor.cpp @@ -6365,7 +6367,7 @@ msgid "Property:" msgstr "" #: editor/project_settings_editor.cpp -msgid "Override For.." +msgid "Override For..." msgstr "" #: editor/project_settings_editor.cpp @@ -6427,7 +6429,7 @@ msgstr "" #: editor/project_settings_editor.cpp #, fuzzy msgid "Filter mode:" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/project_settings_editor.cpp msgid "Locales:" @@ -6462,11 +6464,11 @@ msgid "Easing Out-In" msgstr "" #: editor/property_editor.cpp -msgid "File.." +msgid "File..." msgstr "" #: editor/property_editor.cpp -msgid "Dir.." +msgid "Dir..." msgstr "" #: editor/property_editor.cpp @@ -6496,7 +6498,7 @@ msgstr "" #: editor/property_editor.cpp #, fuzzy msgid "Convert To %s" -msgstr "è½‰æ›æˆ.." +msgstr "è½‰æ›æˆ..." #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -6638,7 +6640,7 @@ msgid "This operation can't be done on instanced scenes." msgstr "" #: editor/scene_tree_dock.cpp -msgid "Save New Scene As.." +msgid "Save New Scene As..." msgstr "" #: editor/scene_tree_dock.cpp @@ -6745,7 +6747,7 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy msgid "Filter nodes" -msgstr "éŽæ¿¾æª”案.." +msgstr "éŽæ¿¾æª”案..." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." diff --git a/main/main.cpp b/main/main.cpp index 70713e2dd8..119d1ee345 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -263,6 +263,7 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print("Standalone tools:\n"); OS::get_singleton()->print(" -s, --script <script> Run a script.\n"); + OS::get_singleton()->print(" --check-only Only parse for errors and quit (use with --script).\n"); #ifdef TOOLS_ENABLED OS::get_singleton()->print(" --export <target> Export the project using the given export target. Export only main pack if path ends with .pck or .zip'.\n"); OS::get_singleton()->print(" --export-debug <target> Like --export, but use debug template.\n"); @@ -1239,6 +1240,7 @@ bool Main::start() { String test; String _export_preset; bool export_debug = false; + bool check_only = false; main_timer_sync.init(OS::get_singleton()->get_ticks_usec()); @@ -1261,6 +1263,8 @@ bool Main::start() { bool parsed_pair = true; if (args[i] == "-s" || args[i] == "--script") { script = args[i + 1]; + } else if (args[i] == "--check-only") { + check_only = true; } else if (args[i] == "--test") { test = args[i + 1]; #ifdef TOOLS_ENABLED @@ -1383,6 +1387,10 @@ bool Main::start() { ERR_EXPLAIN("Can't load script: " + script); ERR_FAIL_COND_V(script_res.is_null(), false); + if (check_only) { + return false; + } + if (script_res->can_instance() /*&& script_res->inherits_from("SceneTreeScripted")*/) { StringName instance_type = script_res->get_instance_base_type(); diff --git a/misc/scripts/make_icons.sh b/misc/scripts/make_icons.sh index 71037cd1c3..5f3ea40d6a 100644 --- a/misc/scripts/make_icons.sh +++ b/misc/scripts/make_icons.sh @@ -1,5 +1,24 @@ -convert -resize 32x32 ../../icon.svg icon32.ico -convert -resize 32x32 ../../icon.svg icon32.icns -for s in 16 24 32 64 96 128 256; do convert -resize ${s}x$s ../../icon.svg icon$s.png; done -zip icons.zip icon*.png -rm icon*.png +# Generate .ico, .icns and .zip set of icons for Steam + +# Make icons with transparent backgrounds and all sizes +for s in 16 24 32 48 64 128 256 512 1024; do + convert -resize ${s}x$s -antialias \ + -background transparent \ + ../../icon.svg icon$s.png +done + +# 16px tga file for library +convert icon16.png icon16.tga + +# zip for Linux +zip godot-icons.zip icon*.png + +# ico for Windows +# Not including biggest ones or it blows up in size +icotool -c -o godot-icon.ico icon{16,24,32,48,64,128,256}.png + +# icns for macOS +# Only some sizes: http://iconhandbook.co.uk/reference/chart/osx/ +png2icns godot-icon.icns icon{16,32,128,256,512,1024}.png + +rm -f icon*.png diff --git a/modules/bmp/config.py b/modules/bmp/config.py index fb920482f5..1c8cd12a2d 100644 --- a/modules/bmp/config.py +++ b/modules/bmp/config.py @@ -1,7 +1,5 @@ - -def can_build(platform): +def can_build(env, platform): return True - def configure(env): pass diff --git a/modules/bullet/config.py b/modules/bullet/config.py index 0a31c2e503..92dbcf5cb0 100644 --- a/modules/bullet/config.py +++ b/modules/bullet/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/csg/config.py b/modules/csg/config.py index 5e1d916790..38ccc66d91 100644 --- a/modules/csg/config.py +++ b/modules/csg/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/csg/register_types.cpp b/modules/csg/register_types.cpp index 020724ee59..0dea09808a 100644 --- a/modules/csg/register_types.cpp +++ b/modules/csg/register_types.cpp @@ -30,8 +30,8 @@ #include "register_types.h" -#include "csg_shape.h" #include "csg_gizmos.h" +#include "csg_shape.h" void register_csg_types() { @@ -51,9 +51,7 @@ void register_csg_types() { EditorPlugins::add_by_type<EditorPluginCSG>(); #endif #endif - } void unregister_csg_types() { - } diff --git a/modules/dds/config.py b/modules/dds/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/dds/config.py +++ b/modules/dds/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/enet/config.py b/modules/enet/config.py index 8031fbb4b6..3e30bbe778 100644 --- a/modules/enet/config.py +++ b/modules/enet/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/etc/config.py b/modules/etc/config.py index 395fc1bb02..098f1eafa9 100644 --- a/modules/etc/config.py +++ b/modules/etc/config.py @@ -1,9 +1,5 @@ -def can_build(platform): - return True +def can_build(env, platform): + return env['tools'] def configure(env): - # Tools only, disabled for non-tools - # TODO: Find a cleaner way to achieve that - if not env['tools']: - env['module_etc_enabled'] = False - env.disabled_modules.append("etc") + pass diff --git a/modules/freetype/config.py b/modules/freetype/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/freetype/config.py +++ b/modules/freetype/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/gdnative/config.py b/modules/gdnative/config.py index 68148c4d87..626e9239f8 100644 --- a/modules/gdnative/config.py +++ b/modules/gdnative/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h index cfbe16fa7d..f28ba352ab 100644 --- a/modules/gdnative/include/nativescript/godot_nativescript.h +++ b/modules/gdnative/include/nativescript/godot_nativescript.h @@ -43,6 +43,9 @@ typedef enum { GODOT_METHOD_RPC_MODE_SYNC, GODOT_METHOD_RPC_MODE_MASTER, GODOT_METHOD_RPC_MODE_SLAVE, + GODOT_METHOD_RPC_MODE_REMOTESYNC, + GODOT_METHOD_RPC_MODE_MASTERSYNC, + GODOT_METHOD_RPC_MODE_SLAVESYNC, } godot_method_rpc_mode; typedef enum { diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index cf8977f3ea..d6abbc1bcf 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -747,7 +747,7 @@ Ref<Script> NativeScriptInstance::get_script() const { return script; } -NativeScriptInstance::RPCMode NativeScriptInstance::get_rpc_mode(const StringName &p_method) const { +MultiplayerAPI::RPCMode NativeScriptInstance::get_rpc_mode(const StringName &p_method) const { NativeScriptDesc *script_data = GET_SCRIPT_DESC(); @@ -757,27 +757,33 @@ NativeScriptInstance::RPCMode NativeScriptInstance::get_rpc_mode(const StringNam if (E) { switch (E->get().rpc_mode) { case GODOT_METHOD_RPC_MODE_DISABLED: - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; case GODOT_METHOD_RPC_MODE_REMOTE: - return RPC_MODE_REMOTE; + return MultiplayerAPI::RPC_MODE_REMOTE; case GODOT_METHOD_RPC_MODE_SYNC: - return RPC_MODE_SYNC; + return MultiplayerAPI::RPC_MODE_SYNC; case GODOT_METHOD_RPC_MODE_MASTER: - return RPC_MODE_MASTER; + return MultiplayerAPI::RPC_MODE_MASTER; case GODOT_METHOD_RPC_MODE_SLAVE: - return RPC_MODE_SLAVE; + return MultiplayerAPI::RPC_MODE_SLAVE; + case GODOT_METHOD_RPC_MODE_REMOTESYNC: + return MultiplayerAPI::RPC_MODE_REMOTESYNC; + case GODOT_METHOD_RPC_MODE_MASTERSYNC: + return MultiplayerAPI::RPC_MODE_MASTERSYNC; + case GODOT_METHOD_RPC_MODE_SLAVESYNC: + return MultiplayerAPI::RPC_MODE_SLAVESYNC; default: - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } } script_data = script_data->base_data; } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } -NativeScriptInstance::RPCMode NativeScriptInstance::get_rset_mode(const StringName &p_variable) const { +MultiplayerAPI::RPCMode NativeScriptInstance::get_rset_mode(const StringName &p_variable) const { NativeScriptDesc *script_data = GET_SCRIPT_DESC(); @@ -787,24 +793,24 @@ NativeScriptInstance::RPCMode NativeScriptInstance::get_rset_mode(const StringNa if (E) { switch (E.get().rset_mode) { case GODOT_METHOD_RPC_MODE_DISABLED: - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; case GODOT_METHOD_RPC_MODE_REMOTE: - return RPC_MODE_REMOTE; + return MultiplayerAPI::RPC_MODE_REMOTE; case GODOT_METHOD_RPC_MODE_SYNC: - return RPC_MODE_SYNC; + return MultiplayerAPI::RPC_MODE_SYNC; case GODOT_METHOD_RPC_MODE_MASTER: - return RPC_MODE_MASTER; + return MultiplayerAPI::RPC_MODE_MASTER; case GODOT_METHOD_RPC_MODE_SLAVE: - return RPC_MODE_SLAVE; + return MultiplayerAPI::RPC_MODE_SLAVE; default: - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } } script_data = script_data->base_data; } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } ScriptLanguage *NativeScriptInstance::get_language() { diff --git a/modules/gdnative/nativescript/nativescript.h b/modules/gdnative/nativescript/nativescript.h index 68a8126a32..b47962dc37 100644 --- a/modules/gdnative/nativescript/nativescript.h +++ b/modules/gdnative/nativescript/nativescript.h @@ -196,8 +196,8 @@ public: virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); virtual void notification(int p_notification); virtual Ref<Script> get_script() const; - virtual RPCMode get_rpc_mode(const StringName &p_method) const; - virtual RPCMode get_rset_mode(const StringName &p_variable) const; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; virtual ScriptLanguage *get_language(); virtual void call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount); diff --git a/modules/gdnative/pluginscript/pluginscript_instance.cpp b/modules/gdnative/pluginscript/pluginscript_instance.cpp index 931ab0bfe4..13026e8e7a 100644 --- a/modules/gdnative/pluginscript/pluginscript_instance.cpp +++ b/modules/gdnative/pluginscript/pluginscript_instance.cpp @@ -138,11 +138,11 @@ void PluginScriptInstance::notification(int p_notification) { _desc->notification(_data, p_notification); } -ScriptInstance::RPCMode PluginScriptInstance::get_rpc_mode(const StringName &p_method) const { +MultiplayerAPI::RPCMode PluginScriptInstance::get_rpc_mode(const StringName &p_method) const { return _script->get_rpc_mode(p_method); } -ScriptInstance::RPCMode PluginScriptInstance::get_rset_mode(const StringName &p_variable) const { +MultiplayerAPI::RPCMode PluginScriptInstance::get_rset_mode(const StringName &p_variable) const { return _script->get_rset_mode(p_variable); } diff --git a/modules/gdnative/pluginscript/pluginscript_instance.h b/modules/gdnative/pluginscript/pluginscript_instance.h index 3c7b360ad9..8be6a4ccaa 100644 --- a/modules/gdnative/pluginscript/pluginscript_instance.h +++ b/modules/gdnative/pluginscript/pluginscript_instance.h @@ -76,8 +76,8 @@ public: void set_path(const String &p_path); - virtual RPCMode get_rpc_mode(const StringName &p_method) const; - virtual RPCMode get_rset_mode(const StringName &p_variable) const; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; virtual void refcount_incremented(); virtual bool refcount_decremented(); diff --git a/modules/gdnative/pluginscript/pluginscript_script.cpp b/modules/gdnative/pluginscript/pluginscript_script.cpp index 5ae7926f1b..eb2e7903e5 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.cpp +++ b/modules/gdnative/pluginscript/pluginscript_script.cpp @@ -245,9 +245,9 @@ Error PluginScript::reload(bool p_keep_state) { // rpc_mode is passed as an optional field and is not part of MethodInfo Variant var = v["rpc_mode"]; if (var == Variant()) { - _methods_rpc_mode[mi.name] = ScriptInstance::RPC_MODE_DISABLED; + _methods_rpc_mode[mi.name] = MultiplayerAPI::RPC_MODE_DISABLED; } else { - _methods_rpc_mode[mi.name] = ScriptInstance::RPCMode(int(var)); + _methods_rpc_mode[mi.name] = MultiplayerAPI::RPCMode(int(var)); } } Array *signals = (Array *)&manifest.signals; @@ -265,9 +265,9 @@ Error PluginScript::reload(bool p_keep_state) { // rset_mode is passed as an optional field and is not part of PropertyInfo Variant var = v["rset_mode"]; if (var == Variant()) { - _methods_rpc_mode[pi.name] = ScriptInstance::RPC_MODE_DISABLED; + _methods_rpc_mode[pi.name] = MultiplayerAPI::RPC_MODE_DISABLED; } else { - _methods_rpc_mode[pi.name] = ScriptInstance::RPCMode(int(var)); + _methods_rpc_mode[pi.name] = MultiplayerAPI::RPCMode(int(var)); } } // Manifest's attributes must be explicitly freed @@ -402,23 +402,23 @@ int PluginScript::get_member_line(const StringName &p_member) const { return -1; } -ScriptInstance::RPCMode PluginScript::get_rpc_mode(const StringName &p_method) const { - ASSERT_SCRIPT_VALID_V(ScriptInstance::RPC_MODE_DISABLED); - const Map<StringName, ScriptInstance::RPCMode>::Element *e = _methods_rpc_mode.find(p_method); +MultiplayerAPI::RPCMode PluginScript::get_rpc_mode(const StringName &p_method) const { + ASSERT_SCRIPT_VALID_V(MultiplayerAPI::RPC_MODE_DISABLED); + const Map<StringName, MultiplayerAPI::RPCMode>::Element *e = _methods_rpc_mode.find(p_method); if (e != NULL) { return e->get(); } else { - return ScriptInstance::RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } } -ScriptInstance::RPCMode PluginScript::get_rset_mode(const StringName &p_variable) const { - ASSERT_SCRIPT_VALID_V(ScriptInstance::RPC_MODE_DISABLED); - const Map<StringName, ScriptInstance::RPCMode>::Element *e = _variables_rset_mode.find(p_variable); +MultiplayerAPI::RPCMode PluginScript::get_rset_mode(const StringName &p_variable) const { + ASSERT_SCRIPT_VALID_V(MultiplayerAPI::RPC_MODE_DISABLED); + const Map<StringName, MultiplayerAPI::RPCMode>::Element *e = _variables_rset_mode.find(p_variable); if (e != NULL) { return e->get(); } else { - return ScriptInstance::RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } } diff --git a/modules/gdnative/pluginscript/pluginscript_script.h b/modules/gdnative/pluginscript/pluginscript_script.h index 1be9e907c2..31c6c4d67f 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.h +++ b/modules/gdnative/pluginscript/pluginscript_script.h @@ -62,8 +62,8 @@ private: Map<StringName, PropertyInfo> _properties_info; Map<StringName, MethodInfo> _signals_info; Map<StringName, MethodInfo> _methods_info; - Map<StringName, ScriptInstance::RPCMode> _variables_rset_mode; - Map<StringName, ScriptInstance::RPCMode> _methods_rpc_mode; + Map<StringName, MultiplayerAPI::RPCMode> _variables_rset_mode; + Map<StringName, MultiplayerAPI::RPCMode> _methods_rpc_mode; Set<Object *> _instances; //exported members @@ -116,8 +116,8 @@ public: virtual int get_member_line(const StringName &p_member) const; - ScriptInstance::RPCMode get_rpc_mode(const StringName &p_method) const; - ScriptInstance::RPCMode get_rset_mode(const StringName &p_variable) const; + MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; PluginScript(); void init(PluginScriptLanguage *language); diff --git a/modules/gdscript/config.py b/modules/gdscript/config.py index 6496b59d75..95b40d90af 100644 --- a/modules/gdscript/config.py +++ b/modules/gdscript/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 14bdce50ec..f23e7854a5 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -1220,7 +1220,7 @@ ScriptLanguage *GDScriptInstance::get_language() { return GDScriptLanguage::get_singleton(); } -GDScriptInstance::RPCMode GDScriptInstance::get_rpc_mode(const StringName &p_method) const { +MultiplayerAPI::RPCMode GDScriptInstance::get_rpc_mode(const StringName &p_method) const { const GDScript *cscript = script.ptr(); @@ -1228,17 +1228,17 @@ GDScriptInstance::RPCMode GDScriptInstance::get_rpc_mode(const StringName &p_met const Map<StringName, GDScriptFunction *>::Element *E = cscript->member_functions.find(p_method); if (E) { - if (E->get()->get_rpc_mode() != RPC_MODE_DISABLED) { + if (E->get()->get_rpc_mode() != MultiplayerAPI::RPC_MODE_DISABLED) { return E->get()->get_rpc_mode(); } } cscript = cscript->_base; } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } -GDScriptInstance::RPCMode GDScriptInstance::get_rset_mode(const StringName &p_variable) const { +MultiplayerAPI::RPCMode GDScriptInstance::get_rset_mode(const StringName &p_variable) const { const GDScript *cscript = script.ptr(); @@ -1253,7 +1253,7 @@ GDScriptInstance::RPCMode GDScriptInstance::get_rset_mode(const StringName &p_va cscript = cscript->_base; } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } void GDScriptInstance::reload_members() { @@ -1769,6 +1769,9 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const { "sync", "master", "slave", + "remotesync", + "mastersync", + "slavesync", 0 }; diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index 6885fbb7fe..a35b0a10d5 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -63,7 +63,7 @@ class GDScript : public Script { int index; StringName setter; StringName getter; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; }; friend class GDScriptInstance; @@ -248,8 +248,8 @@ public: void reload_members(); - virtual RPCMode get_rpc_mode(const StringName &p_method) const; - virtual RPCMode get_rset_mode(const StringName &p_variable) const; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; GDScriptInstance(); ~GDScriptInstance(); diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp index dac7da3a28..61130cb58f 100644 --- a/modules/gdscript/gdscript_function.cpp +++ b/modules/gdscript/gdscript_function.cpp @@ -1455,7 +1455,7 @@ GDScriptFunction::GDScriptFunction() : _stack_size = 0; _call_size = 0; - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; name = "<anonymous>"; #ifdef DEBUG_ENABLED _func_cname = NULL; diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h index ea009dcd96..836325f0fe 100644 --- a/modules/gdscript/gdscript_function.h +++ b/modules/gdscript/gdscript_function.h @@ -96,14 +96,6 @@ public: ADDR_TYPE_NIL = 9 }; - enum RPCMode { - RPC_DISABLED, - RPC_ENABLED, - RPC_SYNC, - RPC_SYNC_MASTER, - RPC_SYNC_SLAVE - }; - struct StackDebug { int line; @@ -135,7 +127,7 @@ private: int _call_size; int _initial_line; bool _static; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; GDScript *_script; @@ -230,7 +222,7 @@ public: Variant call(GDScriptInstance *p_instance, const Variant **p_args, int p_argcount, Variant::CallError &r_err, CallState *p_state = NULL); - _FORCE_INLINE_ ScriptInstance::RPCMode get_rpc_mode() const { return rpc_mode; } + _FORCE_INLINE_ MultiplayerAPI::RPCMode get_rpc_mode() const { return rpc_mode; } GDScriptFunction(); ~GDScriptFunction(); }; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 5e93b377d2..fdb92a68a9 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -3373,7 +3373,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { function->line = fnline; function->rpc_mode = rpc_mode; - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; if (_static) p_class->static_functions.push_back(function); @@ -3931,10 +3931,10 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { tokenizer->advance(); } - if (tokenizer->get_token() != GDScriptTokenizer::TK_PR_VAR && tokenizer->get_token() != GDScriptTokenizer::TK_PR_ONREADY && tokenizer->get_token() != GDScriptTokenizer::TK_PR_REMOTE && tokenizer->get_token() != GDScriptTokenizer::TK_PR_MASTER && tokenizer->get_token() != GDScriptTokenizer::TK_PR_SLAVE && tokenizer->get_token() != GDScriptTokenizer::TK_PR_SYNC) { + if (tokenizer->get_token() != GDScriptTokenizer::TK_PR_VAR && tokenizer->get_token() != GDScriptTokenizer::TK_PR_ONREADY && tokenizer->get_token() != GDScriptTokenizer::TK_PR_REMOTE && tokenizer->get_token() != GDScriptTokenizer::TK_PR_MASTER && tokenizer->get_token() != GDScriptTokenizer::TK_PR_SLAVE && tokenizer->get_token() != GDScriptTokenizer::TK_PR_SYNC && tokenizer->get_token() != GDScriptTokenizer::TK_PR_REMOTESYNC && tokenizer->get_token() != GDScriptTokenizer::TK_PR_MASTERSYNC && tokenizer->get_token() != GDScriptTokenizer::TK_PR_SLAVESYNC) { current_export = PropertyInfo(); - _set_error("Expected 'var', 'onready', 'remote', 'master', 'slave' or 'sync'."); + _set_error("Expected 'var', 'onready', 'remote', 'master', 'slave', 'sync', 'remotesync', 'mastersync', 'slavesync'."); return; } @@ -3967,7 +3967,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } } - rpc_mode = ScriptInstance::RPC_MODE_REMOTE; + rpc_mode = MultiplayerAPI::RPC_MODE_REMOTE; continue; } break; @@ -3988,7 +3988,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { } } - rpc_mode = ScriptInstance::RPC_MODE_MASTER; + rpc_mode = MultiplayerAPI::RPC_MODE_MASTER; continue; } break; case GDScriptTokenizer::TK_PR_SLAVE: { @@ -4008,9 +4008,10 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { } } - rpc_mode = ScriptInstance::RPC_MODE_SLAVE; + rpc_mode = MultiplayerAPI::RPC_MODE_SLAVE; continue; } break; + case GDScriptTokenizer::TK_PR_REMOTESYNC: case GDScriptTokenizer::TK_PR_SYNC: { //may be fallthrough from export, ignore if so @@ -4023,7 +4024,37 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } - rpc_mode = ScriptInstance::RPC_MODE_SYNC; + rpc_mode = MultiplayerAPI::RPC_MODE_SYNC; + continue; + } break; + case GDScriptTokenizer::TK_PR_MASTERSYNC: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (tokenizer->get_token() != GDScriptTokenizer::TK_PR_VAR && tokenizer->get_token() != GDScriptTokenizer::TK_PR_FUNCTION) { + if (current_export.type) + _set_error("Expected 'var'."); + else + _set_error("Expected 'var' or 'func'."); + return; + } + + rpc_mode = MultiplayerAPI::RPC_MODE_MASTERSYNC; + continue; + } break; + case GDScriptTokenizer::TK_PR_SLAVESYNC: { + + //may be fallthrough from export, ignore if so + tokenizer->advance(); + if (tokenizer->get_token() != GDScriptTokenizer::TK_PR_VAR && tokenizer->get_token() != GDScriptTokenizer::TK_PR_FUNCTION) { + if (current_export.type) + _set_error("Expected 'var'."); + else + _set_error("Expected 'var' or 'func'."); + return; + } + + rpc_mode = MultiplayerAPI::RPC_MODE_SLAVESYNC; continue; } break; case GDScriptTokenizer::TK_PR_VAR: { @@ -4053,7 +4084,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { tokenizer->advance(); - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; if (tokenizer->get_token() == GDScriptTokenizer::TK_OP_ASSIGN) { @@ -4478,7 +4509,7 @@ void GDScriptParser::clear() { current_class = NULL; completion_found = false; - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; current_function = NULL; diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index 485ba1263d..b88a59537c 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -89,7 +89,7 @@ public: StringName getter; int line; Node *expression; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; }; struct Constant { StringName identifier; @@ -125,7 +125,7 @@ public: struct FunctionNode : public Node { bool _static; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; StringName name; Vector<StringName> arguments; Vector<Node *> default_values; @@ -134,7 +134,7 @@ public: FunctionNode() { type = TYPE_FUNCTION; _static = false; - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; } }; @@ -493,7 +493,7 @@ private: PropertyInfo current_export; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; void _set_error(const String &p_error, int p_line = -1, int p_column = -1); bool _recover_from_completion(); diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 6a844cd651..3c8e1ddbe4 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -110,6 +110,9 @@ const char *GDScriptTokenizer::token_names[TK_MAX] = { "sync", "master", "slave", + "remotesync", + "mastersync", + "slavesync", "'['", "']'", "'{'", @@ -201,6 +204,9 @@ static const _kws _keyword_list[] = { { GDScriptTokenizer::TK_PR_MASTER, "master" }, { GDScriptTokenizer::TK_PR_SLAVE, "slave" }, { GDScriptTokenizer::TK_PR_SYNC, "sync" }, + { GDScriptTokenizer::TK_PR_REMOTESYNC, "remotesync" }, + { GDScriptTokenizer::TK_PR_MASTERSYNC, "mastersync" }, + { GDScriptTokenizer::TK_PR_SLAVESYNC, "slavesync" }, { GDScriptTokenizer::TK_PR_CONST, "const" }, { GDScriptTokenizer::TK_PR_ENUM, "enum" }, //controlflow @@ -247,6 +253,9 @@ bool GDScriptTokenizer::is_token_literal(int p_offset, bool variable_safe) const case TK_PR_MASTER: case TK_PR_SLAVE: case TK_PR_SYNC: + case TK_PR_REMOTESYNC: + case TK_PR_MASTERSYNC: + case TK_PR_SLAVESYNC: return true; // Literal for non-variables only: diff --git a/modules/gdscript/gdscript_tokenizer.h b/modules/gdscript/gdscript_tokenizer.h index b020c85199..c4f1f9fd94 100644 --- a/modules/gdscript/gdscript_tokenizer.h +++ b/modules/gdscript/gdscript_tokenizer.h @@ -115,6 +115,9 @@ public: TK_PR_SYNC, TK_PR_MASTER, TK_PR_SLAVE, + TK_PR_REMOTESYNC, + TK_PR_MASTERSYNC, + TK_PR_SLAVESYNC, TK_BRACKET_OPEN, TK_BRACKET_CLOSE, TK_CURLY_BRACKET_OPEN, diff --git a/modules/gridmap/config.py b/modules/gridmap/config.py index a93f4edb81..5022116c9b 100644 --- a/modules/gridmap/config.py +++ b/modules/gridmap/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/hdr/config.py b/modules/hdr/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/hdr/config.py +++ b/modules/hdr/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/jpg/config.py b/modules/jpg/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/jpg/config.py +++ b/modules/jpg/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/mbedtls/config.py b/modules/mbedtls/config.py index 5f133eba90..1c8cd12a2d 100755 --- a/modules/mbedtls/config.py +++ b/modules/mbedtls/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/mobile_vr/config.py b/modules/mobile_vr/config.py index aa8ef111d3..4912457e2b 100644 --- a/modules/mobile_vr/config.py +++ b/modules/mobile_vr/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): # should probably change this to only be true on iOS and Android return False diff --git a/modules/mono/config.py b/modules/mono/config.py index 18d9c67795..8b52d77f80 100644 --- a/modules/mono/config.py +++ b/modules/mono/config.py @@ -19,7 +19,7 @@ def find_file_in_dir(directory, files, prefix='', extension=''): return '' -def can_build(platform): +def can_build(env, platform): if platform in ["javascript"]: return False # Not yet supported return True @@ -80,7 +80,11 @@ def configure(env): if mono_static: lib_suffix = Environment()['LIBSUFFIX'] - mono_static_lib_name = 'libmono-static-sgen' + + if env.msvc: + mono_static_lib_name = 'libmono-static-sgen' + else: + mono_static_lib_name = 'libmonosgen-2.0' if not os.path.isfile(os.path.join(mono_lib_path, mono_static_lib_name + lib_suffix)): raise RuntimeError('Could not find static mono library in: ' + mono_lib_path) @@ -93,7 +97,10 @@ def configure(env): env.Append(LINKFLAGS='LIBCMT' + lib_suffix) env.Append(LINKFLAGS='Psapi' + lib_suffix) else: - env.Append(LIBS=mono_static_lib_name) + env.Append(LINKFLAGS=os.path.join(mono_lib_path, mono_static_lib_name + lib_suffix)) + + env.Append(LIBS='psapi') + env.Append(LIBS='version') else: mono_lib_name = find_file_in_dir(mono_lib_path, mono_lib_names, extension='.lib') diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 24292b77ed..46c40b2690 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -1310,21 +1310,27 @@ bool CSharpInstance::refcount_decremented() { return ref_dying; } -ScriptInstance::RPCMode CSharpInstance::_member_get_rpc_mode(GDMonoClassMember *p_member) const { +MultiplayerAPI::RPCMode CSharpInstance::_member_get_rpc_mode(GDMonoClassMember *p_member) const { if (p_member->has_attribute(CACHED_CLASS(RemoteAttribute))) - return RPC_MODE_REMOTE; + return MultiplayerAPI::RPC_MODE_REMOTE; if (p_member->has_attribute(CACHED_CLASS(SyncAttribute))) - return RPC_MODE_SYNC; + return MultiplayerAPI::RPC_MODE_SYNC; if (p_member->has_attribute(CACHED_CLASS(MasterAttribute))) - return RPC_MODE_MASTER; + return MultiplayerAPI::RPC_MODE_MASTER; if (p_member->has_attribute(CACHED_CLASS(SlaveAttribute))) - return RPC_MODE_SLAVE; + return MultiplayerAPI::RPC_MODE_SLAVE; + if (p_member->has_attribute(CACHED_CLASS(RemoteSyncAttribute))) + return MultiplayerAPI::RPC_MODE_REMOTESYNC; + if (p_member->has_attribute(CACHED_CLASS(MasterSyncAttribute))) + return MultiplayerAPI::RPC_MODE_MASTERSYNC; + if (p_member->has_attribute(CACHED_CLASS(SlaveSyncAttribute))) + return MultiplayerAPI::RPC_MODE_SLAVESYNC; - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } -ScriptInstance::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method) const { +MultiplayerAPI::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method) const { GDMonoClass *top = script->script_class; @@ -1337,10 +1343,10 @@ ScriptInstance::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method) top = top->get_parent_class(); } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } -ScriptInstance::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variable) const { +MultiplayerAPI::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variable) const { GDMonoClass *top = script->script_class; @@ -1358,7 +1364,7 @@ ScriptInstance::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variab top = top->get_parent_class(); } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } void CSharpInstance::notification(int p_notification) { @@ -1726,6 +1732,12 @@ void CSharpScript::_clear() { Variant CSharpScript::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + if (unlikely(GDMono::get_singleton() == NULL)) { + // Probably not the best error but eh. + r_error.error = Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; + return Variant(); + } + GDMonoClass *top = script_class; while (top && top != native) { @@ -1967,15 +1979,15 @@ ScriptInstance *CSharpScript::instance_create(Object *p_this) { return NULL; #endif } - + if (!script_class) { if (GDMono::get_singleton()->get_project_assembly() == NULL) { // The project assembly is not loaded ERR_EXPLAIN("Cannot instance script because the project assembly is not loaded. Script: " + get_path()); ERR_FAIL_V(NULL); } - - // The project assembly is loaded, but the class could not found + + // The project assembly is loaded, but the class could not found ERR_EXPLAIN("Cannot instance script because the class '" + name + "' could not be found. Script: " + get_path()); ERR_FAIL_V(NULL); } diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 8666149111..cae2bbf40a 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -192,7 +192,7 @@ class CSharpInstance : public ScriptInstance { void _call_multilevel(MonoObject *p_mono_object, const StringName &p_method, const Variant **p_args, int p_argcount); - RPCMode _member_get_rpc_mode(GDMonoClassMember *p_member) const; + MultiplayerAPI::RPCMode _member_get_rpc_mode(GDMonoClassMember *p_member) const; public: MonoObject *get_mono_object() const; @@ -213,8 +213,8 @@ public: virtual void refcount_incremented(); virtual bool refcount_decremented(); - virtual RPCMode get_rpc_mode(const StringName &p_method) const; - virtual RPCMode get_rset_mode(const StringName &p_variable) const; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; virtual void notification(int p_notification); void call_notification_no_check(MonoObject *p_mono_object, int p_notification); diff --git a/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs b/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs index f3b4b66663..16beacb45c 100644 --- a/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs +++ b/modules/mono/editor/GodotSharpTools/Build/BuildSystem.cs @@ -78,6 +78,8 @@ namespace GodotSharpTools.Build public bool Build(string loggerAssemblyPath, string loggerOutputDir, string[] customProperties = null) { + bool debugMSBuild = IsDebugMSBuildRequested(); + List<string> customPropertiesList = new List<string>(); if (customProperties != null) @@ -92,9 +94,10 @@ namespace GodotSharpTools.Build ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs); - // No console output, thanks - startInfo.RedirectStandardOutput = true; - startInfo.RedirectStandardError = true; + bool redirectOutput = !debugMSBuild; + + startInfo.RedirectStandardOutput = redirectOutput; + startInfo.RedirectStandardError = redirectOutput; startInfo.UseShellExecute = false; if (UsingMonoMSBuildOnWindows) @@ -116,8 +119,11 @@ namespace GodotSharpTools.Build process.Start(); - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); + if (redirectOutput) + { + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + } process.WaitForExit(); @@ -129,6 +135,8 @@ namespace GodotSharpTools.Build public bool BuildAsync(string loggerAssemblyPath, string loggerOutputDir, string[] customProperties = null) { + bool debugMSBuild = IsDebugMSBuildRequested(); + if (process != null) throw new InvalidOperationException("Already in use"); @@ -146,9 +154,10 @@ namespace GodotSharpTools.Build ProcessStartInfo startInfo = new ProcessStartInfo(GetMSBuildPath(), compilerArgs); - // No console output, thanks - startInfo.RedirectStandardOutput = true; - startInfo.RedirectStandardError = true; + bool redirectOutput = !debugMSBuild; + + startInfo.RedirectStandardOutput = redirectOutput; + startInfo.RedirectStandardError = redirectOutput; startInfo.UseShellExecute = false; if (UsingMonoMSBuildOnWindows) @@ -171,8 +180,11 @@ namespace GodotSharpTools.Build process.Start(); - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); + if (redirectOutput) + { + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + } return true; } @@ -220,6 +232,11 @@ namespace GodotSharpTools.Build Dispose(); } + private static bool IsDebugMSBuildRequested() + { + return Environment.GetEnvironmentVariable("GODOT_DEBUG_MSBUILD")?.Trim() == "1"; + } + public void Dispose() { if (process != null) diff --git a/modules/mono/editor/godotsharp_builds.cpp b/modules/mono/editor/godotsharp_builds.cpp index e29384aabf..43d58caad2 100644 --- a/modules/mono/editor/godotsharp_builds.cpp +++ b/modules/mono/editor/godotsharp_builds.cpp @@ -461,12 +461,12 @@ void GodotSharpBuilds::BuildProcess::start(bool p_blocking) { exit_code = -1; - String logs_dir = GodotSharpDirs::get_build_logs_dir().plus_file(build_info.solution.md5_text() + "_" + build_info.configuration); + String log_dirpath = build_info.get_log_dirpath(); if (build_tab) { build_tab->on_build_start(); } else { - build_tab = memnew(MonoBuildTab(build_info, logs_dir)); + build_tab = memnew(MonoBuildTab(build_info, log_dirpath)); MonoBottomPanel::get_singleton()->add_build_tab(build_tab); } @@ -488,12 +488,12 @@ void GodotSharpBuilds::BuildProcess::start(bool p_blocking) { // Remove old issues file String issues_file = "msbuild_issues.csv"; - DirAccessRef d = DirAccess::create_for_path(logs_dir); + DirAccessRef d = DirAccess::create_for_path(log_dirpath); if (d->file_exists(issues_file)) { Error err = d->remove(issues_file); if (err != OK) { exited = true; - String file_path = ProjectSettings::get_singleton()->localize_path(logs_dir).plus_file(issues_file); + String file_path = ProjectSettings::get_singleton()->localize_path(log_dirpath).plus_file(issues_file); String message = "Cannot remove issues file: " + file_path; build_tab->on_build_exec_failed(message); ERR_EXPLAIN(message); @@ -527,8 +527,9 @@ void GodotSharpBuilds::BuildProcess::start(bool p_blocking) { // Call Build - Variant logger_assembly = OS::get_singleton()->get_executable_path().get_base_dir().plus_file(EDITOR_TOOLS_ASSEMBLY_NAME) + ".dll"; - Variant logger_output_dir = logs_dir; + String logger_assembly_path = GDMono::get_singleton()->get_editor_tools_assembly()->get_path(); + Variant logger_assembly = ProjectSettings::get_singleton()->globalize_path(logger_assembly_path); + Variant logger_output_dir = log_dirpath; Variant custom_props = build_info.custom_props; const Variant *args[3] = { &logger_assembly, &logger_output_dir, &custom_props }; diff --git a/modules/mono/editor/mono_bottom_panel.cpp b/modules/mono/editor/mono_bottom_panel.cpp index 1b5a303835..9317550d28 100644 --- a/modules/mono/editor/mono_bottom_panel.cpp +++ b/modules/mono/editor/mono_bottom_panel.cpp @@ -73,7 +73,7 @@ void MonoBottomPanel::_update_build_tabs_list() { if (no_current_tab || current_tab == i) { build_tabs_list->select(i); - _build_tab_item_selected(i); + _build_tabs_item_selected(i); } } } @@ -105,21 +105,27 @@ void MonoBottomPanel::show_build_tab() { ERR_PRINT("Builds tab not found"); } -void MonoBottomPanel::_build_tab_item_selected(int p_idx) { +void MonoBottomPanel::_build_tabs_item_selected(int p_idx) { ERR_FAIL_INDEX(p_idx, build_tabs->get_tab_count()); + build_tabs->set_current_tab(p_idx); + if (!build_tabs->is_visible()) + build_tabs->set_visible(true); + + warnings_btn->set_visible(true); + errors_btn->set_visible(true); + view_log_btn->set_visible(true); } -void MonoBottomPanel::_build_tab_changed(int p_idx) { +void MonoBottomPanel::_build_tabs_nothing_selected() { - if (p_idx < 0 || p_idx >= build_tabs->get_tab_count()) { - warnings_btn->set_visible(false); - errors_btn->set_visible(false); - } else { - warnings_btn->set_visible(true); - errors_btn->set_visible(true); - } + if (build_tabs->get_tab_count() != 0) // just in case + build_tabs->set_visible(false); + + warnings_btn->set_visible(false); + errors_btn->set_visible(false); + view_log_btn->set_visible(false); } void MonoBottomPanel::_warnings_toggled(bool p_pressed) { @@ -148,6 +154,22 @@ void MonoBottomPanel::_build_project_pressed() { CSharpLanguage::get_singleton()->reload_assemblies_if_needed(true); } +void MonoBottomPanel::_view_log_pressed() { + + if (build_tabs_list->is_anything_selected()) { + Vector<int> selected_items = build_tabs_list->get_selected_items(); + CRASH_COND(selected_items.size() != 1); + int selected_item = selected_items[0]; + + MonoBuildTab *build_tab = Object::cast_to<MonoBuildTab>(build_tabs->get_tab_control(selected_item)); + ERR_FAIL_NULL(build_tab); + + String log_dirpath = build_tab->get_build_info().get_log_dirpath(); + + OS::get_singleton()->shell_open(log_dirpath.plus_file("msbuild_log.txt")); + } +} + void MonoBottomPanel::_notification(int p_what) { switch (p_what) { @@ -163,10 +185,11 @@ void MonoBottomPanel::_notification(int p_what) { void MonoBottomPanel::_bind_methods() { ClassDB::bind_method(D_METHOD("_build_project_pressed"), &MonoBottomPanel::_build_project_pressed); + ClassDB::bind_method(D_METHOD("_view_log_pressed"), &MonoBottomPanel::_view_log_pressed); ClassDB::bind_method(D_METHOD("_warnings_toggled", "pressed"), &MonoBottomPanel::_warnings_toggled); ClassDB::bind_method(D_METHOD("_errors_toggled", "pressed"), &MonoBottomPanel::_errors_toggled); - ClassDB::bind_method(D_METHOD("_build_tab_item_selected", "idx"), &MonoBottomPanel::_build_tab_item_selected); - ClassDB::bind_method(D_METHOD("_build_tab_changed", "idx"), &MonoBottomPanel::_build_tab_changed); + ClassDB::bind_method(D_METHOD("_build_tabs_item_selected", "idx"), &MonoBottomPanel::_build_tabs_item_selected); + ClassDB::bind_method(D_METHOD("_build_tabs_nothing_selected"), &MonoBottomPanel::_build_tabs_nothing_selected); } MonoBottomPanel::MonoBottomPanel(EditorNode *p_editor) { @@ -223,6 +246,15 @@ MonoBottomPanel::MonoBottomPanel(EditorNode *p_editor) { errors_btn->connect("toggled", this, "_errors_toggled"); toolbar_hbc->add_child(errors_btn); + toolbar_hbc->add_spacer(); + + view_log_btn = memnew(Button); + view_log_btn->set_text(TTR("View log")); + view_log_btn->set_focus_mode(FOCUS_NONE); + view_log_btn->set_visible(false); + view_log_btn->connect("pressed", this, "_view_log_pressed"); + toolbar_hbc->add_child(view_log_btn); + HSplitContainer *hsc = memnew(HSplitContainer); hsc->set_h_size_flags(SIZE_EXPAND_FILL); hsc->set_v_size_flags(SIZE_EXPAND_FILL); @@ -230,14 +262,14 @@ MonoBottomPanel::MonoBottomPanel(EditorNode *p_editor) { build_tabs_list = memnew(ItemList); build_tabs_list->set_h_size_flags(SIZE_EXPAND_FILL); - build_tabs_list->connect("item_selected", this, "_build_tab_item_selected"); + build_tabs_list->connect("item_selected", this, "_build_tabs_item_selected"); + build_tabs_list->connect("nothing_selected", this, "_build_tabs_nothing_selected"); hsc->add_child(build_tabs_list); build_tabs = memnew(TabContainer); build_tabs->set_tab_align(TabContainer::ALIGN_LEFT); build_tabs->set_h_size_flags(SIZE_EXPAND_FILL); build_tabs->set_tabs_visible(false); - build_tabs->connect("tab_changed", this, "_build_tab_changed"); hsc->add_child(build_tabs); } } diff --git a/modules/mono/editor/mono_bottom_panel.h b/modules/mono/editor/mono_bottom_panel.h index a44d3a9af8..03240e9a13 100644 --- a/modules/mono/editor/mono_bottom_panel.h +++ b/modules/mono/editor/mono_bottom_panel.h @@ -53,16 +53,18 @@ class MonoBottomPanel : public VBoxContainer { Button *warnings_btn; Button *errors_btn; + Button *view_log_btn; void _update_build_tabs_list(); - void _build_tab_item_selected(int p_idx); - void _build_tab_changed(int p_idx); + void _build_tabs_item_selected(int p_idx); + void _build_tabs_nothing_selected(); void _warnings_toggled(bool p_pressed); void _errors_toggled(bool p_pressed); void _build_project_pressed(); + void _view_log_pressed(); static MonoBottomPanel *singleton; diff --git a/modules/mono/editor/mono_build_info.cpp b/modules/mono/editor/mono_build_info.cpp new file mode 100644 index 0000000000..e4af2aac4f --- /dev/null +++ b/modules/mono/editor/mono_build_info.cpp @@ -0,0 +1,62 @@ +/*************************************************************************/ +/* mono_build_info.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "mono_build_info.h" + +#include "../godotsharp_dirs.h" +#include "../mono_gd/gd_mono_utils.h" + +uint32_t MonoBuildInfo::Hasher::hash(const MonoBuildInfo &p_key) { + + uint32_t hash = 0; + + GDMonoUtils::hash_combine(hash, p_key.solution.hash()); + GDMonoUtils::hash_combine(hash, p_key.configuration.hash()); + + return hash; +} + +bool MonoBuildInfo::operator==(const MonoBuildInfo &p_b) const { + + return p_b.solution == solution && p_b.configuration == configuration; +} + +String MonoBuildInfo::get_log_dirpath() { + + return GodotSharpDirs::get_build_logs_dir().plus_file(solution.md5_text() + "_" + configuration); +} + +MonoBuildInfo::MonoBuildInfo() {} + +MonoBuildInfo::MonoBuildInfo(const String &p_solution, const String &p_config) { + + solution = p_solution; + configuration = p_config; +} diff --git a/modules/mono/editor/mono_build_info.h b/modules/mono/editor/mono_build_info.h index 4806764a61..64ba0f4037 100644 --- a/modules/mono/editor/mono_build_info.h +++ b/modules/mono/editor/mono_build_info.h @@ -31,35 +31,25 @@ #ifndef MONO_BUILD_INFO_H #define MONO_BUILD_INFO_H -#include "../mono_gd/gd_mono_utils.h" +#include "core/ustring.h" +#include "core/vector.h" struct MonoBuildInfo { struct Hasher { - static _FORCE_INLINE_ uint32_t hash(const MonoBuildInfo &p_key) { - uint32_t hash = 0; - - GDMonoUtils::hash_combine(hash, p_key.solution.hash()); - GDMonoUtils::hash_combine(hash, p_key.configuration.hash()); - - return hash; - } + static uint32_t hash(const MonoBuildInfo &p_key); }; String solution; String configuration; Vector<String> custom_props; - MonoBuildInfo() {} + bool operator==(const MonoBuildInfo &p_b) const; - MonoBuildInfo(const String &p_solution, const String &p_config) { - solution = p_solution; - configuration = p_config; - } + String get_log_dirpath(); - bool operator==(const MonoBuildInfo &p_b) const { - return p_b.solution == solution && p_b.configuration == configuration; - } + MonoBuildInfo(); + MonoBuildInfo(const String &p_solution, const String &p_config); }; #endif // MONO_BUILD_INFO_H diff --git a/modules/mono/glue/cs_files/RPCAttributes.cs b/modules/mono/glue/cs_files/RPCAttributes.cs index 08841ffd76..6bf9560bfa 100644 --- a/modules/mono/glue/cs_files/RPCAttributes.cs +++ b/modules/mono/glue/cs_files/RPCAttributes.cs @@ -13,4 +13,13 @@ namespace Godot [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] public class SlaveAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class RemoteSyncAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class MasterSyncAttribute : Attribute {} + + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field)] + public class SlaveSyncAttribute : Attribute {} } diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp index e6baea3089..c04fcca962 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.cpp +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -606,6 +606,8 @@ MonoArray *Array_to_mono_array(const Array &p_array) { Array mono_array_to_Array(MonoArray *p_array) { Array ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -631,6 +633,8 @@ MonoArray *PoolIntArray_to_mono_array(const PoolIntArray &p_array) { PoolIntArray mono_array_to_PoolIntArray(MonoArray *p_array) { PoolIntArray ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); for (int i = 0; i < length; i++) { @@ -653,6 +657,8 @@ MonoArray *PoolByteArray_to_mono_array(const PoolByteArray &p_array) { PoolByteArray mono_array_to_PoolByteArray(MonoArray *p_array) { PoolByteArray ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -676,6 +682,8 @@ MonoArray *PoolRealArray_to_mono_array(const PoolRealArray &p_array) { PoolRealArray mono_array_to_PoolRealArray(MonoArray *p_array) { PoolRealArray ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -700,6 +708,8 @@ MonoArray *PoolStringArray_to_mono_array(const PoolStringArray &p_array) { PoolStringArray mono_array_to_PoolStringArray(MonoArray *p_array) { PoolStringArray ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -732,6 +742,8 @@ MonoArray *PoolColorArray_to_mono_array(const PoolColorArray &p_array) { PoolColorArray mono_array_to_PoolColorArray(MonoArray *p_array) { PoolColorArray ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -763,6 +775,8 @@ MonoArray *PoolVector2Array_to_mono_array(const PoolVector2Array &p_array) { PoolVector2Array mono_array_to_PoolVector2Array(MonoArray *p_array) { PoolVector2Array ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -795,6 +809,8 @@ MonoArray *PoolVector3Array_to_mono_array(const PoolVector3Array &p_array) { PoolVector3Array mono_array_to_PoolVector3Array(MonoArray *p_array) { PoolVector3Array ret; + if (!p_array) + return ret; int length = mono_array_length(p_array); ret.resize(length); @@ -835,6 +851,9 @@ MonoObject *Dictionary_to_mono_object(const Dictionary &p_dict) { Dictionary mono_object_to_Dictionary(MonoObject *p_dict) { Dictionary ret; + if (!p_dict) + return ret; + GDMonoUtils::MarshalUtils_DictToArrays dict_to_arrays = CACHED_METHOD_THUNK(MarshalUtils, DictionaryToArrays); MonoArray *keys = NULL; diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp index db136a1313..fbdbeaa3f7 100644 --- a/modules/mono/mono_gd/gd_mono_utils.cpp +++ b/modules/mono/mono_gd/gd_mono_utils.cpp @@ -120,6 +120,9 @@ void MonoCache::clear_members() { class_SyncAttribute = NULL; class_MasterAttribute = NULL; class_SlaveAttribute = NULL; + class_RemoteSyncAttribute = NULL; + class_MasterSyncAttribute = NULL; + class_SlaveSyncAttribute = NULL; class_GodotMethodAttribute = NULL; field_GodotMethodAttribute_methodName = NULL; @@ -208,6 +211,9 @@ void update_godot_api_cache() { CACHE_CLASS_AND_CHECK(SyncAttribute, GODOT_API_CLASS(SyncAttribute)); CACHE_CLASS_AND_CHECK(MasterAttribute, GODOT_API_CLASS(MasterAttribute)); CACHE_CLASS_AND_CHECK(SlaveAttribute, GODOT_API_CLASS(SlaveAttribute)); + CACHE_CLASS_AND_CHECK(RemoteSyncAttribute, GODOT_API_CLASS(RemoteSyncAttribute)); + CACHE_CLASS_AND_CHECK(MasterSyncAttribute, GODOT_API_CLASS(MasterSyncAttribute)); + CACHE_CLASS_AND_CHECK(SlaveSyncAttribute, GODOT_API_CLASS(SlaveSyncAttribute)); CACHE_CLASS_AND_CHECK(GodotMethodAttribute, GODOT_API_CLASS(GodotMethodAttribute)); CACHE_FIELD_AND_CHECK(GodotMethodAttribute, methodName, CACHED_CLASS(GodotMethodAttribute)->get_field("methodName")); diff --git a/modules/mono/mono_gd/gd_mono_utils.h b/modules/mono/mono_gd/gd_mono_utils.h index 1a34180d15..fc13a00e85 100644 --- a/modules/mono/mono_gd/gd_mono_utils.h +++ b/modules/mono/mono_gd/gd_mono_utils.h @@ -112,6 +112,9 @@ struct MonoCache { GDMonoClass *class_ToolAttribute; GDMonoClass *class_RemoteAttribute; GDMonoClass *class_SyncAttribute; + GDMonoClass *class_RemoteSyncAttribute; + GDMonoClass *class_MasterSyncAttribute; + GDMonoClass *class_SlaveSyncAttribute; GDMonoClass *class_MasterAttribute; GDMonoClass *class_SlaveAttribute; GDMonoClass *class_GodotMethodAttribute; diff --git a/modules/ogg/config.py b/modules/ogg/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/ogg/config.py +++ b/modules/ogg/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/opus/config.py b/modules/opus/config.py index 60f8d838d6..a1cde10ea0 100644 --- a/modules/opus/config.py +++ b/modules/opus/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/pvr/config.py b/modules/pvr/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/pvr/config.py +++ b/modules/pvr/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/recast/SCsub b/modules/recast/SCsub index 530df9a37c..f56be72b24 100644 --- a/modules/recast/SCsub +++ b/modules/recast/SCsub @@ -1,8 +1,9 @@ #!/usr/bin/env python Import('env') +Import('env_modules') -# Not building in a separate env as core needs it +env_recast = env_modules.Clone() # Thirdparty source files if env['builtin_recast']: @@ -22,13 +23,10 @@ if env['builtin_recast']: ] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - env.Append(CPPPATH=[thirdparty_dir, thirdparty_dir + "/Include"]) - - lib = env.add_library("recast_builtin", thirdparty_sources) - env.Append(LIBS=[lib]) + env_recast.add_source_files(env.modules_sources, thirdparty_sources) + env_recast.Append(CPPPATH=[thirdparty_dir + "/Include"]) # Godot source files -env.add_source_files(env.modules_sources, "*.cpp") -env.Append(CCFLAGS=['-DRECAST_ENABLED']) +env_recast.add_source_files(env.modules_sources, "*.cpp") Export('env') diff --git a/modules/recast/config.py b/modules/recast/config.py index fc074cf661..098f1eafa9 100644 --- a/modules/recast/config.py +++ b/modules/recast/config.py @@ -1,5 +1,5 @@ -def can_build(platform): - return platform != "android" +def can_build(env, platform): + return env['tools'] def configure(env): pass diff --git a/editor/plugins/navigation_mesh_editor_plugin.cpp b/modules/recast/navigation_mesh_editor_plugin.cpp index da3c744324..8556b7aa0a 100644 --- a/editor/plugins/navigation_mesh_editor_plugin.cpp +++ b/modules/recast/navigation_mesh_editor_plugin.cpp @@ -29,13 +29,12 @@ /*************************************************************************/ #include "navigation_mesh_editor_plugin.h" + #include "io/marshalls.h" #include "io/resource_saver.h" #include "scene/3d/mesh_instance.h" #include "scene/gui/box_container.h" -#ifdef RECAST_ENABLED - void NavigationMeshEditor::_node_removed(Node *p_node) { if (p_node == node) { @@ -162,5 +161,3 @@ NavigationMeshEditorPlugin::NavigationMeshEditorPlugin(EditorNode *p_node) { NavigationMeshEditorPlugin::~NavigationMeshEditorPlugin() { } - -#endif // RECAST_ENABLED diff --git a/editor/plugins/navigation_mesh_editor_plugin.h b/modules/recast/navigation_mesh_editor_plugin.h index 9382467d85..4f3e222002 100644 --- a/editor/plugins/navigation_mesh_editor_plugin.h +++ b/modules/recast/navigation_mesh_editor_plugin.h @@ -31,8 +31,6 @@ #ifndef NAVIGATION_MESH_GENERATOR_PLUGIN_H #define NAVIGATION_MESH_GENERATOR_PLUGIN_H -#ifdef RECAST_ENABLED - #include "editor/editor_node.h" #include "editor/editor_plugin.h" #include "navigation_mesh_generator.h" @@ -83,5 +81,4 @@ public: ~NavigationMeshEditorPlugin(); }; -#endif // RECAST_ENABLED #endif // NAVIGATION_MESH_GENERATOR_PLUGIN_H diff --git a/editor/plugins/navigation_mesh_generator.cpp b/modules/recast/navigation_mesh_generator.cpp index 0537c5c31f..64c4b85269 100644 --- a/editor/plugins/navigation_mesh_generator.cpp +++ b/modules/recast/navigation_mesh_generator.cpp @@ -30,8 +30,6 @@ #include "navigation_mesh_generator.h" -#ifdef RECAST_ENABLED - void NavigationMeshGenerator::_add_vertex(const Vector3 &p_vec3, Vector<float> &p_verticies) { p_verticies.push_back(p_vec3.x); p_verticies.push_back(p_vec3.y); @@ -304,5 +302,3 @@ void NavigationMeshGenerator::clear(Ref<NavigationMesh> p_nav_mesh) { p_nav_mesh->set_vertices(PoolVector<Vector3>()); } } - -#endif //RECAST_ENABLED diff --git a/editor/plugins/navigation_mesh_generator.h b/modules/recast/navigation_mesh_generator.h index d26f541b8d..3588539ef1 100644 --- a/editor/plugins/navigation_mesh_generator.h +++ b/modules/recast/navigation_mesh_generator.h @@ -31,16 +31,11 @@ #ifndef NAVIGATION_MESH_GENERATOR_H #define NAVIGATION_MESH_GENERATOR_H -#ifdef RECAST_ENABLED - #include "editor/editor_node.h" #include "editor/editor_settings.h" - +#include "os/thread.h" #include "scene/3d/mesh_instance.h" - #include "scene/3d/navigation_mesh.h" - -#include "os/thread.h" #include "scene/resources/shape.h" #include <Recast.h> @@ -61,6 +56,4 @@ public: static void clear(Ref<NavigationMesh> p_nav_mesh); }; -#endif // RECAST_ENABLED - #endif // NAVIGATION_MESH_GENERATOR_H diff --git a/modules/recast/register_types.cpp b/modules/recast/register_types.cpp index 913857c591..f2f18fc86f 100644 --- a/modules/recast/register_types.cpp +++ b/modules/recast/register_types.cpp @@ -30,5 +30,10 @@ #include "register_types.h" -void register_recast_types() {} +#include "navigation_mesh_editor_plugin.h" + +void register_recast_types() { + EditorPlugins::add_by_type<NavigationMeshEditorPlugin>(); +} + void unregister_recast_types() {} diff --git a/modules/regex/config.py b/modules/regex/config.py index cb2da26738..42cfe3b43c 100644 --- a/modules/regex/config.py +++ b/modules/regex/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/squish/config.py b/modules/squish/config.py index 97c95999c8..098f1eafa9 100644 --- a/modules/squish/config.py +++ b/modules/squish/config.py @@ -1,9 +1,5 @@ -def can_build(platform): - return True +def can_build(env, platform): + return env['tools'] def configure(env): - # Tools only, disabled for non-tools - # TODO: Find a cleaner way to achieve that - if not env['tools']: - env['module_squish_enabled'] = False - env.disabled_modules.append("squish") + pass diff --git a/modules/stb_vorbis/config.py b/modules/stb_vorbis/config.py index defe8d0c94..d75e41797a 100644 --- a/modules/stb_vorbis/config.py +++ b/modules/stb_vorbis/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/svg/SCsub b/modules/svg/SCsub index e12abac8c1..a41e0703bd 100644 --- a/modules/svg/SCsub +++ b/modules/svg/SCsub @@ -1,7 +1,6 @@ #!/usr/bin/env python Import('env') -from compat import isbasestring # Thirdparty source files thirdparty_dir = "#thirdparty/nanosvg/" @@ -10,23 +9,7 @@ thirdparty_sources = [ ] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] -# env.add_source_files(env.modules_sources, thirdparty_sources) - -lib = env.add_library("svg_builtin", thirdparty_sources) - -# Needs to be appended to arrive after libscene in the linker call, -# but we don't want it to arrive *after* system libs, so manual hack -# LIBS contains first SCons Library objects ("SCons.Node.FS.File object") -# and then plain strings for system library. We insert between the two. -inserted = False -for idx, linklib in enumerate(env["LIBS"]): - if isbasestring(linklib): # first system lib such as "X11", otherwise SCons lib object - env["LIBS"].insert(idx, lib) - inserted = True - break -if not inserted: - env.Append(LIBS=[lib]) - +env.add_source_files(env.modules_sources, thirdparty_sources) env.Append(CPPPATH=[thirdparty_dir]) env.Append(CCFLAGS=["-DSVG_ENABLED"]) diff --git a/modules/svg/config.py b/modules/svg/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/svg/config.py +++ b/modules/svg/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/tga/config.py b/modules/tga/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/tga/config.py +++ b/modules/tga/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/thekla_unwrap/config.py b/modules/thekla_unwrap/config.py index b1ce7d4b91..bd092bdc16 100644 --- a/modules/thekla_unwrap/config.py +++ b/modules/thekla_unwrap/config.py @@ -1,7 +1,5 @@ -def can_build(platform): - return platform != "android" and platform != "ios" +def can_build(env, platform): + return (env['tools'] and platform not in ["android", "ios"]) def configure(env): - if not env['tools']: - env['builtin_thekla_atlas'] = False - env.disabled_modules.append("thekla_unwrap") + pass diff --git a/modules/theora/config.py b/modules/theora/config.py index 34d34f8be2..7504166237 100644 --- a/modules/theora/config.py +++ b/modules/theora/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/tinyexr/config.py b/modules/tinyexr/config.py index e12bb398ce..098f1eafa9 100644 --- a/modules/tinyexr/config.py +++ b/modules/tinyexr/config.py @@ -1,9 +1,5 @@ -def can_build(platform): - return True +def can_build(env, platform): + return env['tools'] def configure(env): - # Tools only, disabled for non-tools - # TODO: Find a cleaner way to achieve that - if not env['tools']: - env['module_tinyexr_enabled'] = False - env.disabled_modules.append("tinyexr") + pass diff --git a/modules/upnp/SCsub b/modules/upnp/SCsub new file mode 100644 index 0000000000..cde231867f --- /dev/null +++ b/modules/upnp/SCsub @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +Import('env') +Import('env_modules') + +env_upnp = env_modules.Clone() + +# Thirdparty source files + +if env['builtin_miniupnpc']: + thirdparty_dir = "#thirdparty/miniupnpc/" + thirdparty_sources = [ + "miniupnpc.c", + "upnpcommands.c", + "miniwget.c", + "upnpdev.c", + "igd_desc_parse.c", + "minissdpc.c", + "minisoap.c", + "minixml.c", + "connecthostport.c", + "receivedata.c", + "portlistingparse.c", + "upnpreplyparse.c", + ] + thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] + + env_upnp.add_source_files(env.modules_sources, thirdparty_sources) + env_upnp.Append(CPPPATH=[thirdparty_dir]) + env_upnp.Append(CPPFLAGS=["-DMINIUPNP_STATICLIB"]) + +env_upnp.add_source_files(env.modules_sources, "*.cpp") diff --git a/modules/upnp/config.py b/modules/upnp/config.py new file mode 100644 index 0000000000..8724ff1a51 --- /dev/null +++ b/modules/upnp/config.py @@ -0,0 +1,14 @@ +def can_build(env, platform): + return True + +def configure(env): + pass + +def get_doc_classes(): + return [ + "UPNP", + "UPNPDevice" + ] + +def get_doc_path(): + return "doc_classes" diff --git a/modules/upnp/doc_classes/UPNP.xml b/modules/upnp/doc_classes/UPNP.xml new file mode 100644 index 0000000000..30be9c836b --- /dev/null +++ b/modules/upnp/doc_classes/UPNP.xml @@ -0,0 +1,227 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="UPNP" inherits="Reference" category="Core" version="3.1"> + <brief_description> + UPNP network functions. + </brief_description> + <description> + Provides UPNP functionality to discover [UPNPDevice]s on the local network and execute commands on them, like managing port mappings (port forwarding) and querying the local and remote network IP address. Note that methods on this class are synchronous and block the calling thread. + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="add_device"> + <return type="void"> + </return> + <argument index="0" name="device" type="UPNPDevice"> + </argument> + <description> + Adds the given [UPNPDevice] to the list of discovered devices. + </description> + </method> + <method name="add_port_mapping" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="port" type="int"> + </argument> + <argument index="1" name="port_internal" type="int" default="0"> + </argument> + <argument index="2" name="desc" type="String" default=""""> + </argument> + <argument index="3" name="proto" type="String" default=""UDP""> + </argument> + <argument index="4" name="duration" type="int" default="0"> + </argument> + <description> + Adds a mapping to forward the external [code]port[/code] (between 1 and 65535) on the default gateway (see [method get_gateway]) to the [code]internal_port[/code] on the local machine for the given protocol [code]proto[/code] (either [code]TCP[/code] or [code]UDP[/code], with UDP being the default). If a port mapping for the given port and protocol combination already exists on that gateway device, this method tries to overwrite it. If that is not desired, you can retrieve the gateway manually with [method get_gateway] and call [method add_port_mapping] on it, if any. + If [code]internal_port[/code] is [code]0[/code] (the default), the same port number is used for both the external and the internal port (the [code]port[/code] value). + The description ([code]desc[/code]) is shown in some router UIs and can be used to point out which application added the mapping, and the lifetime of the mapping can be limited by [code]duration[/code]. However, some routers are incompatible with one or both of these, so use with caution and add fallback logic in case of errors to retry without them if in doubt. + See [enum UPNPResult] for possible return values. + </description> + </method> + <method name="clear_devices"> + <return type="void"> + </return> + <description> + Clears the list of discovered devices. + </description> + </method> + <method name="delete_port_mapping" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="port" type="int"> + </argument> + <argument index="1" name="proto" type="String" default=""UDP""> + </argument> + <description> + Deletes the port mapping for the given port and protocol combination on the default gateway (see [method get_gateway]) if one exists. [code]port[/code] must be a valid port between 1 and 65535, [code]proto[/code] can be either [code]TCP[/code] or [code]UDP[/code]. See [enum UPNPResult] for possible return values. + </description> + </method> + <method name="discover"> + <return type="int"> + </return> + <argument index="0" name="timeout" type="int" default="2000"> + </argument> + <argument index="1" name="ttl" type="int" default="2"> + </argument> + <argument index="2" name="device_filter" type="String" default=""InternetGatewayDevice""> + </argument> + <description> + Discovers local [UPNPDevice]s. Clears the list of previously discovered devices. + Filters for IGD (InternetGatewayDevice) type devices by default, as those manage port forwarding. [code]timeout[/code] is the time to wait for responses in miliseconds. [code]ttl[/code] is the time-to-live; only touch this if you know what you're doing. + See [enum UPNPResult] for possible return values. + </description> + </method> + <method name="get_device" qualifiers="const"> + <return type="UPNPDevice"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <description> + Returns the [UPNPDevice] at the given [code]index[/code]. + </description> + </method> + <method name="get_device_count" qualifiers="const"> + <return type="int"> + </return> + <description> + Returns the number of discovered [UPNPDevice]s. + </description> + </method> + <method name="get_gateway" qualifiers="const"> + <return type="UPNPDevice"> + </return> + <description> + Returns the default gateway. That is the first discovered [UPNPDevice] that is also a valid IGD (InternetGatewayDevice). + </description> + </method> + <method name="query_external_address" qualifiers="const"> + <return type="String"> + </return> + <description> + Returns the external [IP] address of the default gateway (see [method get_gateway]) as string. Returns an empty string on error. + </description> + </method> + <method name="remove_device"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <description> + Removes the device at [code]index[/code] from the list of discovered devices. + </description> + </method> + <method name="set_device"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <argument index="1" name="device" type="UPNPDevice"> + </argument> + <description> + Sets the device at [code]index[/code] from the list of discovered devices to [code]device[/code]. + </description> + </method> + </methods> + <members> + <member name="discover_ipv6" type="bool" setter="set_discover_ipv6" getter="is_discover_ipv6"> + If [code]true[/code], IPv6 is used for [UPNPDevice] discovery. + </member> + <member name="discover_local_port" type="int" setter="set_discover_local_port" getter="get_discover_local_port"> + If [code]0[/code], the local port to use for discovery is chosen automatically by the system. If [code]1[/code], discovery will be done from the source port 1900 (same as destination port). Otherwise, the value will be used as the port. + </member> + <member name="discover_multicast_if" type="String" setter="set_discover_multicast_if" getter="get_discover_multicast_if"> + Multicast interface to use for discovery. Uses the default multicast interface if empty. + </member> + </members> + <constants> + <constant name="UPNP_RESULT_SUCCESS" value="0" enum="UPNPResult"> + UPNP command or discovery was successful. + </constant> + <constant name="UPNP_RESULT_NOT_AUTHORIZED" value="1" enum="UPNPResult"> + Not authorized to use the command on the [UPNPDevice]. May be returned when the user disabled UPNP on their router. + </constant> + <constant name="UPNP_RESULT_PORT_MAPPING_NOT_FOUND" value="2" enum="UPNPResult"> + No port mapping was found for the given port, protocol combination on the given [UPNPDevice]. + </constant> + <constant name="UPNP_RESULT_INCONSISTENT_PARAMETERS" value="3" enum="UPNPResult"> + Inconsistent parameters. + </constant> + <constant name="UPNP_RESULT_NO_SUCH_ENTRY_IN_ARRAY" value="4" enum="UPNPResult"> + No such entry in array. May be returned if a given port, protocol combination is not found on an [UPNPDevice]. + </constant> + <constant name="UPNP_RESULT_ACTION_FAILED" value="5" enum="UPNPResult"> + The action failed. + </constant> + <constant name="UPNP_RESULT_SRC_IP_WILDCARD_NOT_PERMITTED" value="6" enum="UPNPResult"> + The [UPNPDevice] does not allow wildcard values for the source IP address. + </constant> + <constant name="UPNP_RESULT_EXT_PORT_WILDCARD_NOT_PERMITTED" value="7" enum="UPNPResult"> + The [UPNPDevice] does not allow wildcard values for the external port. + </constant> + <constant name="UPNP_RESULT_INT_PORT_WILDCARD_NOT_PERMITTED" value="8" enum="UPNPResult"> + The [UPNPDevice] does not allow wildcard values for the internal port. + </constant> + <constant name="UPNP_RESULT_REMOTE_HOST_MUST_BE_WILDCARD" value="9" enum="UPNPResult"> + The remote host value must be a wildcard. + </constant> + <constant name="UPNP_RESULT_EXT_PORT_MUST_BE_WILDCARD" value="10" enum="UPNPResult"> + The external port value must be a wildcard. + </constant> + <constant name="UPNP_RESULT_NO_PORT_MAPS_AVAILABLE" value="11" enum="UPNPResult"> + No port maps are available. May also be returned if port mapping functionality is not available. + </constant> + <constant name="UPNP_RESULT_CONFLICT_WITH_OTHER_MECHANISM" value="12" enum="UPNPResult"> + Conflict with other mechanism. May be returned instead of [code]UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING[/code] if a port mapping conflicts with an existing one. + </constant> + <constant name="UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING" value="13" enum="UPNPResult"> + Conflict with an existing port mapping. + </constant> + <constant name="UPNP_RESULT_SAME_PORT_VALUES_REQUIRED" value="14" enum="UPNPResult"> + External and internal port values must be the same. + </constant> + <constant name="UPNP_RESULT_ONLY_PERMANENT_LEASE_SUPPORTED" value="15" enum="UPNPResult"> + Only permanent leases are supported. Do not use the [code]duration[/code] parameter when adding port mappings. + </constant> + <constant name="UPNP_RESULT_INVALID_GATEWAY" value="16" enum="UPNPResult"> + Invalid gateway. + </constant> + <constant name="UPNP_RESULT_INVALID_PORT" value="17" enum="UPNPResult"> + Invalid port. + </constant> + <constant name="UPNP_RESULT_INVALID_PROTOCOL" value="18" enum="UPNPResult"> + Invalid protocol. + </constant> + <constant name="UPNP_RESULT_INVALID_DURATION" value="19" enum="UPNPResult"> + Invalid duration. + </constant> + <constant name="UPNP_RESULT_INVALID_ARGS" value="20" enum="UPNPResult"> + Invalid arguments. + </constant> + <constant name="UPNP_RESULT_INVALID_RESPONSE" value="21" enum="UPNPResult"> + Invalid response. + </constant> + <constant name="UPNP_RESULT_INVALID_PARAM" value="22" enum="UPNPResult"> + Invalid parameter. + </constant> + <constant name="UPNP_RESULT_HTTP_ERROR" value="23" enum="UPNPResult"> + HTTP error. + </constant> + <constant name="UPNP_RESULT_SOCKET_ERROR" value="24" enum="UPNPResult"> + Socket error. + </constant> + <constant name="UPNP_RESULT_MEM_ALLOC_ERROR" value="25" enum="UPNPResult"> + Error allocating memory. + </constant> + <constant name="UPNP_RESULT_NO_GATEWAY" value="26" enum="UPNPResult"> + No gateway available. You may need to call [method discover] first, or discovery didn't detect any valid IGDs (InternetGatewayDevices). + </constant> + <constant name="UPNP_RESULT_NO_DEVICES" value="27" enum="UPNPResult"> + No devices available. You may need to call [method discover] first, or discovery didn't detect any valid [UPNPDevice]s. + </constant> + <constant name="UPNP_RESULT_UNKNOWN_ERROR" value="28" enum="UPNPResult"> + Unknown error. + </constant> + </constants> +</class> diff --git a/modules/upnp/doc_classes/UPNPDevice.xml b/modules/upnp/doc_classes/UPNPDevice.xml new file mode 100644 index 0000000000..9de8042daf --- /dev/null +++ b/modules/upnp/doc_classes/UPNPDevice.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="UPNPDevice" inherits="Reference" category="Core" version="3.1"> + <brief_description> + UPNP device. + </brief_description> + <description> + UPNP device. See [UPNP] for UPNP discovery and utility functions. Provides low-level access to UPNP control commands. Allows to manage port mappings (port forwarding) and to query network information of the device (like local and external IP address and status). Note that methods on this class are synchronous and block the calling thread. + </description> + <tutorials> + </tutorials> + <demos> + </demos> + <methods> + <method name="add_port_mapping" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="port" type="int"> + </argument> + <argument index="1" name="port_internal" type="int" default="0"> + </argument> + <argument index="2" name="desc" type="String" default=""""> + </argument> + <argument index="3" name="proto" type="String" default=""UDP""> + </argument> + <argument index="4" name="duration" type="int" default="0"> + </argument> + <description> + Adds a port mapping to forward the given external port on this [UPNPDevice] for the given protocol to the local machine. See [method UPNP.add_port_mapping]. + </description> + </method> + <method name="delete_port_mapping" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="port" type="int"> + </argument> + <argument index="1" name="proto" type="String" default=""UDP""> + </argument> + <description> + Deletes the port mapping identified by the given port and protocol combination on this device. See [method UPNP.delete_port_mapping]. + </description> + </method> + <method name="is_valid_gateway" qualifiers="const"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if this is a valid IGD (InternetGatewayDevice) which potentially supports port forwarding. + </description> + </method> + <method name="query_external_address" qualifiers="const"> + <return type="String"> + </return> + <description> + Returns the external IP address of this [UPNPDevice] or an empty string. + </description> + </method> + </methods> + <members> + <member name="description_url" type="String" setter="set_description_url" getter="get_description_url"> + URL to the device description. + </member> + <member name="igd_control_url" type="String" setter="set_igd_control_url" getter="get_igd_control_url"> + IDG control URL. + </member> + <member name="igd_our_addr" type="String" setter="set_igd_our_addr" getter="get_igd_our_addr"> + Address of the local machine in the network connecting it to this [UPNPDevice]. + </member> + <member name="igd_service_type" type="String" setter="set_igd_service_type" getter="get_igd_service_type"> + IGD service type. + </member> + <member name="igd_status" type="int" setter="set_igd_status" getter="get_igd_status" enum="UPNPDevice.IGDStatus"> + IGD status. See [enum IGDStatus]. + </member> + <member name="service_type" type="String" setter="set_service_type" getter="get_service_type"> + Service type. + </member> + </members> + <constants> + <constant name="IGD_STATUS_OK" value="0" enum="IGDStatus"> + OK. + </constant> + <constant name="IGD_STATUS_HTTP_ERROR" value="1" enum="IGDStatus"> + HTTP error. + </constant> + <constant name="IGD_STATUS_HTTP_EMPTY" value="2" enum="IGDStatus"> + Empty HTTP response. + </constant> + <constant name="IGD_STATUS_NO_URLS" value="3" enum="IGDStatus"> + Returned response contained no URLs. + </constant> + <constant name="IGD_STATUS_NO_IGD" value="4" enum="IGDStatus"> + Not a valid IGD. + </constant> + <constant name="IGD_STATUS_DISCONNECTED" value="5" enum="IGDStatus"> + Disconnected. + </constant> + <constant name="IGD_STATUS_UNKNOWN_DEVICE" value="6" enum="IGDStatus"> + Unknown device. + </constant> + <constant name="IGD_STATUS_INVALID_CONTROL" value="7" enum="IGDStatus"> + Invalid control. + </constant> + <constant name="IGD_STATUS_MALLOC_ERROR" value="8" enum="IGDStatus"> + Memory allocation error. + </constant> + <constant name="IGD_STATUS_UNKNOWN_ERROR" value="9" enum="IGDStatus"> + Unknown error. + </constant> + </constants> +</class> diff --git a/modules/upnp/register_types.cpp b/modules/upnp/register_types.cpp new file mode 100644 index 0000000000..c79155c4d2 --- /dev/null +++ b/modules/upnp/register_types.cpp @@ -0,0 +1,43 @@ +/*************************************************************************/ +/* register_types.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "register_types.h" +#include "error_macros.h" +#include "upnp.h" +#include "upnpdevice.h" + +void register_upnp_types() { + + ClassDB::register_class<UPNP>(); + ClassDB::register_class<UPNPDevice>(); +} + +void unregister_upnp_types() { +} diff --git a/modules/upnp/register_types.h b/modules/upnp/register_types.h new file mode 100644 index 0000000000..2aeb06abc7 --- /dev/null +++ b/modules/upnp/register_types.h @@ -0,0 +1,32 @@ +/*************************************************************************/ +/* register_types.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +void register_upnp_types(); +void unregister_upnp_types(); diff --git a/modules/upnp/upnp.cpp b/modules/upnp/upnp.cpp new file mode 100644 index 0000000000..32fdfe22f8 --- /dev/null +++ b/modules/upnp/upnp.cpp @@ -0,0 +1,401 @@ +/*************************************************************************/ +/* upnp.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "upnp.h" +#include "miniupnpc/miniwget.h" +#include "upnpcommands.h" +#include <stdlib.h> + +bool UPNP::is_common_device(const String &dev) const { + return dev.empty() || + dev.find("InternetGatewayDevice") >= 0 || + dev.find("WANIPConnection") >= 0 || + dev.find("WANPPPConnection") >= 0 || + dev.find("rootdevice") >= 0; +} + +int UPNP::discover(int timeout, int ttl, const String &device_filter) { + ERR_FAIL_COND_V(timeout < 0, UPNP_RESULT_INVALID_PARAM); + ERR_FAIL_COND_V(ttl < 0, UPNP_RESULT_INVALID_PARAM); + ERR_FAIL_COND_V(ttl > 255, UPNP_RESULT_INVALID_PARAM); + + devices.clear(); + + int error = 0; + struct UPNPDev *devlist; + + if (is_common_device(device_filter)) { + devlist = upnpDiscover(timeout, discover_multicast_if.utf8().get_data(), NULL, discover_local_port, discover_ipv6, ttl, &error); + } else { + devlist = upnpDiscoverAll(timeout, discover_multicast_if.utf8().get_data(), NULL, discover_local_port, discover_ipv6, ttl, &error); + } + + if (error != UPNPDISCOVER_SUCCESS) { + switch (error) { + case UPNPDISCOVER_SOCKET_ERROR: + return UPNP_RESULT_SOCKET_ERROR; + case UPNPDISCOVER_MEMORY_ERROR: + return UPNP_RESULT_MEM_ALLOC_ERROR; + default: + return UPNP_RESULT_UNKNOWN_ERROR; + } + } + + if (!devlist) { + return UPNP_RESULT_NO_DEVICES; + } + + struct UPNPDev *dev = devlist; + + while (dev) { + if (device_filter.empty() || strstr(dev->st, device_filter.utf8().get_data())) { + add_device_to_list(dev, devlist); + } + + dev = dev->pNext; + } + + freeUPNPDevlist(devlist); + + return UPNP_RESULT_SUCCESS; +} + +void UPNP::add_device_to_list(UPNPDev *dev, UPNPDev *devlist) { + Ref<UPNPDevice> new_device; + new_device.instance(); + + new_device->set_description_url(dev->descURL); + new_device->set_service_type(dev->st); + + parse_igd(new_device, devlist); + + devices.push_back(new_device); +} + +char *UPNP::load_description(const String &url, int *size, int *status_code) const { + return (char *)miniwget(url.utf8().get_data(), size, 0, status_code); +} + +void UPNP::parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist) { + int size = 0; + int status_code = -1; + char *xml = load_description(dev->get_description_url(), &size, &status_code); + + if (status_code != 200) { + dev->set_igd_status(UPNPDevice::IGD_STATUS_HTTP_ERROR); + return; + } + + if (!xml || size < 1) { + dev->set_igd_status(UPNPDevice::IGD_STATUS_HTTP_EMPTY); + return; + } + + struct UPNPUrls *urls = (UPNPUrls *)malloc(sizeof(struct UPNPUrls)); + + if (!urls) { + dev->set_igd_status(UPNPDevice::IGD_STATUS_MALLOC_ERROR); + return; + } + + struct IGDdatas data; + + memset(urls, 0, sizeof(struct UPNPUrls)); + + parserootdesc(xml, size, &data); + free(xml); + xml = 0; + + GetUPNPUrls(urls, &data, dev->get_description_url().utf8().get_data(), 0); + + if (!urls) { + dev->set_igd_status(UPNPDevice::IGD_STATUS_NO_URLS); + return; + } + + char addr[16]; + int i = UPNP_GetValidIGD(devlist, urls, &data, (char *)&addr, 16); + + if (i != 1) { + FreeUPNPUrls(urls); + + switch (i) { + case 0: + dev->set_igd_status(UPNPDevice::IGD_STATUS_NO_IGD); + return; + case 2: + dev->set_igd_status(UPNPDevice::IGD_STATUS_DISCONNECTED); + return; + case 3: + dev->set_igd_status(UPNPDevice::IGD_STATUS_UNKNOWN_DEVICE); + return; + default: + dev->set_igd_status(UPNPDevice::IGD_STATUS_UNKNOWN_ERROR); + return; + } + } + + if (urls->controlURL[0] == '\0') { + FreeUPNPUrls(urls); + dev->set_igd_status(UPNPDevice::IGD_STATUS_INVALID_CONTROL); + return; + } + + dev->set_igd_control_url(urls->controlURL); + dev->set_igd_service_type(data.first.servicetype); + dev->set_igd_our_addr(addr); + dev->set_igd_status(UPNPDevice::IGD_STATUS_OK); + + FreeUPNPUrls(urls); +} + +int UPNP::upnp_result(int in) { + switch (in) { + case UPNPCOMMAND_SUCCESS: + return UPNP_RESULT_SUCCESS; + case UPNPCOMMAND_UNKNOWN_ERROR: + return UPNP_RESULT_UNKNOWN_ERROR; + case UPNPCOMMAND_INVALID_ARGS: + return UPNP_RESULT_INVALID_ARGS; + case UPNPCOMMAND_HTTP_ERROR: + return UPNP_RESULT_HTTP_ERROR; + case UPNPCOMMAND_INVALID_RESPONSE: + return UPNP_RESULT_INVALID_RESPONSE; + case UPNPCOMMAND_MEM_ALLOC_ERROR: + return UPNP_RESULT_MEM_ALLOC_ERROR; + + case 402: + return UPNP_RESULT_INVALID_ARGS; + case 403: + return UPNP_RESULT_NOT_AUTHORIZED; + case 501: + return UPNP_RESULT_ACTION_FAILED; + case 606: + return UPNP_RESULT_NOT_AUTHORIZED; + case 714: + return UPNP_RESULT_NO_SUCH_ENTRY_IN_ARRAY; + case 715: + return UPNP_RESULT_SRC_IP_WILDCARD_NOT_PERMITTED; + case 716: + return UPNP_RESULT_EXT_PORT_WILDCARD_NOT_PERMITTED; + case 718: + return UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING; + case 724: + return UPNP_RESULT_SAME_PORT_VALUES_REQUIRED; + case 725: + return UPNP_RESULT_ONLY_PERMANENT_LEASE_SUPPORTED; + case 726: + return UPNP_RESULT_REMOTE_HOST_MUST_BE_WILDCARD; + case 727: + return UPNP_RESULT_EXT_PORT_MUST_BE_WILDCARD; + case 728: + return UPNP_RESULT_NO_PORT_MAPS_AVAILABLE; + case 729: + return UPNP_RESULT_CONFLICT_WITH_OTHER_MECHANISM; + case 732: + return UPNP_RESULT_INT_PORT_WILDCARD_NOT_PERMITTED; + case 733: + return UPNP_RESULT_INCONSISTENT_PARAMETERS; + } + + return UPNP_RESULT_UNKNOWN_ERROR; +} + +int UPNP::get_device_count() const { + return devices.size(); +} + +Ref<UPNPDevice> UPNP::get_device(int index) const { + ERR_FAIL_INDEX_V(index, devices.size(), NULL); + + return devices.get(index); +} + +void UPNP::add_device(Ref<UPNPDevice> device) { + ERR_FAIL_COND(device == NULL); + + devices.push_back(device); +} + +void UPNP::set_device(int index, Ref<UPNPDevice> device) { + ERR_FAIL_INDEX(index, devices.size()); + ERR_FAIL_COND(device == NULL); + + devices.set(index, device); +} + +void UPNP::remove_device(int index) { + ERR_FAIL_INDEX(index, devices.size()); + + devices.remove(index); +} + +void UPNP::clear_devices() { + devices.clear(); +} + +Ref<UPNPDevice> UPNP::get_gateway() const { + ERR_FAIL_COND_V(devices.size() < 1, NULL); + + for (int i = 0; i < devices.size(); i++) { + Ref<UPNPDevice> dev = get_device(i); + + if (dev != NULL && dev->is_valid_gateway()) { + return dev; + } + } + + return NULL; +} + +void UPNP::set_discover_multicast_if(const String &m_if) { + discover_multicast_if = m_if; +} + +String UPNP::get_discover_multicast_if() const { + return discover_multicast_if; +} + +void UPNP::set_discover_local_port(int port) { + discover_local_port = port; +} + +int UPNP::get_discover_local_port() const { + return discover_local_port; +} + +void UPNP::set_discover_ipv6(bool ipv6) { + discover_ipv6 = ipv6; +} + +bool UPNP::is_discover_ipv6() const { + return discover_ipv6; +} + +String UPNP::query_external_address() const { + Ref<UPNPDevice> dev = get_gateway(); + + if (dev == NULL) { + return ""; + } + + return dev->query_external_address(); +} + +int UPNP::add_port_mapping(int port, int port_internal, String desc, String proto, int duration) const { + Ref<UPNPDevice> dev = get_gateway(); + + if (dev == NULL) { + return UPNP_RESULT_NO_GATEWAY; + } + + dev->delete_port_mapping(port, proto); + + return dev->add_port_mapping(port, port_internal, desc, proto, duration); +} + +int UPNP::delete_port_mapping(int port, String proto) const { + Ref<UPNPDevice> dev = get_gateway(); + + if (dev == NULL) { + return UPNP_RESULT_NO_GATEWAY; + } + + return dev->delete_port_mapping(port, proto); +} + +void UPNP::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_device_count"), &UPNP::get_device_count); + ClassDB::bind_method(D_METHOD("get_device", "index"), &UPNP::get_device); + ClassDB::bind_method(D_METHOD("add_device", "device"), &UPNP::add_device); + ClassDB::bind_method(D_METHOD("set_device", "index", "device"), &UPNP::set_device); + ClassDB::bind_method(D_METHOD("remove_device", "index"), &UPNP::remove_device); + ClassDB::bind_method(D_METHOD("clear_devices"), &UPNP::clear_devices); + + ClassDB::bind_method(D_METHOD("get_gateway"), &UPNP::get_gateway); + + ClassDB::bind_method(D_METHOD("discover", "timeout", "ttl", "device_filter"), &UPNP::discover, DEFVAL(2000), DEFVAL(2), DEFVAL("InternetGatewayDevice")); + + ClassDB::bind_method(D_METHOD("query_external_address"), &UPNP::query_external_address); + + ClassDB::bind_method(D_METHOD("add_port_mapping", "port", "port_internal", "desc", "proto", "duration"), &UPNP::add_port_mapping, DEFVAL(0), DEFVAL(""), DEFVAL("UDP"), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("delete_port_mapping", "port", "proto"), &UPNP::delete_port_mapping, DEFVAL("UDP")); + + ClassDB::bind_method(D_METHOD("set_discover_multicast_if", "m_if"), &UPNP::set_discover_multicast_if); + ClassDB::bind_method(D_METHOD("get_discover_multicast_if"), &UPNP::get_discover_multicast_if); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "discover_multicast_if"), "set_discover_multicast_if", "get_discover_multicast_if"); + + ClassDB::bind_method(D_METHOD("set_discover_local_port", "port"), &UPNP::set_discover_local_port); + ClassDB::bind_method(D_METHOD("get_discover_local_port"), &UPNP::get_discover_local_port); + ADD_PROPERTY(PropertyInfo(Variant::INT, "discover_local_port", PROPERTY_HINT_RANGE, "0,65535"), "set_discover_local_port", "get_discover_local_port"); + + ClassDB::bind_method(D_METHOD("set_discover_ipv6", "ipv6"), &UPNP::set_discover_ipv6); + ClassDB::bind_method(D_METHOD("is_discover_ipv6"), &UPNP::is_discover_ipv6); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "discover_ipv6"), "set_discover_ipv6", "is_discover_ipv6"); + + BIND_ENUM_CONSTANT(UPNP_RESULT_SUCCESS); + BIND_ENUM_CONSTANT(UPNP_RESULT_NOT_AUTHORIZED); + BIND_ENUM_CONSTANT(UPNP_RESULT_PORT_MAPPING_NOT_FOUND); + BIND_ENUM_CONSTANT(UPNP_RESULT_INCONSISTENT_PARAMETERS); + BIND_ENUM_CONSTANT(UPNP_RESULT_NO_SUCH_ENTRY_IN_ARRAY); + BIND_ENUM_CONSTANT(UPNP_RESULT_ACTION_FAILED); + BIND_ENUM_CONSTANT(UPNP_RESULT_SRC_IP_WILDCARD_NOT_PERMITTED); + BIND_ENUM_CONSTANT(UPNP_RESULT_EXT_PORT_WILDCARD_NOT_PERMITTED); + BIND_ENUM_CONSTANT(UPNP_RESULT_INT_PORT_WILDCARD_NOT_PERMITTED); + BIND_ENUM_CONSTANT(UPNP_RESULT_REMOTE_HOST_MUST_BE_WILDCARD); + BIND_ENUM_CONSTANT(UPNP_RESULT_EXT_PORT_MUST_BE_WILDCARD); + BIND_ENUM_CONSTANT(UPNP_RESULT_NO_PORT_MAPS_AVAILABLE); + BIND_ENUM_CONSTANT(UPNP_RESULT_CONFLICT_WITH_OTHER_MECHANISM); + BIND_ENUM_CONSTANT(UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING); + BIND_ENUM_CONSTANT(UPNP_RESULT_SAME_PORT_VALUES_REQUIRED); + BIND_ENUM_CONSTANT(UPNP_RESULT_ONLY_PERMANENT_LEASE_SUPPORTED); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_GATEWAY); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_PORT); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_PROTOCOL); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_DURATION); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_ARGS); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_RESPONSE); + BIND_ENUM_CONSTANT(UPNP_RESULT_INVALID_PARAM); + BIND_ENUM_CONSTANT(UPNP_RESULT_HTTP_ERROR); + BIND_ENUM_CONSTANT(UPNP_RESULT_SOCKET_ERROR); + BIND_ENUM_CONSTANT(UPNP_RESULT_MEM_ALLOC_ERROR); + BIND_ENUM_CONSTANT(UPNP_RESULT_NO_GATEWAY); + BIND_ENUM_CONSTANT(UPNP_RESULT_NO_DEVICES); + BIND_ENUM_CONSTANT(UPNP_RESULT_UNKNOWN_ERROR); +} + +UPNP::UPNP() { + discover_multicast_if = ""; + discover_local_port = 0; + discover_ipv6 = false; +} + +UPNP::~UPNP() { +} diff --git a/modules/upnp/upnp.h b/modules/upnp/upnp.h new file mode 100644 index 0000000000..fb0c0f30a0 --- /dev/null +++ b/modules/upnp/upnp.h @@ -0,0 +1,124 @@ +/*************************************************************************/ +/* upnp.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef GODOT_UPNP_H +#define GODOT_UPNP_H + +#include "miniupnpc/miniupnpc.h" +#include "upnpdevice.h" +#include <reference.h> + +class UPNP : public Reference { + + GDCLASS(UPNP, Reference); + +private: + String discover_multicast_if; + int discover_local_port; + bool discover_ipv6; + + Vector<Ref<UPNPDevice> > devices; + + bool is_common_device(const String &dev) const; + void add_device_to_list(UPNPDev *dev, UPNPDev *devlist); + void parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist); + char *load_description(const String &url, int *size, int *status_code) const; + +protected: + static void _bind_methods(); + +public: + enum UPNPResult { + + UPNP_RESULT_SUCCESS, + UPNP_RESULT_NOT_AUTHORIZED, + UPNP_RESULT_PORT_MAPPING_NOT_FOUND, + UPNP_RESULT_INCONSISTENT_PARAMETERS, + UPNP_RESULT_NO_SUCH_ENTRY_IN_ARRAY, + UPNP_RESULT_ACTION_FAILED, + UPNP_RESULT_SRC_IP_WILDCARD_NOT_PERMITTED, + UPNP_RESULT_EXT_PORT_WILDCARD_NOT_PERMITTED, + UPNP_RESULT_INT_PORT_WILDCARD_NOT_PERMITTED, + UPNP_RESULT_REMOTE_HOST_MUST_BE_WILDCARD, + UPNP_RESULT_EXT_PORT_MUST_BE_WILDCARD, + UPNP_RESULT_NO_PORT_MAPS_AVAILABLE, + UPNP_RESULT_CONFLICT_WITH_OTHER_MECHANISM, + UPNP_RESULT_CONFLICT_WITH_OTHER_MAPPING, + UPNP_RESULT_SAME_PORT_VALUES_REQUIRED, + UPNP_RESULT_ONLY_PERMANENT_LEASE_SUPPORTED, + UPNP_RESULT_INVALID_GATEWAY, + UPNP_RESULT_INVALID_PORT, + UPNP_RESULT_INVALID_PROTOCOL, + UPNP_RESULT_INVALID_DURATION, + UPNP_RESULT_INVALID_ARGS, + UPNP_RESULT_INVALID_RESPONSE, + UPNP_RESULT_INVALID_PARAM, + UPNP_RESULT_HTTP_ERROR, + UPNP_RESULT_SOCKET_ERROR, + UPNP_RESULT_MEM_ALLOC_ERROR, + UPNP_RESULT_NO_GATEWAY, + UPNP_RESULT_NO_DEVICES, + UPNP_RESULT_UNKNOWN_ERROR, + }; + + static int upnp_result(int in); + + int get_device_count() const; + Ref<UPNPDevice> get_device(int index) const; + void add_device(Ref<UPNPDevice> device); + void set_device(int index, Ref<UPNPDevice> device); + void remove_device(int index); + void clear_devices(); + + Ref<UPNPDevice> get_gateway() const; + + int discover(int timeout = 2000, int ttl = 2, const String &device_filter = "InternetGatewayDevice"); + + String query_external_address() const; + + int add_port_mapping(int port, int port_internal = 0, String desc = "", String proto = "UDP", int duration = 0) const; + int delete_port_mapping(int port, String proto = "UDP") const; + + void set_discover_multicast_if(const String &m_if); + String get_discover_multicast_if() const; + + void set_discover_local_port(int port); + int get_discover_local_port() const; + + void set_discover_ipv6(bool ipv6); + bool is_discover_ipv6() const; + + UPNP(); + ~UPNP(); +}; + +VARIANT_ENUM_CAST(UPNP::UPNPResult) + +#endif // GODOT_UPNP_H diff --git a/modules/upnp/upnpdevice.cpp b/modules/upnp/upnpdevice.cpp new file mode 100644 index 0000000000..a5959cf649 --- /dev/null +++ b/modules/upnp/upnpdevice.cpp @@ -0,0 +1,197 @@ +/*************************************************************************/ +/* upnpdevice.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "upnpdevice.h" +#include "upnp.h" +#include "upnpcommands.h" + +String UPNPDevice::query_external_address() const { + ERR_FAIL_COND_V(!is_valid_gateway(), ""); + + char addr[16]; + int i = UPNP_GetExternalIPAddress( + igd_control_url.utf8().get_data(), + igd_service_type.utf8().get_data(), + (char *)&addr); + + ERR_FAIL_COND_V(i != UPNPCOMMAND_SUCCESS, ""); + + return String(addr); +} + +int UPNPDevice::add_port_mapping(int port, int port_internal, String desc, String proto, int duration) const { + ERR_FAIL_COND_V(!is_valid_gateway(), UPNP::UPNP_RESULT_INVALID_GATEWAY); + ERR_FAIL_COND_V(port < 1 || port > 65535, UPNP::UPNP_RESULT_INVALID_PORT); + ERR_FAIL_COND_V(port_internal < 0 || port_internal > 65535, UPNP::UPNP_RESULT_INVALID_PORT); // Needs to allow 0 because 0 signifies "use external port as internal port" + ERR_FAIL_COND_V(proto != "UDP" && proto != "TCP", UPNP::UPNP_RESULT_INVALID_PROTOCOL); + ERR_FAIL_COND_V(duration < 0, UPNP::UPNP_RESULT_INVALID_DURATION); + + if (port_internal < 1) { + port_internal = port; + } + + int i = UPNP_AddPortMapping( + igd_control_url.utf8().get_data(), + igd_service_type.utf8().get_data(), + itos(port).utf8().get_data(), + itos(port_internal).utf8().get_data(), + igd_our_addr.utf8().get_data(), + desc.empty() ? 0 : desc.utf8().get_data(), + proto.utf8().get_data(), + NULL, // Remote host, always NULL as IGDs don't support it + duration > 0 ? itos(duration).utf8().get_data() : 0); + + ERR_FAIL_COND_V(i != UPNPCOMMAND_SUCCESS, UPNP::upnp_result(i)); + + return UPNP::UPNP_RESULT_SUCCESS; +} + +int UPNPDevice::delete_port_mapping(int port, String proto) const { + ERR_FAIL_COND_V(port < 1 || port > 65535, UPNP::UPNP_RESULT_INVALID_PORT); + ERR_FAIL_COND_V(proto != "UDP" && proto != "TCP", UPNP::UPNP_RESULT_INVALID_PROTOCOL); + + int i = UPNP_DeletePortMapping( + igd_control_url.utf8().get_data(), + igd_service_type.utf8().get_data(), + itos(port).utf8().get_data(), + proto.utf8().get_data(), + NULL // Remote host, always NULL as IGDs don't support it + ); + + ERR_FAIL_COND_V(i != UPNPCOMMAND_SUCCESS, UPNP::upnp_result(i)); + + return UPNP::UPNP_RESULT_SUCCESS; +} + +void UPNPDevice::set_description_url(const String &url) { + description_url = url; +} + +String UPNPDevice::get_description_url() const { + return description_url; +} + +void UPNPDevice::set_service_type(const String &type) { + service_type = type; +} + +String UPNPDevice::get_service_type() const { + return service_type; +} + +void UPNPDevice::set_igd_control_url(const String &url) { + igd_control_url = url; +} + +String UPNPDevice::get_igd_control_url() const { + return igd_control_url; +} + +void UPNPDevice::set_igd_service_type(const String &type) { + igd_service_type = type; +} + +String UPNPDevice::get_igd_service_type() const { + return igd_service_type; +} + +void UPNPDevice::set_igd_our_addr(const String &addr) { + igd_our_addr = addr; +} + +String UPNPDevice::get_igd_our_addr() const { + return igd_our_addr; +} + +void UPNPDevice::set_igd_status(IGDStatus status) { + igd_status = status; +} + +UPNPDevice::IGDStatus UPNPDevice::get_igd_status() const { + return igd_status; +} + +bool UPNPDevice::is_valid_gateway() const { + return igd_status == IGD_STATUS_OK; +} + +void UPNPDevice::_bind_methods() { + ClassDB::bind_method(D_METHOD("is_valid_gateway"), &UPNPDevice::is_valid_gateway); + ClassDB::bind_method(D_METHOD("query_external_address"), &UPNPDevice::query_external_address); + ClassDB::bind_method(D_METHOD("add_port_mapping", "port", "port_internal", "desc", "proto", "duration"), &UPNPDevice::add_port_mapping, DEFVAL(0), DEFVAL(""), DEFVAL("UDP"), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("delete_port_mapping", "port", "proto"), &UPNPDevice::delete_port_mapping, DEFVAL("UDP")); + + ClassDB::bind_method(D_METHOD("set_description_url", "url"), &UPNPDevice::set_description_url); + ClassDB::bind_method(D_METHOD("get_description_url"), &UPNPDevice::get_description_url); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "description_url"), "set_description_url", "get_description_url"); + + ClassDB::bind_method(D_METHOD("set_service_type", "type"), &UPNPDevice::set_service_type); + ClassDB::bind_method(D_METHOD("get_service_type"), &UPNPDevice::get_service_type); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "service_type"), "set_service_type", "get_service_type"); + + ClassDB::bind_method(D_METHOD("set_igd_control_url", "url"), &UPNPDevice::set_igd_control_url); + ClassDB::bind_method(D_METHOD("get_igd_control_url"), &UPNPDevice::get_igd_control_url); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "igd_control_url"), "set_igd_control_url", "get_igd_control_url"); + + ClassDB::bind_method(D_METHOD("set_igd_service_type", "type"), &UPNPDevice::set_igd_service_type); + ClassDB::bind_method(D_METHOD("get_igd_service_type"), &UPNPDevice::get_igd_service_type); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "igd_service_type"), "set_igd_service_type", "get_igd_service_type"); + + ClassDB::bind_method(D_METHOD("set_igd_our_addr", "addr"), &UPNPDevice::set_igd_our_addr); + ClassDB::bind_method(D_METHOD("get_igd_our_addr"), &UPNPDevice::get_igd_our_addr); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "igd_our_addr"), "set_igd_our_addr", "get_igd_our_addr"); + + ClassDB::bind_method(D_METHOD("set_igd_status", "status"), &UPNPDevice::set_igd_status); + ClassDB::bind_method(D_METHOD("get_igd_status"), &UPNPDevice::get_igd_status); + ADD_PROPERTY(PropertyInfo(Variant::INT, "igd_status", PROPERTY_HINT_ENUM), "set_igd_status", "get_igd_status"); + + BIND_ENUM_CONSTANT(IGD_STATUS_OK); + BIND_ENUM_CONSTANT(IGD_STATUS_HTTP_ERROR); + BIND_ENUM_CONSTANT(IGD_STATUS_HTTP_EMPTY); + BIND_ENUM_CONSTANT(IGD_STATUS_NO_URLS); + BIND_ENUM_CONSTANT(IGD_STATUS_NO_IGD); + BIND_ENUM_CONSTANT(IGD_STATUS_DISCONNECTED); + BIND_ENUM_CONSTANT(IGD_STATUS_UNKNOWN_DEVICE); + BIND_ENUM_CONSTANT(IGD_STATUS_INVALID_CONTROL); + BIND_ENUM_CONSTANT(IGD_STATUS_MALLOC_ERROR); + BIND_ENUM_CONSTANT(IGD_STATUS_UNKNOWN_ERROR); +} + +UPNPDevice::UPNPDevice() { + description_url = ""; + service_type = ""; + igd_control_url = ""; + igd_service_type = ""; + igd_our_addr = ""; + igd_status = IGD_STATUS_UNKNOWN_ERROR; +} + +UPNPDevice::~UPNPDevice() { +} diff --git a/modules/upnp/upnpdevice.h b/modules/upnp/upnpdevice.h new file mode 100644 index 0000000000..25c9fe1ba3 --- /dev/null +++ b/modules/upnp/upnpdevice.h @@ -0,0 +1,95 @@ +/*************************************************************************/ +/* upnpdevice.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef GODOT_UPNPDEVICE_H +#define GODOT_UPNPDEVICE_H + +#include <reference.h> + +class UPNPDevice : public Reference { + + GDCLASS(UPNPDevice, Reference); + +public: + enum IGDStatus { + + IGD_STATUS_OK, + IGD_STATUS_HTTP_ERROR, + IGD_STATUS_HTTP_EMPTY, + IGD_STATUS_NO_URLS, + IGD_STATUS_NO_IGD, + IGD_STATUS_DISCONNECTED, + IGD_STATUS_UNKNOWN_DEVICE, + IGD_STATUS_INVALID_CONTROL, + IGD_STATUS_MALLOC_ERROR, + IGD_STATUS_UNKNOWN_ERROR, + }; + + void set_description_url(const String &url); + String get_description_url() const; + + void set_service_type(const String &type); + String get_service_type() const; + + void set_igd_control_url(const String &url); + String get_igd_control_url() const; + + void set_igd_service_type(const String &type); + String get_igd_service_type() const; + + void set_igd_our_addr(const String &addr); + String get_igd_our_addr() const; + + void set_igd_status(IGDStatus status); + IGDStatus get_igd_status() const; + + bool is_valid_gateway() const; + String query_external_address() const; + int add_port_mapping(int port, int port_internal = 0, String desc = "", String proto = "UDP", int duration = 0) const; + int delete_port_mapping(int port, String proto = "UDP") const; + + UPNPDevice(); + ~UPNPDevice(); + +protected: + static void _bind_methods(); + +private: + String description_url; + String service_type; + String igd_control_url; + String igd_service_type; + String igd_our_addr; + IGDStatus igd_status; +}; + +VARIANT_ENUM_CAST(UPNPDevice::IGDStatus) + +#endif // GODOT_UPNPDEVICE_H diff --git a/modules/visual_script/config.py b/modules/visual_script/config.py index 6b1ce41014..07a0450734 100644 --- a/modules/visual_script/config.py +++ b/modules/visual_script/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index 318fb7fb9c..9331092171 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -1971,11 +1971,11 @@ Ref<Script> VisualScriptInstance::get_script() const { return script; } -ScriptInstance::RPCMode VisualScriptInstance::get_rpc_mode(const StringName &p_method) const { +MultiplayerAPI::RPCMode VisualScriptInstance::get_rpc_mode(const StringName &p_method) const { const Map<StringName, VisualScript::Function>::Element *E = script->functions.find(p_method); if (!E) { - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } if (E->get().function_id >= 0 && E->get().nodes.has(E->get().function_id)) { @@ -1987,12 +1987,12 @@ ScriptInstance::RPCMode VisualScriptInstance::get_rpc_mode(const StringName &p_m } } - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } -ScriptInstance::RPCMode VisualScriptInstance::get_rset_mode(const StringName &p_variable) const { +MultiplayerAPI::RPCMode VisualScriptInstance::get_rset_mode(const StringName &p_variable) const { - return RPC_MODE_DISABLED; + return MultiplayerAPI::RPC_MODE_DISABLED; } void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_owner) { diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index a15360ad39..aaa6dfea11 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -433,8 +433,8 @@ public: virtual ScriptLanguage *get_language(); - virtual RPCMode get_rpc_mode(const StringName &p_method) const; - virtual RPCMode get_rset_mode(const StringName &p_variable) const; + virtual MultiplayerAPI::RPCMode get_rpc_mode(const StringName &p_method) const; + virtual MultiplayerAPI::RPCMode get_rset_mode(const StringName &p_variable) const; VisualScriptInstance(); ~VisualScriptInstance(); diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index 4803f29519..8b7b809ec0 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -93,7 +93,7 @@ bool VisualScriptFunction::_set(const StringName &p_name, const Variant &p_value } if (p_name == "rpc/mode") { - rpc_mode = ScriptInstance::RPCMode(int(p_value)); + rpc_mode = MultiplayerAPI::RPCMode(int(p_value)); return true; } @@ -267,11 +267,11 @@ int VisualScriptFunction::get_argument_count() const { return arguments.size(); } -void VisualScriptFunction::set_rpc_mode(ScriptInstance::RPCMode p_mode) { +void VisualScriptFunction::set_rpc_mode(MultiplayerAPI::RPCMode p_mode) { rpc_mode = p_mode; } -ScriptInstance::RPCMode VisualScriptFunction::get_rpc_mode() const { +MultiplayerAPI::RPCMode VisualScriptFunction::get_rpc_mode() const { return rpc_mode; } @@ -319,7 +319,7 @@ VisualScriptFunction::VisualScriptFunction() { stack_size = 256; stack_less = false; sequenced = true; - rpc_mode = ScriptInstance::RPC_MODE_DISABLED; + rpc_mode = MultiplayerAPI::RPC_MODE_DISABLED; } void VisualScriptFunction::set_stack_less(bool p_enable) { diff --git a/modules/visual_script/visual_script_nodes.h b/modules/visual_script/visual_script_nodes.h index a0bc35dd92..9bfbd46e47 100644 --- a/modules/visual_script/visual_script_nodes.h +++ b/modules/visual_script/visual_script_nodes.h @@ -46,7 +46,7 @@ class VisualScriptFunction : public VisualScriptNode { bool stack_less; int stack_size; - ScriptInstance::RPCMode rpc_mode; + MultiplayerAPI::RPCMode rpc_mode; bool sequenced; protected: @@ -93,8 +93,8 @@ public: void set_return_type(Variant::Type p_type); Variant::Type get_return_type() const; - void set_rpc_mode(ScriptInstance::RPCMode p_mode); - ScriptInstance::RPCMode get_rpc_mode() const; + void set_rpc_mode(MultiplayerAPI::RPCMode p_mode); + MultiplayerAPI::RPCMode get_rpc_mode() const; virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance); diff --git a/modules/vorbis/config.py b/modules/vorbis/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/vorbis/config.py +++ b/modules/vorbis/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/webm/config.py b/modules/webm/config.py index dcae4447d5..72a4073423 100644 --- a/modules/webm/config.py +++ b/modules/webm/config.py @@ -1,5 +1,5 @@ -def can_build(platform): - return platform != 'iphone' +def can_build(env, platform): + return platform not in ['iphone'] def configure(env): pass diff --git a/modules/webp/config.py b/modules/webp/config.py index 5f133eba90..1c8cd12a2d 100644 --- a/modules/webp/config.py +++ b/modules/webp/config.py @@ -1,4 +1,4 @@ -def can_build(platform): +def can_build(env, platform): return True def configure(env): diff --git a/modules/websocket/SCsub b/modules/websocket/SCsub index b36f1beacd..c9cbdfbc03 100644 --- a/modules/websocket/SCsub +++ b/modules/websocket/SCsub @@ -7,7 +7,7 @@ Import('env_modules') env_lws = env_modules.Clone() -thirdparty_dir = "#thirdparty/lws/" +thirdparty_dir = "#thirdparty/libwebsockets/" helper_dir = "win32helpers/" thirdparty_sources = [ "client/client.c", @@ -67,7 +67,7 @@ else: env_lws.add_source_files(env.modules_sources, thirdparty_sources) env_lws.Append(CPPPATH=[thirdparty_dir]) - wrapper_includes = ["#thirdparty/lws/mbedtls_wrapper/include/" + inc for inc in ["internal", "openssl", "platform", ""]] + wrapper_includes = ["#thirdparty/libwebsockets/mbedtls_wrapper/include/" + inc for inc in ["internal", "openssl", "platform", ""]] env_lws.Prepend(CPPPATH=wrapper_includes) if env['builtin_mbedtls']: diff --git a/modules/websocket/config.py b/modules/websocket/config.py index 399ca88fc1..f59ef432b4 100644 --- a/modules/websocket/config.py +++ b/modules/websocket/config.py @@ -1,8 +1,6 @@ - -def can_build(platform): +def can_build(env, platform): return True - def configure(env): pass diff --git a/modules/websocket/lws_peer.cpp b/modules/websocket/lws_peer.cpp index 3855a39aef..96acb99cc4 100644 --- a/modules/websocket/lws_peer.cpp +++ b/modules/websocket/lws_peer.cpp @@ -191,8 +191,8 @@ IP_Address LWSPeer::get_connected_host() const { IP_Address ip; int port = 0; - socklen_t len = 0; struct sockaddr_storage addr; + socklen_t len = sizeof(addr); int fd = lws_get_socket_fd(wsi); ERR_FAIL_COND_V(fd == -1, IP_Address()); @@ -212,8 +212,8 @@ uint16_t LWSPeer::get_connected_port() const { IP_Address ip; int port = 0; - socklen_t len = 0; struct sockaddr_storage addr; + socklen_t len = sizeof(addr); int fd = lws_get_socket_fd(wsi); ERR_FAIL_COND_V(fd == -1, 0); diff --git a/platform/server/detect.py b/platform/server/detect.py index 7bf445b43f..266b0c5cc9 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -67,9 +67,6 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if not env['builtin_libwebp']: - env.ParseConfig('pkg-config libwebp --cflags --libs') - # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: @@ -124,6 +121,21 @@ def configure(env): if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') + if not env['builtin_libwebp']: + env.ParseConfig('pkg-config libwebp --cflags --libs') + + if not env['builtin_mbedtls']: + # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 + env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) + + if not env['builtin_libwebsockets']: + env.ParseConfig('pkg-config libwebsockets --cflags --libs') + + if not env['builtin_miniupnpc']: + # No pkgconfig file so far, hardcode default paths. + env.Append(CPPPATH=["/usr/include/miniupnpc"]) + env.Append(LIBS=["miniupnpc"]) + # On Linux wchar_t should be 32-bits # 16-bit library shouldn't be required due to compiler optimisations if not env['builtin_pcre2']: diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index aef1b8a595..3e0c4a7c0c 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -2209,10 +2209,6 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments, argss += String(" \"") + E->get() + "\""; } - //print_line("ARGS: "+argss); - //argss+"\""; - //argss+=" 2>nul"; - FILE *f = _wpopen(argss.c_str(), L"r"); ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); @@ -2239,15 +2235,12 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments, I = I->next(); }; - //cmdline+="\""; - ProcessInfo pi; ZeroMemory(&pi.si, sizeof(pi.si)); pi.si.cb = sizeof(pi.si); ZeroMemory(&pi.pi, sizeof(pi.pi)); LPSTARTUPINFOW si_w = (LPSTARTUPINFOW)&pi.si; - print_line("running cmdline: " + cmdline); Vector<CharType> modstr; //windows wants to change this no idea why modstr.resize(cmdline.size()); for (int i = 0; i < cmdline.size(); i++) diff --git a/platform/x11/detect.py b/platform/x11/detect.py index ad2620c9f5..e1a8054dec 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -158,14 +158,6 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if not env['builtin_mbedtls']: - # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 - env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) - - if not env['builtin_libwebp']: - env.ParseConfig('pkg-config libwebp --cflags --libs') - - # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: @@ -205,6 +197,10 @@ def configure(env): env['builtin_libogg'] = False # Needed to link against system libtheora env['builtin_libvorbis'] = False # Needed to link against system libtheora env.ParseConfig('pkg-config theora theoradec --cflags --libs') + else: + list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] + if any(platform.machine() in s for s in list_of_x86): + env["x86_libtheora_opt_gcc"] = True if not env['builtin_libvpx']: env.ParseConfig('pkg-config vpx --cflags --libs') @@ -220,10 +216,20 @@ def configure(env): if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') - if env['builtin_libtheora']: - list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] - if any(platform.machine() in s for s in list_of_x86): - env["x86_libtheora_opt_gcc"] = True + if not env['builtin_libwebp']: + env.ParseConfig('pkg-config libwebp --cflags --libs') + + if not env['builtin_mbedtls']: + # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 + env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) + + if not env['builtin_libwebsockets']: + env.ParseConfig('pkg-config libwebsockets --cflags --libs') + + if not env['builtin_miniupnpc']: + # No pkgconfig file so far, hardcode default paths. + env.Append(CPPPATH=["/usr/include/miniupnpc"]) + env.Append(LIBS=["miniupnpc"]) # On Linux wchar_t should be 32-bits # 16-bit library shouldn't be required due to compiler optimisations diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 27bdeda4a8..f1c09594da 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -272,8 +272,7 @@ bool CanvasItem::is_visible_in_tree() const { void CanvasItem::_propagate_visibility_changed(bool p_visible) { - if (!first_draw) - notification(NOTIFICATION_VISIBILITY_CHANGED); + notification(NOTIFICATION_VISIBILITY_CHANGED); if (p_visible) update(); //todo optimize diff --git a/scene/2d/skeleton_2d.cpp b/scene/2d/skeleton_2d.cpp index 0595cc43b8..8ceffb3c27 100644 --- a/scene/2d/skeleton_2d.cpp +++ b/scene/2d/skeleton_2d.cpp @@ -89,8 +89,8 @@ void Bone2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_default_length", "default_length"), &Bone2D::set_default_length); ClassDB::bind_method(D_METHOD("get_default_length"), &Bone2D::get_default_length); - ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D,"rest"),"set_rest","get_rest"); - ADD_PROPERTY(PropertyInfo(Variant::REAL,"default_length",PROPERTY_HINT_RANGE,"1,1024,1"),"set_default_length","get_default_length"); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "rest"), "set_rest", "get_rest"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "default_length", PROPERTY_HINT_RANGE, "1,1024,1"), "set_default_length", "get_default_length"); } void Bone2D::set_rest(const Transform2D &p_rest) { @@ -120,8 +120,7 @@ void Bone2D::apply_rest() { void Bone2D::set_default_length(float p_length) { - default_length=p_length; - + default_length = p_length; } float Bone2D::get_default_length() const { @@ -129,7 +128,7 @@ float Bone2D::get_default_length() const { } int Bone2D::get_index_in_skeleton() const { - ERR_FAIL_COND_V(!skeleton,-1); + ERR_FAIL_COND_V(!skeleton, -1); skeleton->_update_bone_setup(); return skeleton_index; } @@ -137,22 +136,21 @@ String Bone2D::get_configuration_warning() const { String warning = Node2D::get_configuration_warning(); if (!skeleton) { - if (warning!=String()) { - warning+="\n"; + if (warning != String()) { + warning += "\n"; } if (parent_bone) { - warning+=TTR("This Bone2D chain should end at a Skeleton2D node."); + warning += TTR("This Bone2D chain should end at a Skeleton2D node."); } else { - warning+=TTR("A Bone2D only works with a Skeleton2D or another Bone2D as parent node."); + warning += TTR("A Bone2D only works with a Skeleton2D or another Bone2D as parent node."); } } - if (rest==Transform2D(0,0,0,0,0,0)) { - if (warning!=String()) { - warning+="\n"; + if (rest == Transform2D(0, 0, 0, 0, 0, 0)) { + if (warning != String()) { + warning += "\n"; } - warning+=TTR("This bone lacks a proper REST pose. Go to the Skeleton2D node and set one."); - + warning += TTR("This bone lacks a proper REST pose. Go to the Skeleton2D node and set one."); } return warning; @@ -161,12 +159,12 @@ String Bone2D::get_configuration_warning() const { Bone2D::Bone2D() { skeleton = NULL; parent_bone = NULL; - skeleton_index=-1; - default_length=16; + skeleton_index = -1; + default_length = 16; set_notify_local_transform(true); //this is a clever hack so the bone knows no rest has been set yet, allowing to show an error. - for(int i=0;i<3;i++) { - rest[i]=Vector2(0,0); + for (int i = 0; i < 3; i++) { + rest[i] = Vector2(0, 0); } } @@ -194,12 +192,12 @@ void Skeleton2D::_update_bone_setup() { for (int i = 0; i < bones.size(); i++) { bones[i].rest_inverse = bones[i].bone->get_skeleton_rest().affine_inverse(); //bind pose - bones[i].bone->skeleton_index=i; + bones[i].bone->skeleton_index = i; Bone2D *parent_bone = Object::cast_to<Bone2D>(bones[i].bone->get_parent()); if (parent_bone) { - bones[i].parent_index=parent_bone->skeleton_index; + bones[i].parent_index = parent_bone->skeleton_index; } else { - bones[i].parent_index=-1; + bones[i].parent_index = -1; } } @@ -230,8 +228,8 @@ void Skeleton2D::_update_transform() { for (int i = 0; i < bones.size(); i++) { - ERR_CONTINUE(bones[i].parent_index>=i); - if (bones[i].parent_index>=0) { + ERR_CONTINUE(bones[i].parent_index >= i); + if (bones[i].parent_index >= 0) { bones[i].accum_transform = bones[bones[i].parent_index].accum_transform * bones[i].bone->get_transform(); } else { bones[i].accum_transform = bones[i].bone->get_transform(); @@ -277,7 +275,7 @@ void Skeleton2D::_notification(int p_what) { } if (p_what == NOTIFICATION_TRANSFORM_CHANGED) { - VS::get_singleton()->skeleton_set_base_transform_2d(skeleton,get_global_transform()); + VS::get_singleton()->skeleton_set_base_transform_2d(skeleton, get_global_transform()); } } diff --git a/scene/2d/skeleton_2d.h b/scene/2d/skeleton_2d.h index b86cf3be81..9d0a061457 100644 --- a/scene/2d/skeleton_2d.h +++ b/scene/2d/skeleton_2d.h @@ -38,12 +38,13 @@ class Skeleton2D; class Bone2D : public Node2D { GDCLASS(Bone2D, Node2D) + friend class Skeleton2D; + Bone2D *parent_bone; Skeleton2D *skeleton; Transform2D rest; float default_length; -friend class Skeleton2D; int skeleton_index; protected: diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 4bd92d888d..25cb74a494 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -777,6 +777,7 @@ void FileDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("set_mode", "mode"), &FileDialog::set_mode); ClassDB::bind_method(D_METHOD("get_mode"), &FileDialog::get_mode); ClassDB::bind_method(D_METHOD("get_vbox"), &FileDialog::get_vbox); + ClassDB::bind_method(D_METHOD("get_line_edit"), &FileDialog::get_line_edit); ClassDB::bind_method(D_METHOD("set_access", "access"), &FileDialog::set_access); ClassDB::bind_method(D_METHOD("get_access"), &FileDialog::get_access); ClassDB::bind_method(D_METHOD("set_show_hidden_files", "show"), &FileDialog::set_show_hidden_files); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 3643aedb85..ffb8acc687 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -40,7 +40,6 @@ #include "viewport.h" VARIANT_ENUM_CAST(Node::PauseMode); -VARIANT_ENUM_CAST(Node::RPCMode); void Node::_notification(int p_notification) { @@ -485,18 +484,18 @@ bool Node::is_network_master() const { /***** RPC CONFIG ********/ -void Node::rpc_config(const StringName &p_method, RPCMode p_mode) { +void Node::rpc_config(const StringName &p_method, MultiplayerAPI::RPCMode p_mode) { - if (p_mode == RPC_MODE_DISABLED) { + if (p_mode == MultiplayerAPI::RPC_MODE_DISABLED) { data.rpc_methods.erase(p_method); } else { data.rpc_methods[p_method] = p_mode; }; } -void Node::rset_config(const StringName &p_property, RPCMode p_mode) { +void Node::rset_config(const StringName &p_property, MultiplayerAPI::RPCMode p_mode) { - if (p_mode == RPC_MODE_DISABLED) { + if (p_mode == MultiplayerAPI::RPC_MODE_DISABLED) { data.rpc_properties.erase(p_property); } else { data.rpc_properties[p_property] = p_mode; @@ -718,121 +717,14 @@ void Node::set_custom_multiplayer(Ref<MultiplayerAPI> p_multiplayer) { multiplayer = p_multiplayer; } -const Map<StringName, Node::RPCMode>::Element *Node::get_node_rpc_mode(const StringName &p_method) { +const Map<StringName, MultiplayerAPI::RPCMode>::Element *Node::get_node_rpc_mode(const StringName &p_method) { return data.rpc_methods.find(p_method); } -const Map<StringName, Node::RPCMode>::Element *Node::get_node_rset_mode(const StringName &p_property) { +const Map<StringName, MultiplayerAPI::RPCMode>::Element *Node::get_node_rset_mode(const StringName &p_property) { return data.rpc_properties.find(p_property); } -bool Node::can_call_rpc(const StringName &p_method, int p_from) const { - - const Map<StringName, RPCMode>::Element *E = data.rpc_methods.find(p_method); - if (E) { - - switch (E->get()) { - - case RPC_MODE_DISABLED: { - return false; - } break; - case RPC_MODE_REMOTE: { - return true; - } break; - case RPC_MODE_SYNC: { - return true; - } break; - case RPC_MODE_MASTER: { - return is_network_master(); - } break; - case RPC_MODE_SLAVE: { - return !is_network_master() && p_from == get_network_master(); - } break; - } - } - - if (get_script_instance()) { - //attempt with script - ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method); - - switch (rpc_mode) { - - case ScriptInstance::RPC_MODE_DISABLED: { - return false; - } break; - case ScriptInstance::RPC_MODE_REMOTE: { - return true; - } break; - case ScriptInstance::RPC_MODE_SYNC: { - return true; - } break; - case ScriptInstance::RPC_MODE_MASTER: { - return is_network_master(); - } break; - case ScriptInstance::RPC_MODE_SLAVE: { - return !is_network_master() && p_from == get_network_master(); - } break; - } - } - - ERR_PRINTS("RPC from " + itos(p_from) + " on unauthorized method attempted: " + String(p_method) + " on base: " + String(Variant(this))); - return false; -} - -bool Node::can_call_rset(const StringName &p_property, int p_from) const { - - const Map<StringName, RPCMode>::Element *E = data.rpc_properties.find(p_property); - if (E) { - - switch (E->get()) { - - case RPC_MODE_DISABLED: { - return false; - } break; - case RPC_MODE_REMOTE: { - return true; - } break; - case RPC_MODE_SYNC: { - return true; - } break; - case RPC_MODE_MASTER: { - return is_network_master(); - } break; - case RPC_MODE_SLAVE: { - return !is_network_master() && p_from == get_network_master(); - } break; - } - } - - if (get_script_instance()) { - //attempt with script - ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property); - - switch (rpc_mode) { - - case ScriptInstance::RPC_MODE_DISABLED: { - return false; - } break; - case ScriptInstance::RPC_MODE_REMOTE: { - return true; - } break; - case ScriptInstance::RPC_MODE_SYNC: { - return true; - } break; - case ScriptInstance::RPC_MODE_MASTER: { - return is_network_master(); - } break; - case ScriptInstance::RPC_MODE_SLAVE: { - return !is_network_master() && p_from == get_network_master(); - } break; - } - } - - ERR_PRINTS("RSET from " + itos(p_from) + " on unauthorized property attempted: " + String(p_property) + " on base: " + String(Variant(this))); - - return false; -} - bool Node::can_process() const { ERR_FAIL_COND_V(!is_inside_tree(), false); @@ -2802,12 +2694,6 @@ void Node::_bind_methods() { BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS); BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS); - BIND_ENUM_CONSTANT(RPC_MODE_DISABLED); - BIND_ENUM_CONSTANT(RPC_MODE_REMOTE); - BIND_ENUM_CONSTANT(RPC_MODE_SYNC); - BIND_ENUM_CONSTANT(RPC_MODE_MASTER); - BIND_ENUM_CONSTANT(RPC_MODE_SLAVE); - BIND_ENUM_CONSTANT(PAUSE_MODE_INHERIT); BIND_ENUM_CONSTANT(PAUSE_MODE_STOP); BIND_ENUM_CONSTANT(PAUSE_MODE_PROCESS); diff --git a/scene/main/node.h b/scene/main/node.h index 540f34cba7..341349de79 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -65,15 +65,6 @@ public: #endif }; - enum RPCMode { - - RPC_MODE_DISABLED, //no rpc for this method, calls to this will be blocked (default) - RPC_MODE_REMOTE, // using rpc() on it will call method / set property in all other peers - RPC_MODE_SYNC, // using rpc() on it will call method / set property in all other peers and locally - RPC_MODE_MASTER, // usinc rpc() on it will call method on wherever the master is, be it local or remote - RPC_MODE_SLAVE, // usinc rpc() on it will call method for all slaves, be it local or remote - }; - struct Comparator { bool operator()(const Node *p_a, const Node *p_b) const { return p_b->is_greater_than(p_a); } @@ -120,8 +111,8 @@ private: Node *pause_owner; int network_master; - Map<StringName, RPCMode> rpc_methods; - Map<StringName, RPCMode> rpc_properties; + Map<StringName, MultiplayerAPI::RPCMode> rpc_methods; + Map<StringName, MultiplayerAPI::RPCMode> rpc_properties; // variables used to properly sort the node when processing, ignored otherwise //should move all the stuff below to bits @@ -404,8 +395,8 @@ public: int get_network_master() const; bool is_network_master() const; - void rpc_config(const StringName &p_method, RPCMode p_mode); // config a local method for RPC - void rset_config(const StringName &p_property, RPCMode p_mode); // config a local property for RPC + void rpc_config(const StringName &p_method, MultiplayerAPI::RPCMode p_mode); // config a local method for RPC + void rset_config(const StringName &p_property, MultiplayerAPI::RPCMode p_mode); // config a local property for RPC void rpc(const StringName &p_method, VARIANT_ARG_LIST); //rpc call, honors RPCMode void rpc_unreliable(const StringName &p_method, VARIANT_ARG_LIST); //rpc call, honors RPCMode @@ -423,11 +414,8 @@ public: Ref<MultiplayerAPI> get_multiplayer() const; Ref<MultiplayerAPI> get_custom_multiplayer() const; void set_custom_multiplayer(Ref<MultiplayerAPI> p_multiplayer); - const Map<StringName, RPCMode>::Element *get_node_rpc_mode(const StringName &p_method); - const Map<StringName, RPCMode>::Element *get_node_rset_mode(const StringName &p_property); - - bool can_call_rpc(const StringName &p_method, int p_from) const; - bool can_call_rset(const StringName &p_property, int p_from) const; + const Map<StringName, MultiplayerAPI::RPCMode>::Element *get_node_rpc_mode(const StringName &p_method); + const Map<StringName, MultiplayerAPI::RPCMode>::Element *get_node_rset_mode(const StringName &p_property); Node(); ~Node(); diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 607dbebf6c..8d6e57b335 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -485,7 +485,9 @@ bool SceneTree::idle(float p_time) { idle_process_time = p_time; - multiplayer->poll(); + if (multiplayer_poll) { + multiplayer->poll(); + } emit_signal("idle_frame"); @@ -1672,6 +1674,14 @@ Ref<MultiplayerAPI> SceneTree::get_multiplayer() const { return multiplayer; } +void SceneTree::set_multiplayer_poll_enabled(bool p_enabled) { + multiplayer_poll = p_enabled; +} + +bool SceneTree::is_multiplayer_poll_enabled() const { + return multiplayer_poll; +} + void SceneTree::set_multiplayer(Ref<MultiplayerAPI> p_multiplayer) { ERR_FAIL_COND(!p_multiplayer.is_valid()); @@ -1802,6 +1812,8 @@ void SceneTree::_bind_methods() { ClassDB::bind_method(D_METHOD("set_multiplayer", "multiplayer"), &SceneTree::set_multiplayer); ClassDB::bind_method(D_METHOD("get_multiplayer"), &SceneTree::get_multiplayer); + ClassDB::bind_method(D_METHOD("set_multiplayer_poll_enabled", "enabled"), &SceneTree::set_multiplayer_poll_enabled); + ClassDB::bind_method(D_METHOD("is_multiplayer_poll_enabled"), &SceneTree::is_multiplayer_poll_enabled); ClassDB::bind_method(D_METHOD("set_network_peer", "peer"), &SceneTree::set_network_peer); ClassDB::bind_method(D_METHOD("get_network_peer"), &SceneTree::get_network_peer); ClassDB::bind_method(D_METHOD("is_network_server"), &SceneTree::is_network_server); @@ -1830,6 +1842,7 @@ void SceneTree::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "network_peer", PROPERTY_HINT_RESOURCE_TYPE, "NetworkedMultiplayerPeer", 0), "set_network_peer", "get_network_peer"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "root", PROPERTY_HINT_RESOURCE_TYPE, "Node", 0), "", "get_root"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "multiplayer", PROPERTY_HINT_RESOURCE_TYPE, "MultiplayerAPI", 0), "set_multiplayer", "get_multiplayer"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "multiplayer_poll"), "set_multiplayer_poll_enabled", "is_multiplayer_poll_enabled"); ADD_SIGNAL(MethodInfo("tree_changed")); ADD_SIGNAL(MethodInfo("node_added", PropertyInfo(Variant::OBJECT, "node"))); @@ -1934,6 +1947,7 @@ SceneTree::SceneTree() { root->set_world(Ref<World>(memnew(World))); // Initialize network state + multiplayer_poll = true; set_multiplayer(Ref<MultiplayerAPI>(memnew(MultiplayerAPI))); //root->set_world_2d( Ref<World2D>( memnew( World2D ))); diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index 6e0156546e..aa8d78b1e1 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -186,6 +186,7 @@ private: ///network/// Ref<MultiplayerAPI> multiplayer; + bool multiplayer_poll; void _network_peer_connected(int p_id); void _network_peer_disconnected(int p_id); @@ -411,6 +412,8 @@ public: //network API Ref<MultiplayerAPI> get_multiplayer() const; + void set_multiplayer_poll_enabled(bool p_enabled); + bool is_multiplayer_poll_enabled() const; void set_multiplayer(Ref<MultiplayerAPI> p_multiplayer); void set_network_peer(const Ref<NetworkedMultiplayerPeer> &p_network_peer); Ref<NetworkedMultiplayerPeer> get_network_peer() const; diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index f8661638c3..2069e64c43 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -1625,14 +1625,14 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "smoothstep", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC4, TYPE_VOID } }, { "isnan", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID } }, - { "isnan", TYPE_BOOL, { TYPE_VEC2, TYPE_VOID } }, - { "isnan", TYPE_BOOL, { TYPE_VEC3, TYPE_VOID } }, - { "isnan", TYPE_BOOL, { TYPE_VEC4, TYPE_VOID } }, + { "isnan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID } }, + { "isnan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID } }, + { "isnan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID } }, { "isinf", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID } }, - { "isinf", TYPE_BOOL, { TYPE_VEC2, TYPE_VOID } }, - { "isinf", TYPE_BOOL, { TYPE_VEC3, TYPE_VOID } }, - { "isinf", TYPE_BOOL, { TYPE_VEC4, TYPE_VOID } }, + { "isinf", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID } }, + { "isinf", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID } }, + { "isinf", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID } }, { "floatBitsToInt", TYPE_INT, { TYPE_FLOAT, TYPE_VOID } }, { "floatBitsToInt", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID } }, diff --git a/thirdparty/README.md b/thirdparty/README.md index 25d6e3df9a..724c6978f0 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -15,6 +15,7 @@ Important: Some files have Godot-made changes. They are marked with `// -- GODOT start --` and `// -- GODOT end --` comments. + ## bullet - Upstream: https://github.com/bulletphysics/bullet3 @@ -76,6 +77,7 @@ Important: Some files have Godot-made changes. They are marked with `// -- GODOT start --` and `// -- GODOT end --` comments. + ## fonts ### Noto Sans @@ -175,6 +177,7 @@ Important: Some files have Godot-made changes. They are marked with `// -- GODOT start --` and `// -- GODOT end --` comments. + ## libtheora - Upstream: https://www.theora.org @@ -246,12 +249,13 @@ File extracted from upstream source: - Also copy `win32helpers/` from `win32port/` - `mbedtls_wrapper/include/platform/ssl_port.h` has a small change to check for OSX and FreeBSD (missing `malloc.h`). The bug is fixed in upstream master via `LWS_HAVE_MALLOC_H`, but not in the 2.4.1 branch (as the file structure has changed). -- You might need to apply the patch in `thirdparty/lws/mbedtls_verify.diff` (port of PR 1215) to future `2.4.x` releases if it does not get cherry picked. +- You might need to apply the patch in `thirdparty/libwebsockets/mbedtls_verify.diff` (port of PR 1215) to future `2.4.x` releases if it does not get cherry picked. Important: `lws_config.h` and `lws_config_private.h` contains custom Godot build configurations, check them out when updating. -## mbedTLS + +## mbedtls - Upstream: https://tls.mbed.org/ - Version: 2.8.0 @@ -264,6 +268,16 @@ File extracted from upstream release tarball `mbedtls-2.8.0-apache.tgz`: Be sure to check the Godot addition to only redfine it when undefined or `< 0x0501` (PRed upstream). - Applied the patch in `thirdparty/mbedtls/1453.diff` (PR 1453). Soon to be merged upstream. Check it out at next update. + +## miniupnpc + +- Upstream: https://github.com/miniupnp/miniupnp/tree/master/miniupnpc +- Version: 2.1 (git 25615e0, 2018-05-08) with modifications +- License: BSD-3-Clause + +The only modified file is miniupnpcstrings.h, which was created for Godot (is usually autogenerated by cmake). + + ## minizip - Upstream: http://www.zlib.net @@ -293,6 +307,10 @@ Collection of single-file libraries used in Godot components. * Upstream: http://episec.com/people/edelkind/c.html * Version: latest, as of April 2017 * License: Public Domain + - `clipper.{cpp,hpp}` + * Upstream: https://sourceforge.net/projects/polyclipping + * Version: 6.4.2 + * License: BSL-1.0 - `fastlz.{c,h}` * Upstream: https://github.com/ariya/FastLZ * Version: git (f121734, 2007) @@ -361,6 +379,7 @@ Files extracted from the upstream source: - All .h files in `src/` - LICENSE.txt + ## opus - Upstream: https://opus-codec.org diff --git a/thirdparty/lws/LICENSE.txt b/thirdparty/libwebsockets/LICENSE.txt index 34a42d5687..34a42d5687 100644 --- a/thirdparty/lws/LICENSE.txt +++ b/thirdparty/libwebsockets/LICENSE.txt diff --git a/thirdparty/lws/alloc.c b/thirdparty/libwebsockets/alloc.c index 898db12464..898db12464 100644 --- a/thirdparty/lws/alloc.c +++ b/thirdparty/libwebsockets/alloc.c diff --git a/thirdparty/lws/client/client-handshake.c b/thirdparty/libwebsockets/client/client-handshake.c index c2720d9283..c2720d9283 100644 --- a/thirdparty/lws/client/client-handshake.c +++ b/thirdparty/libwebsockets/client/client-handshake.c diff --git a/thirdparty/lws/client/client-parser.c b/thirdparty/libwebsockets/client/client-parser.c index 0e42dac362..0e42dac362 100644 --- a/thirdparty/lws/client/client-parser.c +++ b/thirdparty/libwebsockets/client/client-parser.c diff --git a/thirdparty/lws/client/client.c b/thirdparty/libwebsockets/client/client.c index ded4e4bf0b..ded4e4bf0b 100644 --- a/thirdparty/lws/client/client.c +++ b/thirdparty/libwebsockets/client/client.c diff --git a/thirdparty/lws/client/ssl-client.c b/thirdparty/libwebsockets/client/ssl-client.c index 962c6e3cb5..962c6e3cb5 100644 --- a/thirdparty/lws/client/ssl-client.c +++ b/thirdparty/libwebsockets/client/ssl-client.c diff --git a/thirdparty/lws/context.c b/thirdparty/libwebsockets/context.c index 9f221f50f1..9f221f50f1 100644 --- a/thirdparty/lws/context.c +++ b/thirdparty/libwebsockets/context.c diff --git a/thirdparty/lws/ext/extension-permessage-deflate.c b/thirdparty/libwebsockets/ext/extension-permessage-deflate.c index e2be2ae615..e2be2ae615 100644 --- a/thirdparty/lws/ext/extension-permessage-deflate.c +++ b/thirdparty/libwebsockets/ext/extension-permessage-deflate.c diff --git a/thirdparty/lws/ext/extension-permessage-deflate.h b/thirdparty/libwebsockets/ext/extension-permessage-deflate.h index 8737736897..8737736897 100644 --- a/thirdparty/lws/ext/extension-permessage-deflate.h +++ b/thirdparty/libwebsockets/ext/extension-permessage-deflate.h diff --git a/thirdparty/lws/ext/extension.c b/thirdparty/libwebsockets/ext/extension.c index ac28204034..ac28204034 100644 --- a/thirdparty/lws/ext/extension.c +++ b/thirdparty/libwebsockets/ext/extension.c diff --git a/thirdparty/lws/handshake.c b/thirdparty/libwebsockets/handshake.c index bc7609d920..bc7609d920 100644 --- a/thirdparty/lws/handshake.c +++ b/thirdparty/libwebsockets/handshake.c diff --git a/thirdparty/lws/header.c b/thirdparty/libwebsockets/header.c index e2562cd6ea..e2562cd6ea 100644 --- a/thirdparty/lws/header.c +++ b/thirdparty/libwebsockets/header.c diff --git a/thirdparty/lws/lextable-strings.h b/thirdparty/libwebsockets/lextable-strings.h index ab42c3e476..ab42c3e476 100644 --- a/thirdparty/lws/lextable-strings.h +++ b/thirdparty/libwebsockets/lextable-strings.h diff --git a/thirdparty/lws/lextable.h b/thirdparty/libwebsockets/lextable.h index f940afd25b..f940afd25b 100644 --- a/thirdparty/lws/lextable.h +++ b/thirdparty/libwebsockets/lextable.h diff --git a/thirdparty/lws/libwebsockets.c b/thirdparty/libwebsockets/libwebsockets.c index 8fe0854041..8fe0854041 100644 --- a/thirdparty/lws/libwebsockets.c +++ b/thirdparty/libwebsockets/libwebsockets.c diff --git a/thirdparty/lws/libwebsockets.h b/thirdparty/libwebsockets/libwebsockets.h index 460c732602..460c732602 100644 --- a/thirdparty/lws/libwebsockets.h +++ b/thirdparty/libwebsockets/libwebsockets.h diff --git a/thirdparty/lws/lws_config.h b/thirdparty/libwebsockets/lws_config.h index 6005d94ec6..6005d94ec6 100644 --- a/thirdparty/lws/lws_config.h +++ b/thirdparty/libwebsockets/lws_config.h diff --git a/thirdparty/lws/lws_config_private.h b/thirdparty/libwebsockets/lws_config_private.h index 475d1bd3f8..475d1bd3f8 100644 --- a/thirdparty/lws/lws_config_private.h +++ b/thirdparty/libwebsockets/lws_config_private.h diff --git a/thirdparty/lws/mbedtls_verify.diff b/thirdparty/libwebsockets/mbedtls_verify.diff index d320645d67..25c7f4bbdc 100644 --- a/thirdparty/lws/mbedtls_verify.diff +++ b/thirdparty/libwebsockets/mbedtls_verify.diff @@ -1,7 +1,7 @@ -diff --git a/thirdparty/lws/client/ssl-client.c b/thirdparty/lws/client/ssl-client.c +diff --git a/thirdparty/libwebsockets/client/ssl-client.c b/thirdparty/libwebsockets/client/ssl-client.c index 6626e0844..962c6e3cb 100644 ---- a/thirdparty/lws/client/ssl-client.c -+++ b/thirdparty/lws/client/ssl-client.c +--- a/thirdparty/libwebsockets/client/ssl-client.c ++++ b/thirdparty/libwebsockets/client/ssl-client.c @@ -176,11 +176,7 @@ lws_ssl_client_bio_create(struct lws *wsi) #endif #else @@ -15,10 +15,10 @@ index 6626e0844..962c6e3cb 100644 #else #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME SSL_set_tlsext_host_name(wsi->ssl, hostname); -diff --git a/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c b/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c +diff --git a/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c index 63504919c..4e3d61109 100644 ---- a/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c -+++ b/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c +--- a/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c ++++ b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c @@ -218,7 +218,7 @@ static int ssl_pm_reload_crt(SSL *ssl) struct x509_pm *crt_pm = (struct x509_pm *)ssl->cert->x509->x509_pm; diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl3.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl3.h index 007b392f3e..007b392f3e 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl3.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl3.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_cert.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_cert.h index 86cf31ad51..86cf31ad51 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_cert.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_cert.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_code.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_code.h index 80fdbb20f3..80fdbb20f3 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_code.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_code.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_dbg.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_dbg.h index ad32cb92ff..ad32cb92ff 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_dbg.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_dbg.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_lib.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_lib.h index 42b2de7501..42b2de7501 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_lib.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_lib.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_methods.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_methods.h index cd2f8c0533..cd2f8c0533 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_methods.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_methods.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_pkey.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_pkey.h index e790fcc995..e790fcc995 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_pkey.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_pkey.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_stack.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_stack.h index 7a7051a026..7a7051a026 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_stack.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_stack.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_types.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_types.h index 2ca438c422..2ca438c422 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_types.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_types.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_x509.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_x509.h index 7594d064b4..7594d064b4 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/ssl_x509.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/ssl_x509.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/tls1.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/tls1.h index 7af1b0157d..7af1b0157d 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/tls1.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/tls1.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/internal/x509_vfy.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/x509_vfy.h index 26bf6c88a8..26bf6c88a8 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/internal/x509_vfy.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/internal/x509_vfy.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/openssl/ssl.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/openssl/ssl.h index 5a84b4552e..5a84b4552e 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/openssl/ssl.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/openssl/ssl.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/platform/ssl_pm.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/platform/ssl_pm.h index cbbe3aa3a2..cbbe3aa3a2 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/platform/ssl_pm.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/platform/ssl_pm.h diff --git a/thirdparty/lws/mbedtls_wrapper/include/platform/ssl_port.h b/thirdparty/libwebsockets/mbedtls_wrapper/include/platform/ssl_port.h index eca68f20d1..eca68f20d1 100644 --- a/thirdparty/lws/mbedtls_wrapper/include/platform/ssl_port.h +++ b/thirdparty/libwebsockets/mbedtls_wrapper/include/platform/ssl_port.h diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_cert.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_cert.c index 5c608125ac..5c608125ac 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_cert.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_cert.c diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_lib.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_lib.c index d8fdd06fad..d8fdd06fad 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_lib.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_lib.c diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_methods.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_methods.c index 0002360846..0002360846 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_methods.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_methods.c diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_pkey.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_pkey.c index 567a33e2c2..567a33e2c2 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_pkey.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_pkey.c diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_stack.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_stack.c index da836daf9c..da836daf9c 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_stack.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_stack.c diff --git a/thirdparty/lws/mbedtls_wrapper/library/ssl_x509.c b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_x509.c index 4441490a03..4441490a03 100644 --- a/thirdparty/lws/mbedtls_wrapper/library/ssl_x509.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/library/ssl_x509.c diff --git a/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c index 4e3d611095..4e3d611095 100644 --- a/thirdparty/lws/mbedtls_wrapper/platform/ssl_pm.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_pm.c diff --git a/thirdparty/lws/mbedtls_wrapper/platform/ssl_port.c b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_port.c index 8c7a31338b..8c7a31338b 100644 --- a/thirdparty/lws/mbedtls_wrapper/platform/ssl_port.c +++ b/thirdparty/libwebsockets/mbedtls_wrapper/platform/ssl_port.c diff --git a/thirdparty/lws/misc/base64-decode.c b/thirdparty/libwebsockets/misc/base64-decode.c index c8f11d21b8..c8f11d21b8 100644 --- a/thirdparty/lws/misc/base64-decode.c +++ b/thirdparty/libwebsockets/misc/base64-decode.c diff --git a/thirdparty/lws/misc/getifaddrs.c b/thirdparty/libwebsockets/misc/getifaddrs.c index 4f42ab4595..4f42ab4595 100644 --- a/thirdparty/lws/misc/getifaddrs.c +++ b/thirdparty/libwebsockets/misc/getifaddrs.c diff --git a/thirdparty/lws/misc/getifaddrs.h b/thirdparty/libwebsockets/misc/getifaddrs.h index d26670c082..d26670c082 100644 --- a/thirdparty/lws/misc/getifaddrs.h +++ b/thirdparty/libwebsockets/misc/getifaddrs.h diff --git a/thirdparty/lws/misc/lejp.c b/thirdparty/libwebsockets/misc/lejp.c index 38efa8b122..38efa8b122 100644 --- a/thirdparty/lws/misc/lejp.c +++ b/thirdparty/libwebsockets/misc/lejp.c diff --git a/thirdparty/lws/misc/lejp.h b/thirdparty/libwebsockets/misc/lejp.h index 0b37bb3e42..0b37bb3e42 100644 --- a/thirdparty/lws/misc/lejp.h +++ b/thirdparty/libwebsockets/misc/lejp.h diff --git a/thirdparty/lws/misc/sha-1.c b/thirdparty/libwebsockets/misc/sha-1.c index 50205a0100..50205a0100 100644 --- a/thirdparty/lws/misc/sha-1.c +++ b/thirdparty/libwebsockets/misc/sha-1.c diff --git a/thirdparty/lws/output.c b/thirdparty/libwebsockets/output.c index 375ff3ef99..375ff3ef99 100644 --- a/thirdparty/lws/output.c +++ b/thirdparty/libwebsockets/output.c diff --git a/thirdparty/lws/plat/lws-plat-unix.c b/thirdparty/libwebsockets/plat/lws-plat-unix.c index a51e67bb81..a51e67bb81 100644 --- a/thirdparty/lws/plat/lws-plat-unix.c +++ b/thirdparty/libwebsockets/plat/lws-plat-unix.c diff --git a/thirdparty/lws/plat/lws-plat-win.c b/thirdparty/libwebsockets/plat/lws-plat-win.c index f5b178ce85..f5b178ce85 100644 --- a/thirdparty/lws/plat/lws-plat-win.c +++ b/thirdparty/libwebsockets/plat/lws-plat-win.c diff --git a/thirdparty/lws/pollfd.c b/thirdparty/libwebsockets/pollfd.c index 54a4a86057..54a4a86057 100644 --- a/thirdparty/lws/pollfd.c +++ b/thirdparty/libwebsockets/pollfd.c diff --git a/thirdparty/lws/private-libwebsockets.h b/thirdparty/libwebsockets/private-libwebsockets.h index 535fa0be57..535fa0be57 100644 --- a/thirdparty/lws/private-libwebsockets.h +++ b/thirdparty/libwebsockets/private-libwebsockets.h diff --git a/thirdparty/lws/server/fops-zip.c b/thirdparty/libwebsockets/server/fops-zip.c index 2b254f67af..2b254f67af 100644 --- a/thirdparty/lws/server/fops-zip.c +++ b/thirdparty/libwebsockets/server/fops-zip.c diff --git a/thirdparty/lws/server/lejp-conf.c b/thirdparty/libwebsockets/server/lejp-conf.c index c2b684c278..c2b684c278 100644 --- a/thirdparty/lws/server/lejp-conf.c +++ b/thirdparty/libwebsockets/server/lejp-conf.c diff --git a/thirdparty/lws/server/parsers.c b/thirdparty/libwebsockets/server/parsers.c index fb345ab04c..fb345ab04c 100644 --- a/thirdparty/lws/server/parsers.c +++ b/thirdparty/libwebsockets/server/parsers.c diff --git a/thirdparty/lws/server/ranges.c b/thirdparty/libwebsockets/server/ranges.c index bc1578d733..bc1578d733 100644 --- a/thirdparty/lws/server/ranges.c +++ b/thirdparty/libwebsockets/server/ranges.c diff --git a/thirdparty/lws/server/server-handshake.c b/thirdparty/libwebsockets/server/server-handshake.c index 3d319c35d6..3d319c35d6 100644 --- a/thirdparty/lws/server/server-handshake.c +++ b/thirdparty/libwebsockets/server/server-handshake.c diff --git a/thirdparty/lws/server/server.c b/thirdparty/libwebsockets/server/server.c index db05954257..db05954257 100644 --- a/thirdparty/lws/server/server.c +++ b/thirdparty/libwebsockets/server/server.c diff --git a/thirdparty/lws/server/ssl-server.c b/thirdparty/libwebsockets/server/ssl-server.c index c4362824bf..c4362824bf 100644 --- a/thirdparty/lws/server/ssl-server.c +++ b/thirdparty/libwebsockets/server/ssl-server.c diff --git a/thirdparty/lws/service.c b/thirdparty/libwebsockets/service.c index 8cf455e2c9..8cf455e2c9 100644 --- a/thirdparty/lws/service.c +++ b/thirdparty/libwebsockets/service.c diff --git a/thirdparty/lws/ssl.c b/thirdparty/libwebsockets/ssl.c index 4ff3088ab3..4ff3088ab3 100644 --- a/thirdparty/lws/ssl.c +++ b/thirdparty/libwebsockets/ssl.c diff --git a/thirdparty/lws/win32helpers/getopt.c b/thirdparty/libwebsockets/win32helpers/getopt.c index 3bb21f6f28..3bb21f6f28 100644 --- a/thirdparty/lws/win32helpers/getopt.c +++ b/thirdparty/libwebsockets/win32helpers/getopt.c diff --git a/thirdparty/lws/win32helpers/getopt.h b/thirdparty/libwebsockets/win32helpers/getopt.h index 7137f0379c..7137f0379c 100644 --- a/thirdparty/lws/win32helpers/getopt.h +++ b/thirdparty/libwebsockets/win32helpers/getopt.h diff --git a/thirdparty/lws/win32helpers/getopt_long.c b/thirdparty/libwebsockets/win32helpers/getopt_long.c index 5bcf40060f..5bcf40060f 100644 --- a/thirdparty/lws/win32helpers/getopt_long.c +++ b/thirdparty/libwebsockets/win32helpers/getopt_long.c diff --git a/thirdparty/lws/win32helpers/gettimeofday.c b/thirdparty/libwebsockets/win32helpers/gettimeofday.c index 35dd73531d..35dd73531d 100644 --- a/thirdparty/lws/win32helpers/gettimeofday.c +++ b/thirdparty/libwebsockets/win32helpers/gettimeofday.c diff --git a/thirdparty/lws/win32helpers/gettimeofday.h b/thirdparty/libwebsockets/win32helpers/gettimeofday.h index 33e7a750fe..33e7a750fe 100644 --- a/thirdparty/lws/win32helpers/gettimeofday.h +++ b/thirdparty/libwebsockets/win32helpers/gettimeofday.h diff --git a/thirdparty/mbedtls/LICENSE b/thirdparty/mbedtls/LICENSE new file mode 100644 index 0000000000..546a8e631f --- /dev/null +++ b/thirdparty/mbedtls/LICENSE @@ -0,0 +1,2 @@ +Unless specifically indicated otherwise in a file, files are licensed +under the Apache 2.0 license, as can be found in: apache-2.0.txt diff --git a/thirdparty/mbedtls/apache-2.0.txt b/thirdparty/mbedtls/apache-2.0.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/thirdparty/mbedtls/apache-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/thirdparty/miniupnpc/LICENSE b/thirdparty/miniupnpc/LICENSE new file mode 100644 index 0000000000..0816733704 --- /dev/null +++ b/thirdparty/miniupnpc/LICENSE @@ -0,0 +1,27 @@ +MiniUPnPc +Copyright (c) 2005-2016, Thomas BERNARD +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/thirdparty/miniupnpc/codelength.h b/thirdparty/miniupnpc/codelength.h new file mode 100644 index 0000000000..ea0b005ffe --- /dev/null +++ b/thirdparty/miniupnpc/codelength.h @@ -0,0 +1,54 @@ +/* $Id: codelength.h,v 1.3 2011/07/30 13:10:05 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas BERNARD + * copyright (c) 2005-2015 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENCE file. */ +#ifndef CODELENGTH_H_INCLUDED +#define CODELENGTH_H_INCLUDED + +/* Encode length by using 7bit per Byte : + * Most significant bit of each byte specifies that the + * following byte is part of the code */ + +/* n : unsigned + * p : unsigned char * + */ +#define DECODELENGTH(n, p) n = 0; \ + do { n = (n << 7) | (*p & 0x7f); } \ + while((*(p++)&0x80) && (n<(1<<25))); + +/* n : unsigned + * READ : function/macro to read one byte (unsigned char) + */ +#define DECODELENGTH_READ(n, READ) \ + n = 0; \ + do { \ + unsigned char c; \ + READ(c); \ + n = (n << 7) | (c & 0x07f); \ + if(!(c&0x80)) break; \ + } while(n<(1<<25)); + +/* n : unsigned + * p : unsigned char * + * p_limit : unsigned char * + */ +#define DECODELENGTH_CHECKLIMIT(n, p, p_limit) \ + n = 0; \ + do { \ + if((p) >= (p_limit)) break; \ + n = (n << 7) | (*(p) & 0x7f); \ + } while((*((p)++)&0x80) && (n<(1<<25))); + + +/* n : unsigned + * p : unsigned char * + */ +#define CODELENGTH(n, p) if(n>=268435456) *(p++) = (n >> 28) | 0x80; \ + if(n>=2097152) *(p++) = (n >> 21) | 0x80; \ + if(n>=16384) *(p++) = (n >> 14) | 0x80; \ + if(n>=128) *(p++) = (n >> 7) | 0x80; \ + *(p++) = n & 0x7f; + +#endif /* CODELENGTH_H_INCLUDED */ diff --git a/thirdparty/miniupnpc/connecthostport.c b/thirdparty/miniupnpc/connecthostport.c new file mode 100644 index 0000000000..ea6e4e5943 --- /dev/null +++ b/thirdparty/miniupnpc/connecthostport.c @@ -0,0 +1,264 @@ +/* $Id: connecthostport.c,v 1.15 2015/10/09 16:26:19 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2010-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +/* use getaddrinfo() or gethostbyname() + * uncomment the following line in order to use gethostbyname() */ +#ifdef NO_GETADDRINFO +#define USE_GETHOSTBYNAME +#endif + +#include <string.h> +#include <stdio.h> +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#include <io.h> +#define MAXHOSTNAMELEN 64 +#define snprintf _snprintf +#define herror +#define socklen_t int +#else /* #ifdef _WIN32 */ +#include <unistd.h> +#include <sys/types.h> +#ifdef MINIUPNPC_SET_SOCKET_TIMEOUT +#include <sys/time.h> +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ +#include <sys/param.h> +#include <sys/select.h> +#include <errno.h> +#define closesocket close +#include <netdb.h> +#include <netinet/in.h> +/* defining MINIUPNPC_IGNORE_EINTR enable the ignore of interruptions + * during the connect() call */ +#define MINIUPNPC_IGNORE_EINTR +#include <sys/socket.h> +#include <sys/select.h> +#endif /* #else _WIN32 */ + +/* definition of PRINT_SOCKET_ERROR */ +#ifdef _WIN32 +#define PRINT_SOCKET_ERROR(x) fprintf(stderr, "Socket error: %s, %d\n", x, WSAGetLastError()); +#else +#define PRINT_SOCKET_ERROR(x) perror(x) +#endif + +#if defined(__amigaos__) || defined(__amigaos4__) +#define herror(A) printf("%s\n", A) +#endif + +#include "connecthostport.h" + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 64 +#endif + +/* connecthostport() + * return a socket connected (TCP) to the host and port + * or -1 in case of error */ +SOCKET connecthostport(const char * host, unsigned short port, + unsigned int scope_id) +{ + SOCKET s; + int n; +#ifdef USE_GETHOSTBYNAME + struct sockaddr_in dest; + struct hostent *hp; +#else /* #ifdef USE_GETHOSTBYNAME */ + char tmp_host[MAXHOSTNAMELEN+1]; + char port_str[8]; + struct addrinfo *ai, *p; + struct addrinfo hints; +#endif /* #ifdef USE_GETHOSTBYNAME */ +#ifdef MINIUPNPC_SET_SOCKET_TIMEOUT + struct timeval timeout; +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ + +#ifdef USE_GETHOSTBYNAME + hp = gethostbyname(host); + if(hp == NULL) + { + herror(host); + return INVALID_SOCKET; + } + memcpy(&dest.sin_addr, hp->h_addr, sizeof(dest.sin_addr)); + memset(dest.sin_zero, 0, sizeof(dest.sin_zero)); + s = socket(PF_INET, SOCK_STREAM, 0); + if(ISINVALID(s)) + { + PRINT_SOCKET_ERROR("socket"); + return INVALID_SOCKET; + } +#ifdef MINIUPNPC_SET_SOCKET_TIMEOUT + /* setting a 3 seconds timeout for the connect() call */ + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt SO_RCVTIMEO"); + } + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt SO_SNDTIMEO"); + } +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ + dest.sin_family = AF_INET; + dest.sin_port = htons(port); + n = connect(s, (struct sockaddr *)&dest, sizeof(struct sockaddr_in)); +#ifdef MINIUPNPC_IGNORE_EINTR + /* EINTR The system call was interrupted by a signal that was caught + * EINPROGRESS The socket is nonblocking and the connection cannot + * be completed immediately. */ + while(n < 0 && (errno == EINTR || errno == EINPROGRESS)) + { + socklen_t len; + fd_set wset; + int err; + FD_ZERO(&wset); + FD_SET(s, &wset); + if((n = select(s + 1, NULL, &wset, NULL, NULL)) == -1 && errno == EINTR) + continue; + /*len = 0;*/ + /*n = getpeername(s, NULL, &len);*/ + len = sizeof(err); + if(getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len) < 0) { + PRINT_SOCKET_ERROR("getsockopt"); + closesocket(s); + return INVALID_SOCKET; + } + if(err != 0) { + errno = err; + n = -1; + } + } +#endif /* #ifdef MINIUPNPC_IGNORE_EINTR */ + if(n<0) + { + PRINT_SOCKET_ERROR("connect"); + closesocket(s); + return INVALID_SOCKET; + } +#else /* #ifdef USE_GETHOSTBYNAME */ + /* use getaddrinfo() instead of gethostbyname() */ + memset(&hints, 0, sizeof(hints)); + /* hints.ai_flags = AI_ADDRCONFIG; */ +#ifdef AI_NUMERICSERV + hints.ai_flags = AI_NUMERICSERV; +#endif + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = AF_UNSPEC; /* AF_INET, AF_INET6 or AF_UNSPEC */ + /* hints.ai_protocol = IPPROTO_TCP; */ + snprintf(port_str, sizeof(port_str), "%hu", port); + if(host[0] == '[') + { + /* literal ip v6 address */ + int i, j; + for(i = 0, j = 1; host[j] && (host[j] != ']') && i < MAXHOSTNAMELEN; i++, j++) + { + tmp_host[i] = host[j]; + if(0 == memcmp(host+j, "%25", 3)) /* %25 is just url encoding for '%' */ + j+=2; /* skip "25" */ + } + tmp_host[i] = '\0'; + } + else + { + strncpy(tmp_host, host, MAXHOSTNAMELEN); + } + tmp_host[MAXHOSTNAMELEN] = '\0'; + n = getaddrinfo(tmp_host, port_str, &hints, &ai); + if(n != 0) + { +#ifdef _WIN32 + fprintf(stderr, "getaddrinfo() error : %d\n", n); +#else + fprintf(stderr, "getaddrinfo() error : %s\n", gai_strerror(n)); +#endif + return INVALID_SOCKET; + } + s = -1; + for(p = ai; p; p = p->ai_next) + { + s = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + if(ISINVALID(s)) + continue; + if(p->ai_addr->sa_family == AF_INET6 && scope_id > 0) { + struct sockaddr_in6 * addr6 = (struct sockaddr_in6 *)p->ai_addr; + addr6->sin6_scope_id = scope_id; + } +#ifdef MINIUPNPC_SET_SOCKET_TIMEOUT + /* setting a 3 seconds timeout for the connect() call */ + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt"); + } + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt"); + } +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ + n = connect(s, p->ai_addr, p->ai_addrlen); +#ifdef MINIUPNPC_IGNORE_EINTR + /* EINTR The system call was interrupted by a signal that was caught + * EINPROGRESS The socket is nonblocking and the connection cannot + * be completed immediately. */ + while(n < 0 && (errno == EINTR || errno == EINPROGRESS)) + { + socklen_t len; + fd_set wset; + int err; + FD_ZERO(&wset); + FD_SET(s, &wset); + if((n = select(s + 1, NULL, &wset, NULL, NULL)) == -1 && errno == EINTR) + continue; + /*len = 0;*/ + /*n = getpeername(s, NULL, &len);*/ + len = sizeof(err); + if(getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len) < 0) { + PRINT_SOCKET_ERROR("getsockopt"); + closesocket(s); + freeaddrinfo(ai); + return INVALID_SOCKET; + } + if(err != 0) { + errno = err; + n = -1; + } + } +#endif /* #ifdef MINIUPNPC_IGNORE_EINTR */ + if(n < 0) + { + closesocket(s); + continue; + } + else + { + break; + } + } + freeaddrinfo(ai); + if(ISINVALID(s)) + { + PRINT_SOCKET_ERROR("socket"); + return INVALID_SOCKET; + } + if(n < 0) + { + PRINT_SOCKET_ERROR("connect"); + return INVALID_SOCKET; + } +#endif /* #ifdef USE_GETHOSTBYNAME */ + return s; +} + diff --git a/thirdparty/miniupnpc/connecthostport.h b/thirdparty/miniupnpc/connecthostport.h new file mode 100644 index 0000000000..701816b5b6 --- /dev/null +++ b/thirdparty/miniupnpc/connecthostport.h @@ -0,0 +1,20 @@ +/* $Id: connecthostport.h,v 1.2 2012/06/23 22:32:33 nanard Exp $ */ +/* Project: miniupnp + * http://miniupnp.free.fr/ + * Author: Thomas Bernard + * Copyright (c) 2010-2018 Thomas Bernard + * This software is subjects to the conditions detailed + * in the LICENCE file provided within this distribution */ +#ifndef CONNECTHOSTPORT_H_INCLUDED +#define CONNECTHOSTPORT_H_INCLUDED + +#include "miniupnpc_socketdef.h" + +/* connecthostport() + * return a socket connected (TCP) to the host and port + * or INVALID_SOCKET in case of error */ +SOCKET connecthostport(const char * host, unsigned short port, + unsigned int scope_id); + +#endif + diff --git a/thirdparty/miniupnpc/igd_desc_parse.c b/thirdparty/miniupnpc/igd_desc_parse.c new file mode 100644 index 0000000000..d2999ad011 --- /dev/null +++ b/thirdparty/miniupnpc/igd_desc_parse.c @@ -0,0 +1,123 @@ +/* $Id: igd_desc_parse.c,v 1.17 2015/09/15 13:30:04 nanard Exp $ */ +/* Project : miniupnp + * http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005-2015 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +#include "igd_desc_parse.h" +#include <stdio.h> +#include <string.h> + +/* Start element handler : + * update nesting level counter and copy element name */ +void IGDstartelt(void * d, const char * name, int l) +{ + struct IGDdatas * datas = (struct IGDdatas *)d; + if(l >= MINIUPNPC_URL_MAXSIZE) + l = MINIUPNPC_URL_MAXSIZE-1; + memcpy(datas->cureltname, name, l); + datas->cureltname[l] = '\0'; + datas->level++; + if( (l==7) && !memcmp(name, "service", l) ) { + datas->tmp.controlurl[0] = '\0'; + datas->tmp.eventsuburl[0] = '\0'; + datas->tmp.scpdurl[0] = '\0'; + datas->tmp.servicetype[0] = '\0'; + } +} + +#define COMPARE(str, cstr) (0==memcmp(str, cstr, sizeof(cstr) - 1)) + +/* End element handler : + * update nesting level counter and update parser state if + * service element is parsed */ +void IGDendelt(void * d, const char * name, int l) +{ + struct IGDdatas * datas = (struct IGDdatas *)d; + datas->level--; + /*printf("endelt %2d %.*s\n", datas->level, l, name);*/ + if( (l==7) && !memcmp(name, "service", l) ) + { + if(COMPARE(datas->tmp.servicetype, + "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:")) { + memcpy(&datas->CIF, &datas->tmp, sizeof(struct IGDdatas_service)); + } else if(COMPARE(datas->tmp.servicetype, + "urn:schemas-upnp-org:service:WANIPv6FirewallControl:")) { + memcpy(&datas->IPv6FC, &datas->tmp, sizeof(struct IGDdatas_service)); + } else if(COMPARE(datas->tmp.servicetype, + "urn:schemas-upnp-org:service:WANIPConnection:") + || COMPARE(datas->tmp.servicetype, + "urn:schemas-upnp-org:service:WANPPPConnection:") ) { + if(datas->first.servicetype[0] == '\0') { + memcpy(&datas->first, &datas->tmp, sizeof(struct IGDdatas_service)); + } else { + memcpy(&datas->second, &datas->tmp, sizeof(struct IGDdatas_service)); + } + } + } +} + +/* Data handler : + * copy data depending on the current element name and state */ +void IGDdata(void * d, const char * data, int l) +{ + struct IGDdatas * datas = (struct IGDdatas *)d; + char * dstmember = 0; + /*printf("%2d %s : %.*s\n", + datas->level, datas->cureltname, l, data); */ + if( !strcmp(datas->cureltname, "URLBase") ) + dstmember = datas->urlbase; + else if( !strcmp(datas->cureltname, "presentationURL") ) + dstmember = datas->presentationurl; + else if( !strcmp(datas->cureltname, "serviceType") ) + dstmember = datas->tmp.servicetype; + else if( !strcmp(datas->cureltname, "controlURL") ) + dstmember = datas->tmp.controlurl; + else if( !strcmp(datas->cureltname, "eventSubURL") ) + dstmember = datas->tmp.eventsuburl; + else if( !strcmp(datas->cureltname, "SCPDURL") ) + dstmember = datas->tmp.scpdurl; +/* else if( !strcmp(datas->cureltname, "deviceType") ) + dstmember = datas->devicetype_tmp;*/ + if(dstmember) + { + if(l>=MINIUPNPC_URL_MAXSIZE) + l = MINIUPNPC_URL_MAXSIZE-1; + memcpy(dstmember, data, l); + dstmember[l] = '\0'; + } +} + +#ifdef DEBUG +void printIGD(struct IGDdatas * d) +{ + printf("urlbase = '%s'\n", d->urlbase); + printf("WAN Device (Common interface config) :\n"); + /*printf(" deviceType = '%s'\n", d->CIF.devicetype);*/ + printf(" serviceType = '%s'\n", d->CIF.servicetype); + printf(" controlURL = '%s'\n", d->CIF.controlurl); + printf(" eventSubURL = '%s'\n", d->CIF.eventsuburl); + printf(" SCPDURL = '%s'\n", d->CIF.scpdurl); + printf("primary WAN Connection Device (IP or PPP Connection):\n"); + /*printf(" deviceType = '%s'\n", d->first.devicetype);*/ + printf(" servicetype = '%s'\n", d->first.servicetype); + printf(" controlURL = '%s'\n", d->first.controlurl); + printf(" eventSubURL = '%s'\n", d->first.eventsuburl); + printf(" SCPDURL = '%s'\n", d->first.scpdurl); + printf("secondary WAN Connection Device (IP or PPP Connection):\n"); + /*printf(" deviceType = '%s'\n", d->second.devicetype);*/ + printf(" servicetype = '%s'\n", d->second.servicetype); + printf(" controlURL = '%s'\n", d->second.controlurl); + printf(" eventSubURL = '%s'\n", d->second.eventsuburl); + printf(" SCPDURL = '%s'\n", d->second.scpdurl); + printf("WAN IPv6 Firewall Control :\n"); + /*printf(" deviceType = '%s'\n", d->IPv6FC.devicetype);*/ + printf(" servicetype = '%s'\n", d->IPv6FC.servicetype); + printf(" controlURL = '%s'\n", d->IPv6FC.controlurl); + printf(" eventSubURL = '%s'\n", d->IPv6FC.eventsuburl); + printf(" SCPDURL = '%s'\n", d->IPv6FC.scpdurl); +} +#endif /* DEBUG */ + diff --git a/thirdparty/miniupnpc/igd_desc_parse.h b/thirdparty/miniupnpc/igd_desc_parse.h new file mode 100644 index 0000000000..0de546b697 --- /dev/null +++ b/thirdparty/miniupnpc/igd_desc_parse.h @@ -0,0 +1,49 @@ +/* $Id: igd_desc_parse.h,v 1.12 2014/11/17 17:19:13 nanard Exp $ */ +/* Project : miniupnp + * http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005-2014 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#ifndef IGD_DESC_PARSE_H_INCLUDED +#define IGD_DESC_PARSE_H_INCLUDED + +/* Structure to store the result of the parsing of UPnP + * descriptions of Internet Gateway Devices */ +#define MINIUPNPC_URL_MAXSIZE (128) +struct IGDdatas_service { + char controlurl[MINIUPNPC_URL_MAXSIZE]; + char eventsuburl[MINIUPNPC_URL_MAXSIZE]; + char scpdurl[MINIUPNPC_URL_MAXSIZE]; + char servicetype[MINIUPNPC_URL_MAXSIZE]; + /*char devicetype[MINIUPNPC_URL_MAXSIZE];*/ +}; + +struct IGDdatas { + char cureltname[MINIUPNPC_URL_MAXSIZE]; + char urlbase[MINIUPNPC_URL_MAXSIZE]; + char presentationurl[MINIUPNPC_URL_MAXSIZE]; + int level; + /*int state;*/ + /* "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" */ + struct IGDdatas_service CIF; + /* "urn:schemas-upnp-org:service:WANIPConnection:1" + * "urn:schemas-upnp-org:service:WANPPPConnection:1" */ + struct IGDdatas_service first; + /* if both WANIPConnection and WANPPPConnection are present */ + struct IGDdatas_service second; + /* "urn:schemas-upnp-org:service:WANIPv6FirewallControl:1" */ + struct IGDdatas_service IPv6FC; + /* tmp */ + struct IGDdatas_service tmp; +}; + +void IGDstartelt(void *, const char *, int); +void IGDendelt(void *, const char *, int); +void IGDdata(void *, const char *, int); +#ifdef DEBUG +void printIGD(struct IGDdatas *); +#endif /* DEBUG */ + +#endif /* IGD_DESC_PARSE_H_INCLUDED */ diff --git a/thirdparty/miniupnpc/listdevices.c b/thirdparty/miniupnpc/listdevices.c new file mode 100644 index 0000000000..bd9ba57efc --- /dev/null +++ b/thirdparty/miniupnpc/listdevices.c @@ -0,0 +1,197 @@ +/* $Id: listdevices.c,v 1.6 2015/07/23 20:40:08 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2013-2015 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#ifdef _WIN32 +#include <winsock2.h> +#endif /* _WIN32 */ +#include "miniupnpc.h" + +struct upnp_dev_list { + struct upnp_dev_list * next; + char * descURL; + struct UPNPDev * * array; + size_t count; + size_t allocated_count; +}; + +#define ADD_DEVICE_COUNT_STEP 16 + +void add_device(struct upnp_dev_list * * list_head, struct UPNPDev * dev) +{ + struct upnp_dev_list * elt; + size_t i; + + if(dev == NULL) + return; + for(elt = *list_head; elt != NULL; elt = elt->next) { + if(strcmp(elt->descURL, dev->descURL) == 0) { + for(i = 0; i < elt->count; i++) { + if (strcmp(elt->array[i]->st, dev->st) == 0 && strcmp(elt->array[i]->usn, dev->usn) == 0) { + return; /* already found */ + } + } + if(elt->count >= elt->allocated_count) { + struct UPNPDev * * tmp; + elt->allocated_count += ADD_DEVICE_COUNT_STEP; + tmp = realloc(elt->array, elt->allocated_count * sizeof(struct UPNPDev *)); + if(tmp == NULL) { + fprintf(stderr, "Failed to realloc(%p, %lu)\n", elt->array, (unsigned long)(elt->allocated_count * sizeof(struct UPNPDev *))); + return; + } + elt->array = tmp; + } + elt->array[elt->count++] = dev; + return; + } + } + elt = malloc(sizeof(struct upnp_dev_list)); + if(elt == NULL) { + fprintf(stderr, "Failed to malloc(%lu)\n", (unsigned long)sizeof(struct upnp_dev_list)); + return; + } + elt->next = *list_head; + elt->descURL = strdup(dev->descURL); + if(elt->descURL == NULL) { + fprintf(stderr, "Failed to strdup(%s)\n", dev->descURL); + free(elt); + return; + } + elt->allocated_count = ADD_DEVICE_COUNT_STEP; + elt->array = malloc(ADD_DEVICE_COUNT_STEP * sizeof(struct UPNPDev *)); + if(elt->array == NULL) { + fprintf(stderr, "Failed to malloc(%lu)\n", (unsigned long)(ADD_DEVICE_COUNT_STEP * sizeof(struct UPNPDev *))); + free(elt->descURL); + free(elt); + return; + } + elt->array[0] = dev; + elt->count = 1; + *list_head = elt; +} + +void free_device(struct upnp_dev_list * elt) +{ + free(elt->descURL); + free(elt->array); + free(elt); +} + +int main(int argc, char * * argv) +{ + const char * searched_device = NULL; + const char * * searched_devices = NULL; + const char * multicastif = 0; + const char * minissdpdpath = 0; + int ipv6 = 0; + unsigned char ttl = 2; + int error = 0; + struct UPNPDev * devlist = 0; + struct UPNPDev * dev; + struct upnp_dev_list * sorted_list = NULL; + struct upnp_dev_list * dev_array; + int i; + +#ifdef _WIN32 + WSADATA wsaData; + int nResult = WSAStartup(MAKEWORD(2,2), &wsaData); + if(nResult != NO_ERROR) + { + fprintf(stderr, "WSAStartup() failed.\n"); + return -1; + } +#endif + + for(i = 1; i < argc; i++) { + if(strcmp(argv[i], "-6") == 0) + ipv6 = 1; + else if(strcmp(argv[i], "-d") == 0) { + if(++i >= argc) { + fprintf(stderr, "%s option needs one argument\n", "-d"); + return 1; + } + searched_device = argv[i]; + } else if(strcmp(argv[i], "-t") == 0) { + if(++i >= argc) { + fprintf(stderr, "%s option needs one argument\n", "-t"); + return 1; + } + ttl = (unsigned char)atoi(argv[i]); + } else if(strcmp(argv[i], "-l") == 0) { + if(++i >= argc) { + fprintf(stderr, "-l option needs at least one argument\n"); + return 1; + } + searched_devices = (const char * *)(argv + i); + break; + } else if(strcmp(argv[i], "-m") == 0) { + if(++i >= argc) { + fprintf(stderr, "-m option needs one argument\n"); + return 1; + } + multicastif = argv[i]; + } else { + printf("usage : %s [options] [-l <device1> <device2> ...]\n", argv[0]); + printf("options :\n"); + printf(" -6 : use IPv6\n"); + printf(" -m address/ifname : network interface to use for multicast\n"); + printf(" -d <device string> : search only for this type of device\n"); + printf(" -l <device1> <device2> ... : search only for theses types of device\n"); + printf(" -t ttl : set multicast TTL. Default value is 2.\n"); + printf(" -h : this help\n"); + return 1; + } + } + + if(searched_device) { + printf("searching UPnP device type %s\n", searched_device); + devlist = upnpDiscoverDevice(searched_device, + 2000, multicastif, minissdpdpath, + 0/*localport*/, ipv6, ttl, &error); + } else if(searched_devices) { + printf("searching UPnP device types :\n"); + for(i = 0; searched_devices[i]; i++) + printf("\t%s\n", searched_devices[i]); + devlist = upnpDiscoverDevices(searched_devices, + 2000, multicastif, minissdpdpath, + 0/*localport*/, ipv6, ttl, &error, 1); + } else { + printf("searching all UPnP devices\n"); + devlist = upnpDiscoverAll(2000, multicastif, minissdpdpath, + 0/*localport*/, ipv6, ttl, &error); + } + if(devlist) { + for(dev = devlist, i = 1; dev != NULL; dev = dev->pNext, i++) { + printf("%3d: %-48s\n", i, dev->st); + printf(" %s\n", dev->descURL); + printf(" %s\n", dev->usn); + add_device(&sorted_list, dev); + } + putchar('\n'); + for (dev_array = sorted_list; dev_array != NULL ; dev_array = dev_array->next) { + printf("%s :\n", dev_array->descURL); + for(i = 0; (unsigned)i < dev_array->count; i++) { + printf("%2d: %s\n", i+1, dev_array->array[i]->st); + printf(" %s\n", dev_array->array[i]->usn); + } + putchar('\n'); + } + freeUPNPDevlist(devlist); + while(sorted_list != NULL) { + dev_array = sorted_list; + sorted_list = sorted_list->next; + free_device(dev_array); + } + } else { + printf("no device found.\n"); + } + + return 0; +} + diff --git a/thirdparty/miniupnpc/minisoap.c b/thirdparty/miniupnpc/minisoap.c new file mode 100644 index 0000000000..520c9302e8 --- /dev/null +++ b/thirdparty/miniupnpc/minisoap.c @@ -0,0 +1,124 @@ +/* $Id: minisoap.c,v 1.25 2017/04/21 10:03:24 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * + * Minimal SOAP implementation for UPnP protocol. + */ +#include <stdio.h> +#include <string.h> +#ifdef _WIN32 +#include <io.h> +#include <winsock2.h> +#define snprintf _snprintf +#else +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> +#endif +#include "minisoap.h" +#include "miniupnpcstrings.h" + +/* only for malloc */ +#include <stdlib.h> + +#ifdef _WIN32 +#define PRINT_SOCKET_ERROR(x) fprintf(stderr, "Socket error: %s, %d\n", x, WSAGetLastError()); +#else +#define PRINT_SOCKET_ERROR(x) perror(x) +#endif + +/* httpWrite sends the headers and the body to the socket + * and returns the number of bytes sent */ +static int +httpWrite(SOCKET fd, const char * body, int bodysize, + const char * headers, int headerssize) +{ + int n = 0; + /*n = write(fd, headers, headerssize);*/ + /*if(bodysize>0) + n += write(fd, body, bodysize);*/ + /* Note : my old linksys router only took into account + * soap request that are sent into only one packet */ + char * p; + /* TODO: AVOID MALLOC, we could use writev() for that */ + p = malloc(headerssize+bodysize); + if(!p) + return -1; + memcpy(p, headers, headerssize); + memcpy(p+headerssize, body, bodysize); + /*n = write(fd, p, headerssize+bodysize);*/ + n = send(fd, p, headerssize+bodysize, 0); + if(n<0) { + PRINT_SOCKET_ERROR("send"); + } + /* disable send on the socket */ + /* draytek routers don't seem to like that... */ +#if 0 +#ifdef _WIN32 + if(shutdown(fd, SD_SEND)<0) { +#else + if(shutdown(fd, SHUT_WR)<0) { /*SD_SEND*/ +#endif + PRINT_SOCKET_ERROR("shutdown"); + } +#endif + free(p); + return n; +} + +/* self explanatory */ +int soapPostSubmit(SOCKET fd, + const char * url, + const char * host, + unsigned short port, + const char * action, + const char * body, + const char * httpversion) +{ + int bodysize; + char headerbuf[512]; + int headerssize; + char portstr[8]; + bodysize = (int)strlen(body); + /* We are not using keep-alive HTTP connections. + * HTTP/1.1 needs the header Connection: close to do that. + * This is the default with HTTP/1.0 + * Using HTTP/1.1 means we need to support chunked transfer-encoding : + * When using HTTP/1.1, the router "BiPAC 7404VNOX" always use chunked + * transfer encoding. */ + /* Connection: Close is normally there only in HTTP/1.1 but who knows */ + portstr[0] = '\0'; + if(port != 80) + snprintf(portstr, sizeof(portstr), ":%hu", port); + headerssize = snprintf(headerbuf, sizeof(headerbuf), + "POST %s HTTP/%s\r\n" + "Host: %s%s\r\n" + "User-Agent: " OS_STRING ", " UPNP_VERSION_STRING ", MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" + "Content-Length: %d\r\n" + "Content-Type: text/xml\r\n" + "SOAPAction: \"%s\"\r\n" + "Connection: Close\r\n" + "Cache-Control: no-cache\r\n" /* ??? */ + "Pragma: no-cache\r\n" + "\r\n", + url, httpversion, host, portstr, bodysize, action); + if ((unsigned int)headerssize >= sizeof(headerbuf)) + return -1; +#ifdef DEBUG + /*printf("SOAP request : headersize=%d bodysize=%d\n", + headerssize, bodysize); + */ + printf("SOAP request : POST %s HTTP/%s - Host: %s%s\n", + url, httpversion, host, portstr); + printf("SOAPAction: \"%s\" - Content-Length: %d\n", action, bodysize); + printf("Headers :\n%s", headerbuf); + printf("Body :\n%s\n", body); +#endif + return httpWrite(fd, body, bodysize, headerbuf, headerssize); +} + + diff --git a/thirdparty/miniupnpc/minisoap.h b/thirdparty/miniupnpc/minisoap.h new file mode 100644 index 0000000000..d6a45d03ba --- /dev/null +++ b/thirdparty/miniupnpc/minisoap.h @@ -0,0 +1,17 @@ +/* $Id: minisoap.h,v 1.4 2010/04/12 20:39:41 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ +#ifndef MINISOAP_H_INCLUDED +#define MINISOAP_H_INCLUDED + +#include "miniupnpc_socketdef.h" + +/*int httpWrite(int, const char *, int, const char *);*/ +int soapPostSubmit(SOCKET, const char *, const char *, unsigned short, + const char *, const char *, const char *); + +#endif + diff --git a/thirdparty/miniupnpc/minissdpc.c b/thirdparty/miniupnpc/minissdpc.c new file mode 100644 index 0000000000..d76b242ad0 --- /dev/null +++ b/thirdparty/miniupnpc/minissdpc.c @@ -0,0 +1,888 @@ +/* $Id: minissdpc.c,v 1.32 2016/10/07 09:04:36 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project : miniupnp + * Web : http://miniupnp.free.fr/ + * Author : Thomas BERNARD + * copyright (c) 2005-2018 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENCE file. */ +/*#include <syslog.h>*/ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <sys/types.h> +#if defined (__NetBSD__) +#include <net/if.h> +#endif +#if defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__) +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#include <io.h> +#include <iphlpapi.h> +#define snprintf _snprintf +#if !defined(_MSC_VER) +#include <stdint.h> +#else /* !defined(_MSC_VER) */ +typedef unsigned short uint16_t; +#endif /* !defined(_MSC_VER) */ +#ifndef strncasecmp +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +#define strncasecmp _memicmp +#else /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#define strncasecmp memicmp +#endif /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#endif /* #ifndef strncasecmp */ +#endif /* _WIN32 */ +#if defined(__amigaos__) || defined(__amigaos4__) +#include <sys/socket.h> +#endif /* defined(__amigaos__) || defined(__amigaos4__) */ +#if defined(__amigaos__) +#define uint16_t unsigned short +#endif /* defined(__amigaos__) */ +/* Hack */ +#define UNIX_PATH_LEN 108 +struct sockaddr_un { + uint16_t sun_family; + char sun_path[UNIX_PATH_LEN]; +}; +#else /* defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__) */ +#include <strings.h> +#include <unistd.h> +#include <sys/socket.h> +#include <sys/param.h> +#include <sys/time.h> +#include <sys/un.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <net/if.h> +#define closesocket close +#endif + +#include "miniupnpc_socketdef.h" + +#if !defined(__DragonFly__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__APPLE__) && !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__sun) && !defined(__GNU__) && !defined(__FreeBSD_kernel__) +#define HAS_IP_MREQN +#endif + +#if !defined(HAS_IP_MREQN) && !defined(_WIN32) +#include <sys/ioctl.h> +#if defined(__sun) +#include <sys/sockio.h> +#endif +#endif + +#if defined(HAS_IP_MREQN) && defined(NEED_STRUCT_IP_MREQN) +/* Several versions of glibc don't define this structure, + * define it here and compile with CFLAGS NEED_STRUCT_IP_MREQN */ +struct ip_mreqn +{ + struct in_addr imr_multiaddr; /* IP multicast address of group */ + struct in_addr imr_address; /* local IP address of interface */ + int imr_ifindex; /* Interface index */ +}; +#endif + +#if defined(__amigaos__) || defined(__amigaos4__) +/* Amiga OS specific stuff */ +#define TIMEVAL struct timeval +#endif + +#include "minissdpc.h" +#include "miniupnpc.h" +#include "receivedata.h" + +#if !(defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__)) + +#include "codelength.h" + +struct UPNPDev * +getDevicesFromMiniSSDPD(const char * devtype, const char * socketpath, int * error) +{ + struct UPNPDev * devlist = NULL; + int s; + int res; + + s = connectToMiniSSDPD(socketpath); + if (s < 0) { + if (error) + *error = s; + return NULL; + } + res = requestDevicesFromMiniSSDPD(s, devtype); + if (res < 0) { + if (error) + *error = res; + } else { + devlist = receiveDevicesFromMiniSSDPD(s, error); + } + disconnectFromMiniSSDPD(s); + return devlist; +} + +/* macros used to read from unix socket */ +#define READ_BYTE_BUFFER(c) \ + if((int)bufferindex >= n) { \ + n = read(s, buffer, sizeof(buffer)); \ + if(n<=0) break; \ + bufferindex = 0; \ + } \ + c = buffer[bufferindex++]; + +#ifndef MIN +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif /* MIN */ + +#define READ_COPY_BUFFER(dst, len) \ + for(l = len, p = (unsigned char *)dst; l > 0; ) { \ + unsigned int lcopy; \ + if((int)bufferindex >= n) { \ + n = read(s, buffer, sizeof(buffer)); \ + if(n<=0) break; \ + bufferindex = 0; \ + } \ + lcopy = MIN(l, (n - bufferindex)); \ + memcpy(p, buffer + bufferindex, lcopy); \ + l -= lcopy; \ + p += lcopy; \ + bufferindex += lcopy; \ + } + +#define READ_DISCARD_BUFFER(len) \ + for(l = len; l > 0; ) { \ + unsigned int lcopy; \ + if(bufferindex >= n) { \ + n = read(s, buffer, sizeof(buffer)); \ + if(n<=0) break; \ + bufferindex = 0; \ + } \ + lcopy = MIN(l, (n - bufferindex)); \ + l -= lcopy; \ + bufferindex += lcopy; \ + } + +int +connectToMiniSSDPD(const char * socketpath) +{ + int s; + struct sockaddr_un addr; +#if defined(MINIUPNPC_SET_SOCKET_TIMEOUT) && !defined(__sun) + struct timeval timeout; +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ + + s = socket(AF_UNIX, SOCK_STREAM, 0); + if(s < 0) + { + /*syslog(LOG_ERR, "socket(unix): %m");*/ + perror("socket(unix)"); + return MINISSDPC_SOCKET_ERROR; + } +#if defined(MINIUPNPC_SET_SOCKET_TIMEOUT) && !defined(__sun) + /* setting a 3 seconds timeout */ + /* not supported for AF_UNIX sockets under Solaris */ + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + perror("setsockopt SO_RCVTIMEO unix"); + } + timeout.tv_sec = 3; + timeout.tv_usec = 0; + if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0) + { + perror("setsockopt SO_SNDTIMEO unix"); + } +#endif /* #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT */ + if(!socketpath) + socketpath = "/var/run/minissdpd.sock"; + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, socketpath, sizeof(addr.sun_path)); + /* TODO : check if we need to handle the EINTR */ + if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) + { + /*syslog(LOG_WARNING, "connect(\"%s\"): %m", socketpath);*/ + close(s); + return MINISSDPC_SOCKET_ERROR; + } + return s; +} + +int +disconnectFromMiniSSDPD(int s) +{ + if (close(s) < 0) + return MINISSDPC_SOCKET_ERROR; + return MINISSDPC_SUCCESS; +} + +int +requestDevicesFromMiniSSDPD(int s, const char * devtype) +{ + unsigned char buffer[256]; + unsigned char * p; + unsigned int stsize, l; + + stsize = strlen(devtype); + if(stsize == 8 && 0 == memcmp(devtype, "ssdp:all", 8)) + { + buffer[0] = 3; /* request type 3 : everything */ + } + else + { + buffer[0] = 1; /* request type 1 : request devices/services by type */ + } + p = buffer + 1; + l = stsize; CODELENGTH(l, p); + if(p + stsize > buffer + sizeof(buffer)) + { + /* devtype is too long ! */ +#ifdef DEBUG + fprintf(stderr, "devtype is too long ! stsize=%u sizeof(buffer)=%u\n", + stsize, (unsigned)sizeof(buffer)); +#endif /* DEBUG */ + return MINISSDPC_INVALID_INPUT; + } + memcpy(p, devtype, stsize); + p += stsize; + if(write(s, buffer, p - buffer) < 0) + { + /*syslog(LOG_ERR, "write(): %m");*/ + perror("minissdpc.c: write()"); + return MINISSDPC_SOCKET_ERROR; + } + return MINISSDPC_SUCCESS; +} + +struct UPNPDev * +receiveDevicesFromMiniSSDPD(int s, int * error) +{ + struct UPNPDev * tmp; + struct UPNPDev * devlist = NULL; + unsigned char buffer[256]; + ssize_t n; + unsigned char * p; + unsigned char * url; + unsigned char * st; + unsigned int bufferindex; + unsigned int i, ndev; + unsigned int urlsize, stsize, usnsize, l; + + n = read(s, buffer, sizeof(buffer)); + if(n<=0) + { + perror("minissdpc.c: read()"); + if (error) + *error = MINISSDPC_SOCKET_ERROR; + return NULL; + } + ndev = buffer[0]; + bufferindex = 1; + for(i = 0; i < ndev; i++) + { + DECODELENGTH_READ(urlsize, READ_BYTE_BUFFER); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + return devlist; + } +#ifdef DEBUG + printf(" urlsize=%u", urlsize); +#endif /* DEBUG */ + url = malloc(urlsize); + if(url == NULL) { + if (error) + *error = MINISSDPC_MEMORY_ERROR; + return devlist; + } + READ_COPY_BUFFER(url, urlsize); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + goto free_url_and_return; + } + DECODELENGTH_READ(stsize, READ_BYTE_BUFFER); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + goto free_url_and_return; + } +#ifdef DEBUG + printf(" stsize=%u", stsize); +#endif /* DEBUG */ + st = malloc(stsize); + if (st == NULL) { + if (error) + *error = MINISSDPC_MEMORY_ERROR; + goto free_url_and_return; + } + READ_COPY_BUFFER(st, stsize); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + goto free_url_and_st_and_return; + } + DECODELENGTH_READ(usnsize, READ_BYTE_BUFFER); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + goto free_url_and_st_and_return; + } +#ifdef DEBUG + printf(" usnsize=%u\n", usnsize); +#endif /* DEBUG */ + tmp = (struct UPNPDev *)malloc(sizeof(struct UPNPDev)+urlsize+stsize+usnsize); + if(tmp == NULL) { + if (error) + *error = MINISSDPC_MEMORY_ERROR; + goto free_url_and_st_and_return; + } + tmp->pNext = devlist; + tmp->descURL = tmp->buffer; + tmp->st = tmp->buffer + 1 + urlsize; + memcpy(tmp->buffer, url, urlsize); + tmp->buffer[urlsize] = '\0'; + memcpy(tmp->st, st, stsize); + tmp->buffer[urlsize+1+stsize] = '\0'; + free(url); + free(st); + url = NULL; + st = NULL; + tmp->usn = tmp->buffer + 1 + urlsize + 1 + stsize; + READ_COPY_BUFFER(tmp->usn, usnsize); + if(n<=0) { + if (error) + *error = MINISSDPC_INVALID_SERVER_REPLY; + goto free_tmp_and_return; + } + tmp->buffer[urlsize+1+stsize+1+usnsize] = '\0'; + tmp->scope_id = 0; /* default value. scope_id is not available with MiniSSDPd */ + devlist = tmp; + } + if (error) + *error = MINISSDPC_SUCCESS; + return devlist; + +free_url_and_st_and_return: + free(st); +free_url_and_return: + free(url); + return devlist; + +free_tmp_and_return: + free(tmp); + return devlist; +} + +#endif /* !(defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__)) */ + +/* parseMSEARCHReply() + * the last 4 arguments are filled during the parsing : + * - location/locationsize : "location:" field of the SSDP reply packet + * - st/stsize : "st:" field of the SSDP reply packet. + * The strings are NOT null terminated */ +static void +parseMSEARCHReply(const char * reply, int size, + const char * * location, int * locationsize, + const char * * st, int * stsize, + const char * * usn, int * usnsize) +{ + int a, b, i; + i = 0; + a = i; /* start of the line */ + b = 0; /* end of the "header" (position of the colon) */ + while(i<size) + { + switch(reply[i]) + { + case ':': + if(b==0) + { + b = i; /* end of the "header" */ + /*for(j=a; j<b; j++) + { + putchar(reply[j]); + } + */ + } + break; + case '\x0a': + case '\x0d': + if(b!=0) + { + /*for(j=b+1; j<i; j++) + { + putchar(reply[j]); + } + putchar('\n');*/ + /* skip the colon and white spaces */ + do { b++; } while(reply[b]==' '); + if(0==strncasecmp(reply+a, "location", 8)) + { + *location = reply+b; + *locationsize = i-b; + } + else if(0==strncasecmp(reply+a, "st", 2)) + { + *st = reply+b; + *stsize = i-b; + } + else if(0==strncasecmp(reply+a, "usn", 3)) + { + *usn = reply+b; + *usnsize = i-b; + } + b = 0; + } + a = i+1; + break; + default: + break; + } + i++; + } +} + +/* port upnp discover : SSDP protocol */ +#define SSDP_PORT 1900 +#define XSTR(s) STR(s) +#define STR(s) #s +#define UPNP_MCAST_ADDR "239.255.255.250" +/* for IPv6 */ +#define UPNP_MCAST_LL_ADDR "FF02::C" /* link-local */ +#define UPNP_MCAST_SL_ADDR "FF05::C" /* site-local */ + +/* direct discovery if minissdpd responses are not sufficient */ +/* ssdpDiscoverDevices() : + * return a chained list of all devices found or NULL if + * no devices was found. + * It is up to the caller to free the chained list + * delay is in millisecond (poll). + * UDA v1.1 says : + * The TTL for the IP packet SHOULD default to 2 and + * SHOULD be configurable. */ +struct UPNPDev * +ssdpDiscoverDevices(const char * const deviceTypes[], + int delay, const char * multicastif, + int localport, + int ipv6, unsigned char ttl, + int * error, + int searchalltypes) +{ + struct UPNPDev * tmp; + struct UPNPDev * devlist = 0; + unsigned int scope_id = 0; + int opt = 1; + static const char MSearchMsgFmt[] = + "M-SEARCH * HTTP/1.1\r\n" + "HOST: %s:" XSTR(SSDP_PORT) "\r\n" + "ST: %s\r\n" + "MAN: \"ssdp:discover\"\r\n" + "MX: %u\r\n" + "\r\n"; + int deviceIndex; + char bufr[1536]; /* reception and emission buffer */ + SOCKET sudp; + int n; + struct sockaddr_storage sockudp_r; + unsigned int mx; +#ifdef NO_GETADDRINFO + struct sockaddr_storage sockudp_w; +#else + int rv; + struct addrinfo hints, *servinfo, *p; +#endif +#ifdef _WIN32 + MIB_IPFORWARDROW ip_forward; + unsigned long _ttl = (unsigned long)ttl; +#endif + int linklocal = 1; + int sentok; + + if(error) + *error = MINISSDPC_UNKNOWN_ERROR; + + if(localport==UPNP_LOCAL_PORT_SAME) + localport = SSDP_PORT; + +#ifdef _WIN32 + sudp = socket(ipv6 ? PF_INET6 : PF_INET, SOCK_DGRAM, IPPROTO_UDP); +#else + sudp = socket(ipv6 ? PF_INET6 : PF_INET, SOCK_DGRAM, 0); +#endif + if(ISINVALID(sudp)) + { + if(error) + *error = MINISSDPC_SOCKET_ERROR; + PRINT_SOCKET_ERROR("socket"); + return NULL; + } + /* reception */ + memset(&sockudp_r, 0, sizeof(struct sockaddr_storage)); + if(ipv6) { + struct sockaddr_in6 * p = (struct sockaddr_in6 *)&sockudp_r; + p->sin6_family = AF_INET6; + if(localport > 0 && localport < 65536) + p->sin6_port = htons((unsigned short)localport); + p->sin6_addr = in6addr_any; /* in6addr_any is not available with MinGW32 3.4.2 */ + } else { + struct sockaddr_in * p = (struct sockaddr_in *)&sockudp_r; + p->sin_family = AF_INET; + if(localport > 0 && localport < 65536) + p->sin_port = htons((unsigned short)localport); + p->sin_addr.s_addr = INADDR_ANY; + } +#ifdef _WIN32 +/* This code could help us to use the right Network interface for + * SSDP multicast traffic */ +/* Get IP associated with the index given in the ip_forward struct + * in order to give this ip to setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF) */ + if(!ipv6 + && (GetBestRoute(inet_addr("223.255.255.255"), 0, &ip_forward) == NO_ERROR)) { + DWORD dwRetVal = 0; + PMIB_IPADDRTABLE pIPAddrTable; + DWORD dwSize = 0; +#ifdef DEBUG + IN_ADDR IPAddr; +#endif + int i; +#ifdef DEBUG + printf("ifIndex=%lu nextHop=%lx \n", ip_forward.dwForwardIfIndex, ip_forward.dwForwardNextHop); +#endif + pIPAddrTable = (MIB_IPADDRTABLE *) malloc(sizeof (MIB_IPADDRTABLE)); + if(pIPAddrTable) { + if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { + free(pIPAddrTable); + pIPAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize); + } + } + if(pIPAddrTable) { + dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 ); + if (dwRetVal == NO_ERROR) { +#ifdef DEBUG + printf("\tNum Entries: %ld\n", pIPAddrTable->dwNumEntries); +#endif + for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) { +#ifdef DEBUG + printf("\n\tInterface Index[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwIndex); + IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr; + printf("\tIP Address[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); + IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask; + printf("\tSubnet Mask[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); + IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwBCastAddr; + printf("\tBroadCast[%d]: \t%s (%ld)\n", i, inet_ntoa(IPAddr), pIPAddrTable->table[i].dwBCastAddr); + printf("\tReassembly size[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwReasmSize); + printf("\tType and State[%d]:", i); + printf("\n"); +#endif + if (pIPAddrTable->table[i].dwIndex == ip_forward.dwForwardIfIndex) { + /* Set the address of this interface to be used */ + struct in_addr mc_if; + memset(&mc_if, 0, sizeof(mc_if)); + mc_if.s_addr = pIPAddrTable->table[i].dwAddr; + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&mc_if, sizeof(mc_if)) < 0) { + PRINT_SOCKET_ERROR("setsockopt"); + } + ((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = pIPAddrTable->table[i].dwAddr; +#ifndef DEBUG + break; +#endif + } + } + } + free(pIPAddrTable); + pIPAddrTable = NULL; + } + } +#endif /* _WIN32 */ + +#ifdef _WIN32 + if (setsockopt(sudp, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof (opt)) < 0) +#else + if (setsockopt(sudp, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt)) < 0) +#endif + { + if(error) + *error = MINISSDPC_SOCKET_ERROR; + PRINT_SOCKET_ERROR("setsockopt(SO_REUSEADDR,...)"); + return NULL; + } + + if(ipv6) { +#ifdef _WIN32 + DWORD mcastHops = ttl; + if(setsockopt(sudp, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (const char *)&mcastHops, sizeof(mcastHops)) < 0) +#else /* _WIN32 */ + int mcastHops = ttl; + if(setsockopt(sudp, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &mcastHops, sizeof(mcastHops)) < 0) +#endif /* _WIN32 */ + { + PRINT_SOCKET_ERROR("setsockopt(IPV6_MULTICAST_HOPS,...)"); + } + } else { +#ifdef _WIN32 + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&_ttl, sizeof(_ttl)) < 0) +#else /* _WIN32 */ + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) +#endif /* _WIN32 */ + { + /* not a fatal error */ + PRINT_SOCKET_ERROR("setsockopt(IP_MULTICAST_TTL,...)"); + } + } + + if(multicastif) + { + if(ipv6) { +#if !defined(_WIN32) + /* according to MSDN, if_nametoindex() is supported since + * MS Windows Vista and MS Windows Server 2008. + * http://msdn.microsoft.com/en-us/library/bb408409%28v=vs.85%29.aspx */ + unsigned int ifindex = if_nametoindex(multicastif); /* eth0, etc. */ + if(setsockopt(sudp, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifindex, sizeof(ifindex)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt IPV6_MULTICAST_IF"); + } +#else +#ifdef DEBUG + printf("Setting of multicast interface not supported in IPv6 under Windows.\n"); +#endif +#endif + } else { + struct in_addr mc_if; + mc_if.s_addr = inet_addr(multicastif); /* ex: 192.168.x.x */ + if(mc_if.s_addr != INADDR_NONE) + { + ((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = mc_if.s_addr; + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&mc_if, sizeof(mc_if)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt IP_MULTICAST_IF"); + } + } else { +#ifdef HAS_IP_MREQN + /* was not an ip address, try with an interface name */ + struct ip_mreqn reqn; /* only defined with -D_BSD_SOURCE or -D_GNU_SOURCE */ + memset(&reqn, 0, sizeof(struct ip_mreqn)); + reqn.imr_ifindex = if_nametoindex(multicastif); + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&reqn, sizeof(reqn)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt IP_MULTICAST_IF"); + } +#elif !defined(_WIN32) + struct ifreq ifr; + int ifrlen = sizeof(ifr); + strncpy(ifr.ifr_name, multicastif, IFNAMSIZ); + ifr.ifr_name[IFNAMSIZ-1] = '\0'; + if(ioctl(sudp, SIOCGIFADDR, &ifr, &ifrlen) < 0) + { + PRINT_SOCKET_ERROR("ioctl(...SIOCGIFADDR...)"); + } + mc_if.s_addr = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr; + if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&mc_if, sizeof(mc_if)) < 0) + { + PRINT_SOCKET_ERROR("setsockopt IP_MULTICAST_IF"); + } +#else /* _WIN32 */ +#ifdef DEBUG + printf("Setting of multicast interface not supported with interface name.\n"); +#endif +#endif /* #ifdef HAS_IP_MREQN / !defined(_WIN32) */ + } + } + } + + /* Before sending the packed, we first "bind" in order to be able + * to receive the response */ + if (bind(sudp, (const struct sockaddr *)&sockudp_r, + ipv6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in)) != 0) + { + if(error) + *error = MINISSDPC_SOCKET_ERROR; + PRINT_SOCKET_ERROR("bind"); + closesocket(sudp); + return NULL; + } + + if(error) + *error = MINISSDPC_SUCCESS; + /* Calculating maximum response time in seconds */ + mx = ((unsigned int)delay) / 1000u; + if(mx == 0) { + mx = 1; + delay = 1000; + } + /* receiving SSDP response packet */ + for(deviceIndex = 0; deviceTypes[deviceIndex]; deviceIndex++) { + sentok = 0; + /* sending the SSDP M-SEARCH packet */ + n = snprintf(bufr, sizeof(bufr), + MSearchMsgFmt, + ipv6 ? + (linklocal ? "[" UPNP_MCAST_LL_ADDR "]" : "[" UPNP_MCAST_SL_ADDR "]") + : UPNP_MCAST_ADDR, + deviceTypes[deviceIndex], mx); + if ((unsigned int)n >= sizeof(bufr)) { + if(error) + *error = MINISSDPC_MEMORY_ERROR; + goto error; + } +#ifdef DEBUG + /*printf("Sending %s", bufr);*/ + printf("Sending M-SEARCH request to %s with ST: %s\n", + ipv6 ? + (linklocal ? "[" UPNP_MCAST_LL_ADDR "]" : "[" UPNP_MCAST_SL_ADDR "]") + : UPNP_MCAST_ADDR, + deviceTypes[deviceIndex]); +#endif +#ifdef NO_GETADDRINFO + /* the following code is not using getaddrinfo */ + /* emission */ + memset(&sockudp_w, 0, sizeof(struct sockaddr_storage)); + if(ipv6) { + struct sockaddr_in6 * p = (struct sockaddr_in6 *)&sockudp_w; + p->sin6_family = AF_INET6; + p->sin6_port = htons(SSDP_PORT); + inet_pton(AF_INET6, + linklocal ? UPNP_MCAST_LL_ADDR : UPNP_MCAST_SL_ADDR, + &(p->sin6_addr)); + } else { + struct sockaddr_in * p = (struct sockaddr_in *)&sockudp_w; + p->sin_family = AF_INET; + p->sin_port = htons(SSDP_PORT); + p->sin_addr.s_addr = inet_addr(UPNP_MCAST_ADDR); + } + n = sendto(sudp, bufr, n, 0, &sockudp_w, + ipv6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in)); + if (n < 0) { + if(error) + *error = MINISSDPC_SOCKET_ERROR; + PRINT_SOCKET_ERROR("sendto"); + } else { + sentok = 1; + } +#else /* #ifdef NO_GETADDRINFO */ + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; /* AF_INET6 or AF_INET */ + hints.ai_socktype = SOCK_DGRAM; + /*hints.ai_flags = */ + if ((rv = getaddrinfo(ipv6 + ? (linklocal ? UPNP_MCAST_LL_ADDR : UPNP_MCAST_SL_ADDR) + : UPNP_MCAST_ADDR, + XSTR(SSDP_PORT), &hints, &servinfo)) != 0) { + if(error) + *error = MINISSDPC_SOCKET_ERROR; +#ifdef _WIN32 + fprintf(stderr, "getaddrinfo() failed: %d\n", rv); +#else + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); +#endif + break; + } + for(p = servinfo; p; p = p->ai_next) { + n = sendto(sudp, bufr, n, 0, p->ai_addr, p->ai_addrlen); + if (n < 0) { +#ifdef DEBUG + char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; + if (getnameinfo(p->ai_addr, p->ai_addrlen, hbuf, sizeof(hbuf), sbuf, + sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0) { + fprintf(stderr, "host:%s port:%s\n", hbuf, sbuf); + } +#endif + PRINT_SOCKET_ERROR("sendto"); + continue; + } else { + sentok = 1; + } + } + freeaddrinfo(servinfo); + if(!sentok) { + if(error) + *error = MINISSDPC_SOCKET_ERROR; + } +#endif /* #ifdef NO_GETADDRINFO */ + /* Waiting for SSDP REPLY packet to M-SEARCH + * if searchalltypes is set, enter the loop only + * when the last deviceType is reached */ + if((sentok && !searchalltypes) || !deviceTypes[deviceIndex + 1]) do { + n = receivedata(sudp, bufr, sizeof(bufr), delay, &scope_id); + if (n < 0) { + /* error */ + if(error) + *error = MINISSDPC_SOCKET_ERROR; + goto error; + } else if (n == 0) { + /* no data or Time Out */ +#ifdef DEBUG + printf("NODATA or TIMEOUT\n"); +#endif /* DEBUG */ + if (devlist && !searchalltypes) { + /* found some devices, stop now*/ + if(error) + *error = MINISSDPC_SUCCESS; + goto error; + } + } else { + const char * descURL=NULL; + int urlsize=0; + const char * st=NULL; + int stsize=0; + const char * usn=NULL; + int usnsize=0; + parseMSEARCHReply(bufr, n, &descURL, &urlsize, &st, &stsize, &usn, &usnsize); + if(st&&descURL) { +#ifdef DEBUG + printf("M-SEARCH Reply:\n ST: %.*s\n USN: %.*s\n Location: %.*s\n", + stsize, st, usnsize, (usn?usn:""), urlsize, descURL); +#endif /* DEBUG */ + for(tmp=devlist; tmp; tmp = tmp->pNext) { + if(memcmp(tmp->descURL, descURL, urlsize) == 0 && + tmp->descURL[urlsize] == '\0' && + memcmp(tmp->st, st, stsize) == 0 && + tmp->st[stsize] == '\0' && + (usnsize == 0 || memcmp(tmp->usn, usn, usnsize) == 0) && + tmp->usn[usnsize] == '\0') + break; + } + /* at the exit of the loop above, tmp is null if + * no duplicate device was found */ + if(tmp) + continue; + tmp = (struct UPNPDev *)malloc(sizeof(struct UPNPDev)+urlsize+stsize+usnsize); + if(!tmp) { + /* memory allocation error */ + if(error) + *error = MINISSDPC_MEMORY_ERROR; + goto error; + } + tmp->pNext = devlist; + tmp->descURL = tmp->buffer; + tmp->st = tmp->buffer + 1 + urlsize; + tmp->usn = tmp->st + 1 + stsize; + memcpy(tmp->buffer, descURL, urlsize); + tmp->buffer[urlsize] = '\0'; + memcpy(tmp->st, st, stsize); + tmp->buffer[urlsize+1+stsize] = '\0'; + if(usn != NULL) + memcpy(tmp->usn, usn, usnsize); + tmp->buffer[urlsize+1+stsize+1+usnsize] = '\0'; + tmp->scope_id = scope_id; + devlist = tmp; + } + } + } while(n > 0); + if(ipv6) { + /* switch linklocal flag */ + if(linklocal) { + linklocal = 0; + --deviceIndex; + } else { + linklocal = 1; + } + } + } +error: + closesocket(sudp); + return devlist; +} + diff --git a/thirdparty/miniupnpc/minissdpc.h b/thirdparty/miniupnpc/minissdpc.h new file mode 100644 index 0000000000..167d897cb6 --- /dev/null +++ b/thirdparty/miniupnpc/minissdpc.h @@ -0,0 +1,58 @@ +/* $Id: minissdpc.h,v 1.6 2015/09/18 12:45:16 nanard Exp $ */ +/* Project: miniupnp + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * Author: Thomas Bernard + * Copyright (c) 2005-2015 Thomas Bernard + * This software is subjects to the conditions detailed + * in the LICENCE file provided within this distribution */ +#ifndef MINISSDPC_H_INCLUDED +#define MINISSDPC_H_INCLUDED + +#include "miniupnpc_declspec.h" +#include "upnpdev.h" + +/* error codes : */ +#define MINISSDPC_SUCCESS (0) +#define MINISSDPC_UNKNOWN_ERROR (-1) +#define MINISSDPC_SOCKET_ERROR (-101) +#define MINISSDPC_MEMORY_ERROR (-102) +#define MINISSDPC_INVALID_INPUT (-103) +#define MINISSDPC_INVALID_SERVER_REPLY (-104) + +#ifdef __cplusplus +extern "C" { +#endif + +#if !(defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__)) + +MINIUPNP_LIBSPEC struct UPNPDev * +getDevicesFromMiniSSDPD(const char * devtype, const char * socketpath, int * error); + +MINIUPNP_LIBSPEC int +connectToMiniSSDPD(const char * socketpath); + +MINIUPNP_LIBSPEC int +disconnectFromMiniSSDPD(int fd); + +MINIUPNP_LIBSPEC int +requestDevicesFromMiniSSDPD(int fd, const char * devtype); + +MINIUPNP_LIBSPEC struct UPNPDev * +receiveDevicesFromMiniSSDPD(int fd, int * error); + +#endif /* !(defined(_WIN32) || defined(__amigaos__) || defined(__amigaos4__)) */ + +MINIUPNP_LIBSPEC struct UPNPDev * +ssdpDiscoverDevices(const char * const deviceTypes[], + int delay, const char * multicastif, + int localport, + int ipv6, unsigned char ttl, + int * error, + int searchalltypes); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/thirdparty/miniupnpc/miniupnpc.c b/thirdparty/miniupnpc/miniupnpc.c new file mode 100644 index 0000000000..5d93ef9933 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc.c @@ -0,0 +1,727 @@ +/* $Id: miniupnpc.c,v 1.149 2016/02/09 09:50:46 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project : miniupnp + * Web : http://miniupnp.free.fr/ + * Author : Thomas BERNARD + * copyright (c) 2005-2018 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENSE file. */ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef _WIN32 +/* Win32 Specific includes and defines */ +#include <winsock2.h> +#include <ws2tcpip.h> +#include <io.h> +#include <iphlpapi.h> +#define snprintf _snprintf +#define strdup _strdup +#ifndef strncasecmp +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +#define strncasecmp _memicmp +#else /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#define strncasecmp memicmp +#endif /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#endif /* #ifndef strncasecmp */ +#define MAXHOSTNAMELEN 64 +#else /* #ifdef _WIN32 */ +/* Standard POSIX includes */ +#include <unistd.h> +#if defined(__amigaos__) && !defined(__amigaos4__) +/* Amiga OS 3 specific stuff */ +#define socklen_t int +#else +#include <sys/select.h> +#endif +#include <sys/socket.h> +#include <sys/types.h> +#include <sys/param.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <net/if.h> +#if !defined(__amigaos__) && !defined(__amigaos4__) +#include <poll.h> +#endif +#include <strings.h> +#include <errno.h> +#define closesocket close +#endif /* #else _WIN32 */ +#ifdef __GNU__ +#define MAXHOSTNAMELEN 64 +#endif + + +#include "miniupnpc.h" +#include "minissdpc.h" +#include "miniwget.h" +#include "miniwget_private.h" +#include "minisoap.h" +#include "minixml.h" +#include "upnpcommands.h" +#include "connecthostport.h" + +/* compare the beginning of a string with a constant string */ +#define COMPARE(str, cstr) (0==memcmp(str, cstr, sizeof(cstr) - 1)) + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 64 +#endif + +#define SOAPPREFIX "s" +#define SERVICEPREFIX "u" +#define SERVICEPREFIX2 'u' + +/* check if an ip address is a private (LAN) address + * see https://tools.ietf.org/html/rfc1918 */ +static int is_rfc1918addr(const char * addr) +{ + /* 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) */ + if(COMPARE(addr, "192.168.")) + return 1; + /* 10.0.0.0 - 10.255.255.255 (10/8 prefix) */ + if(COMPARE(addr, "10.")) + return 1; + /* 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) */ + if(COMPARE(addr, "172.")) { + int i = atoi(addr + 4); + if((16 <= i) && (i <= 31)) + return 1; + } + return 0; +} + +/* root description parsing */ +MINIUPNP_LIBSPEC void parserootdesc(const char * buffer, int bufsize, struct IGDdatas * data) +{ + struct xmlparser parser; + /* xmlparser object */ + parser.xmlstart = buffer; + parser.xmlsize = bufsize; + parser.data = data; + parser.starteltfunc = IGDstartelt; + parser.endeltfunc = IGDendelt; + parser.datafunc = IGDdata; + parser.attfunc = 0; + parsexml(&parser); +#ifdef DEBUG + printIGD(data); +#endif +} + +/* simpleUPnPcommand2 : + * not so simple ! + * return values : + * pointer - OK + * NULL - error */ +static char * +simpleUPnPcommand2(SOCKET s, const char * url, const char * service, + const char * action, struct UPNParg * args, + int * bufsize, const char * httpversion) +{ + char hostname[MAXHOSTNAMELEN+1]; + unsigned short port = 0; + char * path; + char soapact[128]; + char soapbody[2048]; + int soapbodylen; + char * buf; + int n; + int status_code; + + *bufsize = 0; + snprintf(soapact, sizeof(soapact), "%s#%s", service, action); + if(args==NULL) + { + soapbodylen = snprintf(soapbody, sizeof(soapbody), + "<?xml version=\"1.0\"?>\r\n" + "<" SOAPPREFIX ":Envelope " + "xmlns:" SOAPPREFIX "=\"http://schemas.xmlsoap.org/soap/envelope/\" " + SOAPPREFIX ":encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + "<" SOAPPREFIX ":Body>" + "<" SERVICEPREFIX ":%s xmlns:" SERVICEPREFIX "=\"%s\">" + "</" SERVICEPREFIX ":%s>" + "</" SOAPPREFIX ":Body></" SOAPPREFIX ":Envelope>" + "\r\n", action, service, action); + if ((unsigned int)soapbodylen >= sizeof(soapbody)) + return NULL; + } + else + { + char * p; + const char * pe, * pv; + const char * const pend = soapbody + sizeof(soapbody); + soapbodylen = snprintf(soapbody, sizeof(soapbody), + "<?xml version=\"1.0\"?>\r\n" + "<" SOAPPREFIX ":Envelope " + "xmlns:" SOAPPREFIX "=\"http://schemas.xmlsoap.org/soap/envelope/\" " + SOAPPREFIX ":encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + "<" SOAPPREFIX ":Body>" + "<" SERVICEPREFIX ":%s xmlns:" SERVICEPREFIX "=\"%s\">", + action, service); + if ((unsigned int)soapbodylen >= sizeof(soapbody)) + return NULL; + p = soapbody + soapbodylen; + while(args->elt) + { + if(p >= pend) /* check for space to write next byte */ + return NULL; + *(p++) = '<'; + + pe = args->elt; + while(p < pend && *pe) + *(p++) = *(pe++); + + if(p >= pend) /* check for space to write next byte */ + return NULL; + *(p++) = '>'; + + if((pv = args->val)) + { + while(p < pend && *pv) + *(p++) = *(pv++); + } + + if((p+2) > pend) /* check for space to write next 2 bytes */ + return NULL; + *(p++) = '<'; + *(p++) = '/'; + + pe = args->elt; + while(p < pend && *pe) + *(p++) = *(pe++); + + if(p >= pend) /* check for space to write next byte */ + return NULL; + *(p++) = '>'; + + args++; + } + if((p+4) > pend) /* check for space to write next 4 bytes */ + return NULL; + *(p++) = '<'; + *(p++) = '/'; + *(p++) = SERVICEPREFIX2; + *(p++) = ':'; + + pe = action; + while(p < pend && *pe) + *(p++) = *(pe++); + + strncpy(p, "></" SOAPPREFIX ":Body></" SOAPPREFIX ":Envelope>\r\n", + pend - p); + if(soapbody[sizeof(soapbody)-1]) /* strncpy pads buffer with 0s, so if it doesn't end in 0, could not fit full string */ + return NULL; + } + if(!parseURL(url, hostname, &port, &path, NULL)) return NULL; + if(ISINVALID(s)) { + s = connecthostport(hostname, port, 0); + if(ISINVALID(s)) { + /* failed to connect */ + return NULL; + } + } + + n = soapPostSubmit(s, path, hostname, port, soapact, soapbody, httpversion); + if(n<=0) { +#ifdef DEBUG + printf("Error sending SOAP request\n"); +#endif + closesocket(s); + return NULL; + } + + buf = getHTTPResponse(s, bufsize, &status_code); +#ifdef DEBUG + if(*bufsize > 0 && buf) + { + printf("HTTP %d SOAP Response :\n%.*s\n", status_code, *bufsize, buf); + } + else + { + printf("HTTP %d, empty SOAP response. size=%d\n", status_code, *bufsize); + } +#endif + closesocket(s); + return buf; +} + +/* simpleUPnPcommand : + * not so simple ! + * return values : + * pointer - OK + * NULL - error */ +char * +simpleUPnPcommand(int s, const char * url, const char * service, + const char * action, struct UPNParg * args, + int * bufsize) +{ + char * buf; + +#if 1 + buf = simpleUPnPcommand2((SOCKET)s, url, service, action, args, bufsize, "1.1"); +#else + buf = simpleUPnPcommand2((SOCKET)s, url, service, action, args, bufsize, "1.0"); + if (!buf || *bufsize == 0) + { +#if DEBUG + printf("Error or no result from SOAP request; retrying with HTTP/1.1\n"); +#endif + buf = simpleUPnPcommand2((SOCKET)s, url, service, action, args, bufsize, "1.1"); + } +#endif + return buf; +} + +/* upnpDiscoverDevices() : + * return a chained list of all devices found or NULL if + * no devices was found. + * It is up to the caller to free the chained list + * delay is in millisecond (poll). + * UDA v1.1 says : + * The TTL for the IP packet SHOULD default to 2 and + * SHOULD be configurable. */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevices(const char * const deviceTypes[], + int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error, + int searchalltypes) +{ + struct UPNPDev * tmp; + struct UPNPDev * devlist = 0; +#if !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) + int deviceIndex; +#endif /* !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) */ + + if(error) + *error = UPNPDISCOVER_UNKNOWN_ERROR; +#if !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) + /* first try to get infos from minissdpd ! */ + if(!minissdpdsock) + minissdpdsock = "/var/run/minissdpd.sock"; + if(minissdpdsock[0] != '\0') { + for(deviceIndex = 0; deviceTypes[deviceIndex]; deviceIndex++) { + struct UPNPDev * minissdpd_devlist; + int only_rootdevice = 1; + minissdpd_devlist = getDevicesFromMiniSSDPD(deviceTypes[deviceIndex], + minissdpdsock, 0); + if(minissdpd_devlist) { +#ifdef DEBUG + printf("returned by MiniSSDPD: %s\t%s\n", + minissdpd_devlist->st, minissdpd_devlist->descURL); +#endif /* DEBUG */ + if(!strstr(minissdpd_devlist->st, "rootdevice")) + only_rootdevice = 0; + for(tmp = minissdpd_devlist; tmp->pNext != NULL; tmp = tmp->pNext) { +#ifdef DEBUG + printf("returned by MiniSSDPD: %s\t%s\n", + tmp->pNext->st, tmp->pNext->descURL); +#endif /* DEBUG */ + if(!strstr(tmp->st, "rootdevice")) + only_rootdevice = 0; + } + tmp->pNext = devlist; + devlist = minissdpd_devlist; + if(!searchalltypes && !only_rootdevice) + break; + } + } + } + for(tmp = devlist; tmp != NULL; tmp = tmp->pNext) { + /* We return what we have found if it was not only a rootdevice */ + if(!strstr(tmp->st, "rootdevice")) { + if(error) + *error = UPNPDISCOVER_SUCCESS; + return devlist; + } + } +#endif /* !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) */ + + /* direct discovery if minissdpd responses are not sufficient */ + { + struct UPNPDev * discovered_devlist; + discovered_devlist = ssdpDiscoverDevices(deviceTypes, delay, multicastif, localport, + ipv6, ttl, error, searchalltypes); + if(devlist == NULL) + devlist = discovered_devlist; + else { + for(tmp = devlist; tmp->pNext != NULL; tmp = tmp->pNext); + tmp->pNext = discovered_devlist; + } + } + return devlist; +} + +/* upnpDiscover() Discover IGD device */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscover(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error) +{ + static const char * const deviceList[] = { +#if 0 + "urn:schemas-upnp-org:device:InternetGatewayDevice:2", + "urn:schemas-upnp-org:service:WANIPConnection:2", +#endif + "urn:schemas-upnp-org:device:InternetGatewayDevice:1", + "urn:schemas-upnp-org:service:WANIPConnection:1", + "urn:schemas-upnp-org:service:WANPPPConnection:1", + "upnp:rootdevice", + /*"ssdp:all",*/ + 0 + }; + return upnpDiscoverDevices(deviceList, + delay, multicastif, minissdpdsock, localport, + ipv6, ttl, error, 0); +} + +/* upnpDiscoverAll() Discover all UPnP devices */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverAll(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error) +{ + static const char * const deviceList[] = { + /*"upnp:rootdevice",*/ + "ssdp:all", + 0 + }; + return upnpDiscoverDevices(deviceList, + delay, multicastif, minissdpdsock, localport, + ipv6, ttl, error, 0); +} + +/* upnpDiscoverDevice() Discover a specific device */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevice(const char * device, int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error) +{ + const char * const deviceList[] = { + device, + 0 + }; + return upnpDiscoverDevices(deviceList, + delay, multicastif, minissdpdsock, localport, + ipv6, ttl, error, 0); +} + +static char * +build_absolute_url(const char * baseurl, const char * descURL, + const char * url, unsigned int scope_id) +{ + int l, n; + char * s; + const char * base; + char * p; +#if defined(IF_NAMESIZE) && !defined(_WIN32) + char ifname[IF_NAMESIZE]; +#else /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + char scope_str[8]; +#endif /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + + if( (url[0] == 'h') + &&(url[1] == 't') + &&(url[2] == 't') + &&(url[3] == 'p') + &&(url[4] == ':') + &&(url[5] == '/') + &&(url[6] == '/')) + return strdup(url); + base = (baseurl[0] == '\0') ? descURL : baseurl; + n = strlen(base); + if(n > 7) { + p = strchr(base + 7, '/'); + if(p) + n = p - base; + } + l = n + strlen(url) + 1; + if(url[0] != '/') + l++; + if(scope_id != 0) { +#if defined(IF_NAMESIZE) && !defined(_WIN32) + if(if_indextoname(scope_id, ifname)) { + l += 3 + strlen(ifname); /* 3 == strlen(%25) */ + } +#else /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + /* under windows, scope is numerical */ + l += 3 + snprintf(scope_str, sizeof(scope_str), "%u", scope_id); +#endif /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + } + s = malloc(l); + if(s == NULL) return NULL; + memcpy(s, base, n); + if(scope_id != 0) { + s[n] = '\0'; + if(0 == memcmp(s, "http://[fe80:", 13)) { + /* this is a linklocal IPv6 address */ + p = strchr(s, ']'); + if(p) { + /* insert %25<scope> into URL */ +#if defined(IF_NAMESIZE) && !defined(_WIN32) + memmove(p + 3 + strlen(ifname), p, strlen(p) + 1); + memcpy(p, "%25", 3); + memcpy(p + 3, ifname, strlen(ifname)); + n += 3 + strlen(ifname); +#else /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + memmove(p + 3 + strlen(scope_str), p, strlen(p) + 1); + memcpy(p, "%25", 3); + memcpy(p + 3, scope_str, strlen(scope_str)); + n += 3 + strlen(scope_str); +#endif /* defined(IF_NAMESIZE) && !defined(_WIN32) */ + } + } + } + if(url[0] != '/') + s[n++] = '/'; + memcpy(s + n, url, l - n); + return s; +} + +/* Prepare the Urls for usage... + */ +MINIUPNP_LIBSPEC void +GetUPNPUrls(struct UPNPUrls * urls, struct IGDdatas * data, + const char * descURL, unsigned int scope_id) +{ + /* strdup descURL */ + urls->rootdescURL = strdup(descURL); + + /* get description of WANIPConnection */ + urls->ipcondescURL = build_absolute_url(data->urlbase, descURL, + data->first.scpdurl, scope_id); + urls->controlURL = build_absolute_url(data->urlbase, descURL, + data->first.controlurl, scope_id); + urls->controlURL_CIF = build_absolute_url(data->urlbase, descURL, + data->CIF.controlurl, scope_id); + urls->controlURL_6FC = build_absolute_url(data->urlbase, descURL, + data->IPv6FC.controlurl, scope_id); + +#ifdef DEBUG + printf("urls->ipcondescURL='%s'\n", urls->ipcondescURL); + printf("urls->controlURL='%s'\n", urls->controlURL); + printf("urls->controlURL_CIF='%s'\n", urls->controlURL_CIF); + printf("urls->controlURL_6FC='%s'\n", urls->controlURL_6FC); +#endif +} + +MINIUPNP_LIBSPEC void +FreeUPNPUrls(struct UPNPUrls * urls) +{ + if(!urls) + return; + free(urls->controlURL); + urls->controlURL = 0; + free(urls->ipcondescURL); + urls->ipcondescURL = 0; + free(urls->controlURL_CIF); + urls->controlURL_CIF = 0; + free(urls->controlURL_6FC); + urls->controlURL_6FC = 0; + free(urls->rootdescURL); + urls->rootdescURL = 0; +} + +int +UPNPIGD_IsConnected(struct UPNPUrls * urls, struct IGDdatas * data) +{ + char status[64]; + unsigned int uptime; + status[0] = '\0'; + UPNP_GetStatusInfo(urls->controlURL, data->first.servicetype, + status, &uptime, NULL); + if(0 == strcmp("Connected", status)) + return 1; + else if(0 == strcmp("Up", status)) /* Also accept "Up" */ + return 1; + else + return 0; +} + + +/* UPNP_GetValidIGD() : + * return values : + * -1 = Internal error + * 0 = NO IGD found + * 1 = A valid connected IGD has been found + * 2 = A valid IGD has been found but it reported as + * not connected + * 3 = an UPnP device has been found but was not recognized as an IGD + * + * In any positive non zero return case, the urls and data structures + * passed as parameters are set. Don't forget to call FreeUPNPUrls(urls) to + * free allocated memory. + */ +MINIUPNP_LIBSPEC int +UPNP_GetValidIGD(struct UPNPDev * devlist, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen) +{ + struct xml_desc { + char * xml; + int size; + int is_igd; + } * desc = NULL; + struct UPNPDev * dev; + int ndev = 0; + int i; + int state = -1; /* state 1 : IGD connected. State 2 : IGD. State 3 : anything */ + int n_igd = 0; + char extIpAddr[16]; + char myLanAddr[40]; + int status_code = -1; + + if(!devlist) + { +#ifdef DEBUG + printf("Empty devlist\n"); +#endif + return 0; + } + /* counting total number of devices in the list */ + for(dev = devlist; dev; dev = dev->pNext) + ndev++; + if(ndev > 0) + { + desc = calloc(ndev, sizeof(struct xml_desc)); + if(!desc) + return -1; /* memory allocation error */ + } + /* Step 1 : downloading descriptions and testing type */ + for(dev = devlist, i = 0; dev; dev = dev->pNext, i++) + { + /* we should choose an internet gateway device. + * with st == urn:schemas-upnp-org:device:InternetGatewayDevice:1 */ + desc[i].xml = miniwget_getaddr(dev->descURL, &(desc[i].size), + myLanAddr, sizeof(myLanAddr), + dev->scope_id, &status_code); +#ifdef DEBUG + if(!desc[i].xml) + { + printf("error getting XML description %s\n", dev->descURL); + } +#endif + if(desc[i].xml) + { + memset(data, 0, sizeof(struct IGDdatas)); + memset(urls, 0, sizeof(struct UPNPUrls)); + parserootdesc(desc[i].xml, desc[i].size, data); + if(COMPARE(data->CIF.servicetype, + "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:")) + { + desc[i].is_igd = 1; + n_igd++; + if(lanaddr) + strncpy(lanaddr, myLanAddr, lanaddrlen); + } + } + } + /* iterate the list to find a device depending on state */ + for(state = 1; state <= 3; state++) + { + for(dev = devlist, i = 0; dev; dev = dev->pNext, i++) + { + if(desc[i].xml) + { + memset(data, 0, sizeof(struct IGDdatas)); + memset(urls, 0, sizeof(struct UPNPUrls)); + parserootdesc(desc[i].xml, desc[i].size, data); + if(desc[i].is_igd || state >= 3 ) + { + int is_connected; + + GetUPNPUrls(urls, data, dev->descURL, dev->scope_id); + + /* in state 2 and 3 we don't test if device is connected ! */ + if(state >= 2) + goto free_and_return; + is_connected = UPNPIGD_IsConnected(urls, data); +#ifdef DEBUG + printf("UPNPIGD_IsConnected(%s) = %d\n", + urls->controlURL, is_connected); +#endif + /* checks that status is connected AND there is a external IP address assigned */ + if(is_connected && + (UPNP_GetExternalIPAddress(urls->controlURL, data->first.servicetype, extIpAddr) == 0)) { + if(!is_rfc1918addr(extIpAddr) && (extIpAddr[0] != '\0') + && (0 != strcmp(extIpAddr, "0.0.0.0"))) + goto free_and_return; + } + FreeUPNPUrls(urls); + if(data->second.servicetype[0] != '\0') { +#ifdef DEBUG + printf("We tried %s, now we try %s !\n", + data->first.servicetype, data->second.servicetype); +#endif + /* swaping WANPPPConnection and WANIPConnection ! */ + memcpy(&data->tmp, &data->first, sizeof(struct IGDdatas_service)); + memcpy(&data->first, &data->second, sizeof(struct IGDdatas_service)); + memcpy(&data->second, &data->tmp, sizeof(struct IGDdatas_service)); + GetUPNPUrls(urls, data, dev->descURL, dev->scope_id); + is_connected = UPNPIGD_IsConnected(urls, data); +#ifdef DEBUG + printf("UPNPIGD_IsConnected(%s) = %d\n", + urls->controlURL, is_connected); +#endif + if(is_connected && + (UPNP_GetExternalIPAddress(urls->controlURL, data->first.servicetype, extIpAddr) == 0)) { + if(!is_rfc1918addr(extIpAddr) && (extIpAddr[0] != '\0') + && (0 != strcmp(extIpAddr, "0.0.0.0"))) + goto free_and_return; + } + FreeUPNPUrls(urls); + } + } + memset(data, 0, sizeof(struct IGDdatas)); + } + } + } + state = 0; +free_and_return: + if(desc) { + for(i = 0; i < ndev; i++) { + if(desc[i].xml) { + free(desc[i].xml); + } + } + free(desc); + } + return state; +} + +/* UPNP_GetIGDFromUrl() + * Used when skipping the discovery process. + * return value : + * 0 - Not ok + * 1 - OK */ +int +UPNP_GetIGDFromUrl(const char * rootdescurl, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen) +{ + char * descXML; + int descXMLsize = 0; + + descXML = miniwget_getaddr(rootdescurl, &descXMLsize, + lanaddr, lanaddrlen, 0, NULL); + if(descXML) { + memset(data, 0, sizeof(struct IGDdatas)); + memset(urls, 0, sizeof(struct UPNPUrls)); + parserootdesc(descXML, descXMLsize, data); + free(descXML); + descXML = NULL; + GetUPNPUrls(urls, data, rootdescurl, 0); + return 1; + } else { + return 0; + } +} + diff --git a/thirdparty/miniupnpc/miniupnpc.def b/thirdparty/miniupnpc/miniupnpc.def new file mode 100644 index 0000000000..60e0bbe423 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc.def @@ -0,0 +1,45 @@ +LIBRARY +; miniupnpc library + miniupnpc + +EXPORTS +; miniupnpc + upnpDiscover + freeUPNPDevlist + parserootdesc + UPNP_GetValidIGD + UPNP_GetIGDFromUrl + GetUPNPUrls + FreeUPNPUrls +; miniwget + miniwget + miniwget_getaddr +; upnpcommands + UPNP_GetTotalBytesSent + UPNP_GetTotalBytesReceived + UPNP_GetTotalPacketsSent + UPNP_GetTotalPacketsReceived + UPNP_GetStatusInfo + UPNP_GetConnectionTypeInfo + UPNP_GetExternalIPAddress + UPNP_GetLinkLayerMaxBitRates + UPNP_AddPortMapping + UPNP_AddAnyPortMapping + UPNP_DeletePortMapping + UPNP_DeletePortMappingRange + UPNP_GetPortMappingNumberOfEntries + UPNP_GetSpecificPortMappingEntry + UPNP_GetGenericPortMappingEntry + UPNP_GetListOfPortMappings + UPNP_AddPinhole + UPNP_CheckPinholeWorking + UPNP_UpdatePinhole + UPNP_GetPinholePackets + UPNP_DeletePinhole + UPNP_GetFirewallStatus + UPNP_GetOutboundPinholeTimeout +; upnperrors + strupnperror +; portlistingparse + ParsePortListing + FreePortListing diff --git a/thirdparty/miniupnpc/miniupnpc.h b/thirdparty/miniupnpc/miniupnpc.h new file mode 100644 index 0000000000..8ddc282bd1 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc.h @@ -0,0 +1,153 @@ +/* $Id: miniupnpc.h,v 1.53 2018/05/07 11:05:16 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project: miniupnp + * http://miniupnp.free.fr/ + * Author: Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subjects to the conditions detailed + * in the LICENCE file provided within this distribution */ +#ifndef MINIUPNPC_H_INCLUDED +#define MINIUPNPC_H_INCLUDED + +#include "miniupnpc_declspec.h" +#include "igd_desc_parse.h" +#include "upnpdev.h" + +/* error codes : */ +#define UPNPDISCOVER_SUCCESS (0) +#define UPNPDISCOVER_UNKNOWN_ERROR (-1) +#define UPNPDISCOVER_SOCKET_ERROR (-101) +#define UPNPDISCOVER_MEMORY_ERROR (-102) + +/* versions : */ +#define MINIUPNPC_VERSION "2.1" +#define MINIUPNPC_API_VERSION 17 + +/* Source port: + Using "1" as an alias for 1900 for backwards compatibility + (presuming one would have used that for the "sameport" parameter) */ +#define UPNP_LOCAL_PORT_ANY 0 +#define UPNP_LOCAL_PORT_SAME 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Structures definitions : */ +struct UPNParg { const char * elt; const char * val; }; + +char * +simpleUPnPcommand(int, const char *, const char *, + const char *, struct UPNParg *, + int *); + +/* upnpDiscover() + * discover UPnP devices on the network. + * The discovered devices are returned as a chained list. + * It is up to the caller to free the list with freeUPNPDevlist(). + * delay (in millisecond) is the maximum time for waiting any device + * response. + * If available, device list will be obtained from MiniSSDPd. + * Default path for minissdpd socket will be used if minissdpdsock argument + * is NULL. + * If multicastif is not NULL, it will be used instead of the default + * multicast interface for sending SSDP discover packets. + * If localport is set to UPNP_LOCAL_PORT_SAME(1) SSDP packets will be sent + * from the source port 1900 (same as destination port), if set to + * UPNP_LOCAL_PORT_ANY(0) system assign a source port, any other value will + * be attempted as the source port. + * "searchalltypes" parameter is useful when searching several types, + * if 0, the discovery will stop with the first type returning results. + * TTL should default to 2. */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscover(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverAll(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevice(const char * device, int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevices(const char * const deviceTypes[], + int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error, + int searchalltypes); + +/* parserootdesc() : + * parse root XML description of a UPnP device and fill the IGDdatas + * structure. */ +MINIUPNP_LIBSPEC void parserootdesc(const char *, int, struct IGDdatas *); + +/* structure used to get fast access to urls + * controlURL: controlURL of the WANIPConnection + * ipcondescURL: url of the description of the WANIPConnection + * controlURL_CIF: controlURL of the WANCommonInterfaceConfig + * controlURL_6FC: controlURL of the WANIPv6FirewallControl + */ +struct UPNPUrls { + char * controlURL; + char * ipcondescURL; + char * controlURL_CIF; + char * controlURL_6FC; + char * rootdescURL; +}; + +/* UPNP_GetValidIGD() : + * return values : + * 0 = NO IGD found + * 1 = A valid connected IGD has been found + * 2 = A valid IGD has been found but it reported as + * not connected + * 3 = an UPnP device has been found but was not recognized as an IGD + * + * In any non zero return case, the urls and data structures + * passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to + * free allocated memory. + */ +MINIUPNP_LIBSPEC int +UPNP_GetValidIGD(struct UPNPDev * devlist, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen); + +/* UPNP_GetIGDFromUrl() + * Used when skipping the discovery process. + * When succeding, urls, data, and lanaddr arguments are set. + * return value : + * 0 - Not ok + * 1 - OK */ +MINIUPNP_LIBSPEC int +UPNP_GetIGDFromUrl(const char * rootdescurl, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen); + +MINIUPNP_LIBSPEC void +GetUPNPUrls(struct UPNPUrls *, struct IGDdatas *, + const char *, unsigned int); + +MINIUPNP_LIBSPEC void +FreeUPNPUrls(struct UPNPUrls *); + +/* return 0 or 1 */ +MINIUPNP_LIBSPEC int UPNPIGD_IsConnected(struct UPNPUrls *, struct IGDdatas *); + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h b/thirdparty/miniupnpc/miniupnpc/miniupnpc.h new file mode 100644 index 0000000000..8ddc282bd1 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc/miniupnpc.h @@ -0,0 +1,153 @@ +/* $Id: miniupnpc.h,v 1.53 2018/05/07 11:05:16 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project: miniupnp + * http://miniupnp.free.fr/ + * Author: Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subjects to the conditions detailed + * in the LICENCE file provided within this distribution */ +#ifndef MINIUPNPC_H_INCLUDED +#define MINIUPNPC_H_INCLUDED + +#include "miniupnpc_declspec.h" +#include "igd_desc_parse.h" +#include "upnpdev.h" + +/* error codes : */ +#define UPNPDISCOVER_SUCCESS (0) +#define UPNPDISCOVER_UNKNOWN_ERROR (-1) +#define UPNPDISCOVER_SOCKET_ERROR (-101) +#define UPNPDISCOVER_MEMORY_ERROR (-102) + +/* versions : */ +#define MINIUPNPC_VERSION "2.1" +#define MINIUPNPC_API_VERSION 17 + +/* Source port: + Using "1" as an alias for 1900 for backwards compatibility + (presuming one would have used that for the "sameport" parameter) */ +#define UPNP_LOCAL_PORT_ANY 0 +#define UPNP_LOCAL_PORT_SAME 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Structures definitions : */ +struct UPNParg { const char * elt; const char * val; }; + +char * +simpleUPnPcommand(int, const char *, const char *, + const char *, struct UPNParg *, + int *); + +/* upnpDiscover() + * discover UPnP devices on the network. + * The discovered devices are returned as a chained list. + * It is up to the caller to free the list with freeUPNPDevlist(). + * delay (in millisecond) is the maximum time for waiting any device + * response. + * If available, device list will be obtained from MiniSSDPd. + * Default path for minissdpd socket will be used if minissdpdsock argument + * is NULL. + * If multicastif is not NULL, it will be used instead of the default + * multicast interface for sending SSDP discover packets. + * If localport is set to UPNP_LOCAL_PORT_SAME(1) SSDP packets will be sent + * from the source port 1900 (same as destination port), if set to + * UPNP_LOCAL_PORT_ANY(0) system assign a source port, any other value will + * be attempted as the source port. + * "searchalltypes" parameter is useful when searching several types, + * if 0, the discovery will stop with the first type returning results. + * TTL should default to 2. */ +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscover(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverAll(int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevice(const char * device, int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error); + +MINIUPNP_LIBSPEC struct UPNPDev * +upnpDiscoverDevices(const char * const deviceTypes[], + int delay, const char * multicastif, + const char * minissdpdsock, int localport, + int ipv6, unsigned char ttl, + int * error, + int searchalltypes); + +/* parserootdesc() : + * parse root XML description of a UPnP device and fill the IGDdatas + * structure. */ +MINIUPNP_LIBSPEC void parserootdesc(const char *, int, struct IGDdatas *); + +/* structure used to get fast access to urls + * controlURL: controlURL of the WANIPConnection + * ipcondescURL: url of the description of the WANIPConnection + * controlURL_CIF: controlURL of the WANCommonInterfaceConfig + * controlURL_6FC: controlURL of the WANIPv6FirewallControl + */ +struct UPNPUrls { + char * controlURL; + char * ipcondescURL; + char * controlURL_CIF; + char * controlURL_6FC; + char * rootdescURL; +}; + +/* UPNP_GetValidIGD() : + * return values : + * 0 = NO IGD found + * 1 = A valid connected IGD has been found + * 2 = A valid IGD has been found but it reported as + * not connected + * 3 = an UPnP device has been found but was not recognized as an IGD + * + * In any non zero return case, the urls and data structures + * passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to + * free allocated memory. + */ +MINIUPNP_LIBSPEC int +UPNP_GetValidIGD(struct UPNPDev * devlist, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen); + +/* UPNP_GetIGDFromUrl() + * Used when skipping the discovery process. + * When succeding, urls, data, and lanaddr arguments are set. + * return value : + * 0 - Not ok + * 1 - OK */ +MINIUPNP_LIBSPEC int +UPNP_GetIGDFromUrl(const char * rootdescurl, + struct UPNPUrls * urls, + struct IGDdatas * data, + char * lanaddr, int lanaddrlen); + +MINIUPNP_LIBSPEC void +GetUPNPUrls(struct UPNPUrls *, struct IGDdatas *, + const char *, unsigned int); + +MINIUPNP_LIBSPEC void +FreeUPNPUrls(struct UPNPUrls *); + +/* return 0 or 1 */ +MINIUPNP_LIBSPEC int UPNPIGD_IsConnected(struct UPNPUrls *, struct IGDdatas *); + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.h b/thirdparty/miniupnpc/miniupnpc/miniwget.h new file mode 100644 index 0000000000..f5572c2544 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc/miniwget.h @@ -0,0 +1,27 @@ +/* $Id: miniwget.h,v 1.12 2016/01/24 17:24:36 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2016 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#ifndef MINIWGET_H_INCLUDED +#define MINIWGET_H_INCLUDED + +#include "miniupnpc_declspec.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MINIUPNP_LIBSPEC void * miniwget(const char *, int *, unsigned int, int *); + +MINIUPNP_LIBSPEC void * miniwget_getaddr(const char *, int *, char *, int, unsigned int, int *); + +int parseURL(const char *, char *, unsigned short *, char * *, unsigned int *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h b/thirdparty/miniupnpc/miniupnpc/upnpcommands.h new file mode 100644 index 0000000000..0c6d501666 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc/upnpcommands.h @@ -0,0 +1,348 @@ +/* $Id: upnpcommands.h,v 1.32 2018/03/13 23:34:47 nanard Exp $ */ +/* Miniupnp project : http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided within this distribution */ +#ifndef UPNPCOMMANDS_H_INCLUDED +#define UPNPCOMMANDS_H_INCLUDED + +#include "miniupnpc_declspec.h" +#include "miniupnpctypes.h" + +/* MiniUPnPc return codes : */ +#define UPNPCOMMAND_SUCCESS (0) +#define UPNPCOMMAND_UNKNOWN_ERROR (-1) +#define UPNPCOMMAND_INVALID_ARGS (-2) +#define UPNPCOMMAND_HTTP_ERROR (-3) +#define UPNPCOMMAND_INVALID_RESPONSE (-4) +#define UPNPCOMMAND_MEM_ALLOC_ERROR (-5) + +#ifdef __cplusplus +extern "C" { +#endif + +struct PortMappingParserData; + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesSent(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesReceived(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsSent(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsReceived(const char * controlURL, + const char * servicetype); + +/* UPNP_GetStatusInfo() + * status and lastconnerror are 64 byte buffers + * Return values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error code */ +MINIUPNP_LIBSPEC int +UPNP_GetStatusInfo(const char * controlURL, + const char * servicetype, + char * status, + unsigned int * uptime, + char * lastconnerror); + +/* UPNP_GetConnectionTypeInfo() + * argument connectionType is a 64 character buffer + * Return Values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error code */ +MINIUPNP_LIBSPEC int +UPNP_GetConnectionTypeInfo(const char * controlURL, + const char * servicetype, + char * connectionType); + +/* UPNP_GetExternalIPAddress() call the corresponding UPNP method. + * if the third arg is not null the value is copied to it. + * at least 16 bytes must be available + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR Either an UPnP error code or an unknown error. + * + * possible UPnP Errors : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. */ +MINIUPNP_LIBSPEC int +UPNP_GetExternalIPAddress(const char * controlURL, + const char * servicetype, + char * extIpAdd); + +/* UPNP_GetLinkLayerMaxBitRates() + * call WANCommonInterfaceConfig:1#GetCommonLinkProperties + * + * return values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. */ +MINIUPNP_LIBSPEC int +UPNP_GetLinkLayerMaxBitRates(const char* controlURL, + const char* servicetype, + unsigned int * bitrateDown, + unsigned int * bitrateUp); + +/* UPNP_AddPortMapping() + * if desc is NULL, it will be defaulted to "libminiupnpc" + * remoteHost is usually NULL because IGD don't support it. + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR. Either an UPnP error code or an unknown error. + * + * List of possible UPnP errors for AddPortMapping : + * errorCode errorDescription (short) - Description (long) + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization and + * the sender was not authorized. + * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be + * wild-carded + * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded + * 718 ConflictInMappingEntry - The port mapping entry specified conflicts + * with a mapping assigned previously to another client + * 724 SamePortValuesRequired - Internal and External port values + * must be the same + * 725 OnlyPermanentLeasesSupported - The NAT implementation only supports + * permanent lease times on port mappings + * 726 RemoteHostOnlySupportsWildcard - RemoteHost must be a wildcard + * and cannot be a specific IP address or DNS name + * 727 ExternalPortOnlySupportsWildcard - ExternalPort must be a wildcard and + * cannot be a specific port value + * 728 NoPortMapsAvailable - There are not enough free ports available to + * complete port mapping. + * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed + * due to conflict with other mechanisms. + * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded + */ +MINIUPNP_LIBSPEC int +UPNP_AddPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration); + +/* UPNP_AddAnyPortMapping() + * if desc is NULL, it will be defaulted to "libminiupnpc" + * remoteHost is usually NULL because IGD don't support it. + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR. Either an UPnP error code or an unknown error. + * + * List of possible UPnP errors for AddPortMapping : + * errorCode errorDescription (short) - Description (long) + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization and + * the sender was not authorized. + * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be + * wild-carded + * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded + * 728 NoPortMapsAvailable - There are not enough free ports available to + * complete port mapping. + * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed + * due to conflict with other mechanisms. + * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded + */ +MINIUPNP_LIBSPEC int +UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration, + char * reservedPort); + +/* UPNP_DeletePortMapping() + * Use same argument values as what was used for AddPortMapping(). + * remoteHost is usually NULL because IGD don't support it. + * Return Values : + * 0 : SUCCESS + * NON ZERO : error. Either an UPnP error code or an undefined error. + * + * List of possible UPnP errors for DeletePortMapping : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 714 NoSuchEntryInArray - The specified value does not exist in the array */ +MINIUPNP_LIBSPEC int +UPNP_DeletePortMapping(const char * controlURL, const char * servicetype, + const char * extPort, const char * proto, + const char * remoteHost); + +/* UPNP_DeletePortRangeMapping() + * Use same argument values as what was used for AddPortMapping(). + * remoteHost is usually NULL because IGD don't support it. + * Return Values : + * 0 : SUCCESS + * NON ZERO : error. Either an UPnP error code or an undefined error. + * + * List of possible UPnP errors for DeletePortMapping : + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 730 PortMappingNotFound - This error message is returned if no port + * mapping is found in the specified range. + * 733 InconsistentParameters - NewStartPort and NewEndPort values are not consistent. */ +MINIUPNP_LIBSPEC int +UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype, + const char * extPortStart, const char * extPortEnd, + const char * proto, + const char * manage); + +/* UPNP_GetPortMappingNumberOfEntries() + * not supported by all routers */ +MINIUPNP_LIBSPEC int +UPNP_GetPortMappingNumberOfEntries(const char* controlURL, + const char* servicetype, + unsigned int * num); + +/* UPNP_GetSpecificPortMappingEntry() + * retrieves an existing port mapping + * params : + * in extPort + * in proto + * in remoteHost + * out intClient (16 bytes) + * out intPort (6 bytes) + * out desc (80 bytes) + * out enabled (4 bytes) + * out leaseDuration (16 bytes) + * + * return value : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. + * + * List of possible UPnP errors for _GetSpecificPortMappingEntry : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 714 NoSuchEntryInArray - The specified value does not exist in the array. + */ +MINIUPNP_LIBSPEC int +UPNP_GetSpecificPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * extPort, + const char * proto, + const char * remoteHost, + char * intClient, + char * intPort, + char * desc, + char * enabled, + char * leaseDuration); + +/* UPNP_GetGenericPortMappingEntry() + * params : + * in index + * out extPort (6 bytes) + * out intClient (16 bytes) + * out intPort (6 bytes) + * out protocol (4 bytes) + * out desc (80 bytes) + * out enabled (4 bytes) + * out rHost (64 bytes) + * out duration (16 bytes) + * + * return value : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. + * + * Possible UPNP Error codes : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds + */ +MINIUPNP_LIBSPEC int +UPNP_GetGenericPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * index, + char * extPort, + char * intClient, + char * intPort, + char * protocol, + char * desc, + char * enabled, + char * rHost, + char * duration); + +/* UPNP_GetListOfPortMappings() Available in IGD v2 + * + * + * Possible UPNP Error codes : + * 606 Action not Authorized + * 730 PortMappingNotFound - no port mapping is found in the specified range. + * 733 InconsistantParameters - NewStartPort and NewEndPort values are not + * consistent. + */ +MINIUPNP_LIBSPEC int +UPNP_GetListOfPortMappings(const char * controlURL, + const char * servicetype, + const char * startPort, + const char * endPort, + const char * protocol, + const char * numberOfPorts, + struct PortMappingParserData * data); + +/* IGD:2, functions for service WANIPv6FirewallControl:1 */ +MINIUPNP_LIBSPEC int +UPNP_GetFirewallStatus(const char * controlURL, + const char * servicetype, + int * firewallEnabled, + int * inboundPinholeAllowed); + +MINIUPNP_LIBSPEC int +UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + int * opTimeout); + +MINIUPNP_LIBSPEC int +UPNP_AddPinhole(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + const char * leaseTime, + char * uniqueID); + +MINIUPNP_LIBSPEC int +UPNP_UpdatePinhole(const char * controlURL, const char * servicetype, + const char * uniqueID, + const char * leaseTime); + +MINIUPNP_LIBSPEC int +UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID); + +MINIUPNP_LIBSPEC int +UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype, + const char * uniqueID, int * isWorking); + +MINIUPNP_LIBSPEC int +UPNP_GetPinholePackets(const char * controlURL, const char * servicetype, + const char * uniqueID, int * packets); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/thirdparty/miniupnpc/miniupnpc_declspec.h b/thirdparty/miniupnpc/miniupnpc_declspec.h new file mode 100644 index 0000000000..40adb922ec --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc_declspec.h @@ -0,0 +1,21 @@ +#ifndef MINIUPNPC_DECLSPEC_H_INCLUDED +#define MINIUPNPC_DECLSPEC_H_INCLUDED + +#if defined(_WIN32) && !defined(MINIUPNP_STATICLIB) + /* for windows dll */ + #ifdef MINIUPNP_EXPORTS + #define MINIUPNP_LIBSPEC __declspec(dllexport) + #else + #define MINIUPNP_LIBSPEC __declspec(dllimport) + #endif +#else + #if defined(__GNUC__) && __GNUC__ >= 4 + /* fix dynlib for OS X 10.9.2 and Apple LLVM version 5.0 */ + #define MINIUPNP_LIBSPEC __attribute__ ((visibility ("default"))) + #else + #define MINIUPNP_LIBSPEC + #endif +#endif + +#endif /* MINIUPNPC_DECLSPEC_H_INCLUDED */ + diff --git a/thirdparty/miniupnpc/miniupnpc_socketdef.h b/thirdparty/miniupnpc/miniupnpc_socketdef.h new file mode 100644 index 0000000000..965d9151b9 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpc_socketdef.h @@ -0,0 +1,37 @@ +/* $Id: miniupnpc_socketdef.h,v 1.1 2018/03/13 23:44:10 nanard Exp $ */ +/* Miniupnp project : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ + * Author : Thomas Bernard + * Copyright (c) 2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided within this distribution */ +#ifndef MINIUPNPC_SOCKETDEF_H_INCLUDED +#define MINIUPNPC_SOCKETDEF_H_INCLUDED + +#ifdef _MSC_VER + +#define ISINVALID(s) (INVALID_SOCKET==(s)) + +#else + +#ifndef SOCKET +#define SOCKET int +#endif +#ifndef SSIZE_T +#define SSIZE_T ssize_t +#endif +#ifndef INVALID_SOCKET +#define INVALID_SOCKET (-1) +#endif +#ifndef ISINVALID +#define ISINVALID(s) ((s)<0) +#endif + +#endif + +#ifdef _WIN32 +#define PRINT_SOCKET_ERROR(x) fprintf(stderr, "Socket error: %s, %d\n", x, WSAGetLastError()); +#else +#define PRINT_SOCKET_ERROR(x) perror(x) +#endif + +#endif /* MINIUPNPC_SOCKETDEF_H_INCLUDED */ diff --git a/thirdparty/miniupnpc/miniupnpcmodule.c b/thirdparty/miniupnpc/miniupnpcmodule.c new file mode 100644 index 0000000000..8657a0e002 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpcmodule.c @@ -0,0 +1,703 @@ +/* $Id: miniupnpcmodule.c,v 1.24 2014/06/10 09:48:11 nanard Exp $*/ +/* Project : miniupnp + * Author : Thomas BERNARD + * website : https://miniupnp.tuxfamily.org/ + * copyright (c) 2007-2018 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENCE file. */ +#include <Python.h> +#define MINIUPNP_STATICLIB +#include "structmember.h" +#include "miniupnpc.h" +#include "upnpcommands.h" +#include "upnperrors.h" + +#ifdef _WIN32 +#include <winsock2.h> +#endif + +/* for compatibility with Python < 2.4 */ +#ifndef Py_RETURN_NONE +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif + +#ifndef Py_RETURN_TRUE +#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True +#endif + +#ifndef Py_RETURN_FALSE +#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False +#endif + +/* for compatibility with Python < 3.0 */ +#ifndef PyVarObject_HEAD_INIT +#define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +#ifndef Py_TYPE +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#endif + +typedef struct { + PyObject_HEAD + /* Type-specific fields go here. */ + struct UPNPDev * devlist; + struct UPNPUrls urls; + struct IGDdatas data; + unsigned int discoverdelay; /* value passed to upnpDiscover() */ + unsigned int localport; /* value passed to upnpDiscover() */ + char lanaddr[40]; /* our ip address on the LAN */ + char * multicastif; + char * minissdpdsocket; +} UPnPObject; + +static PyMemberDef UPnP_members[] = { + {"lanaddr", T_STRING_INPLACE, offsetof(UPnPObject, lanaddr), + READONLY, "ip address on the LAN" + }, + {"discoverdelay", T_UINT, offsetof(UPnPObject, discoverdelay), + 0/*READWRITE*/, "value in ms used to wait for SSDP responses" + }, + {"localport", T_UINT, offsetof(UPnPObject, localport), + 0/*READWRITE*/, + "If localport is set to UPNP_LOCAL_PORT_SAME(1) " + "SSDP packets will be sent from the source port " + "1900 (same as destination port), if set to " + "UPNP_LOCAL_PORT_ANY(0) system assign a source " + "port, any other value will be attempted as the " + "source port" + }, + /* T_STRING is allways readonly :( */ + {"multicastif", T_STRING, offsetof(UPnPObject, multicastif), + 0, "IP of the network interface to be used for multicast operations" + }, + {"minissdpdsocket", T_STRING, offsetof(UPnPObject, minissdpdsocket), + 0, "path of the MiniSSDPd unix socket" + }, + {NULL} +}; + + +static int UPnP_init(UPnPObject *self, PyObject *args, PyObject *kwds) +{ + char* multicastif = NULL; + char* minissdpdsocket = NULL; + static char *kwlist[] = { + "multicastif", "minissdpdsocket", "discoverdelay", + "localport", NULL + }; + + if(!PyArg_ParseTupleAndKeywords(args, kwds, "|zzII", kwlist, + &multicastif, + &minissdpdsocket, + &self->discoverdelay, + &self->localport)) + return -1; + + if(self->localport>1 && + (self->localport>65534||self->localport<1024)) { + PyErr_SetString(PyExc_Exception, "Invalid localport value"); + return -1; + } + if(multicastif) + self->multicastif = strdup(multicastif); + if(minissdpdsocket) + self->minissdpdsocket = strdup(minissdpdsocket); + + return 0; +} + +static void +UPnPObject_dealloc(UPnPObject *self) +{ + freeUPNPDevlist(self->devlist); + FreeUPNPUrls(&self->urls); + free(self->multicastif); + free(self->minissdpdsocket); + Py_TYPE(self)->tp_free((PyObject*)self); +} + +static PyObject * +UPnP_discover(UPnPObject *self) +{ + struct UPNPDev * dev; + int i; + PyObject *res = NULL; + if(self->devlist) + { + freeUPNPDevlist(self->devlist); + self->devlist = 0; + } + Py_BEGIN_ALLOW_THREADS + self->devlist = upnpDiscover((int)self->discoverdelay/*timeout in ms*/, + self->multicastif, + self->minissdpdsocket, + (int)self->localport, + 0/*ip v6*/, + 2/* TTL */, + 0/*error */); + Py_END_ALLOW_THREADS + /* Py_RETURN_NONE ??? */ + for(dev = self->devlist, i = 0; dev; dev = dev->pNext) + i++; + res = Py_BuildValue("i", i); + return res; +} + +static PyObject * +UPnP_selectigd(UPnPObject *self) +{ + int r; +Py_BEGIN_ALLOW_THREADS + r = UPNP_GetValidIGD(self->devlist, &self->urls, &self->data, + self->lanaddr, sizeof(self->lanaddr)); +Py_END_ALLOW_THREADS + if(r) + { + return Py_BuildValue("s", self->urls.controlURL); + } + else + { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, "No UPnP device discovered"); + return NULL; + } +} + +static PyObject * +UPnP_totalbytesent(UPnPObject *self) +{ + UNSIGNED_INTEGER i; +Py_BEGIN_ALLOW_THREADS + i = UPNP_GetTotalBytesSent(self->urls.controlURL_CIF, + self->data.CIF.servicetype); +Py_END_ALLOW_THREADS +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("I", i); +#else + return Py_BuildValue("i", (int)i); +#endif +} + +static PyObject * +UPnP_totalbytereceived(UPnPObject *self) +{ + UNSIGNED_INTEGER i; +Py_BEGIN_ALLOW_THREADS + i = UPNP_GetTotalBytesReceived(self->urls.controlURL_CIF, + self->data.CIF.servicetype); +Py_END_ALLOW_THREADS +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("I", i); +#else + return Py_BuildValue("i", (int)i); +#endif +} + +static PyObject * +UPnP_totalpacketsent(UPnPObject *self) +{ + UNSIGNED_INTEGER i; +Py_BEGIN_ALLOW_THREADS + i = UPNP_GetTotalPacketsSent(self->urls.controlURL_CIF, + self->data.CIF.servicetype); +Py_END_ALLOW_THREADS +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("I", i); +#else + return Py_BuildValue("i", (int)i); +#endif +} + +static PyObject * +UPnP_totalpacketreceived(UPnPObject *self) +{ + UNSIGNED_INTEGER i; +Py_BEGIN_ALLOW_THREADS + i = UPNP_GetTotalPacketsReceived(self->urls.controlURL_CIF, + self->data.CIF.servicetype); +Py_END_ALLOW_THREADS +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("I", i); +#else + return Py_BuildValue("i", (int)i); +#endif +} + +static PyObject * +UPnP_statusinfo(UPnPObject *self) +{ + char status[64]; + char lastconnerror[64]; + unsigned int uptime = 0; + int r; + status[0] = '\0'; + lastconnerror[0] = '\0'; +Py_BEGIN_ALLOW_THREADS + r = UPNP_GetStatusInfo(self->urls.controlURL, self->data.first.servicetype, + status, &uptime, lastconnerror); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("(s,I,s)", status, uptime, lastconnerror); +#else + return Py_BuildValue("(s,i,s)", status, (int)uptime, lastconnerror); +#endif + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +static PyObject * +UPnP_connectiontype(UPnPObject *self) +{ + char connectionType[64]; + int r; + connectionType[0] = '\0'; +Py_BEGIN_ALLOW_THREADS + r = UPNP_GetConnectionTypeInfo(self->urls.controlURL, + self->data.first.servicetype, + connectionType); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { + return Py_BuildValue("s", connectionType); + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +static PyObject * +UPnP_externalipaddress(UPnPObject *self) +{ + char externalIPAddress[40]; + int r; + externalIPAddress[0] = '\0'; +Py_BEGIN_ALLOW_THREADS + r = UPNP_GetExternalIPAddress(self->urls.controlURL, + self->data.first.servicetype, + externalIPAddress); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { + return Py_BuildValue("s", externalIPAddress); + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +/* AddPortMapping(externalPort, protocol, internalHost, internalPort, desc, + * remoteHost) + * protocol is 'UDP' or 'TCP' */ +static PyObject * +UPnP_addportmapping(UPnPObject *self, PyObject *args) +{ + char extPort[6]; + unsigned short ePort; + char inPort[6]; + unsigned short iPort; + const char * proto; + const char * host; + const char * desc; + const char * remoteHost; + const char * leaseDuration = "0"; + int r; + if (!PyArg_ParseTuple(args, "HssHzz", &ePort, &proto, + &host, &iPort, &desc, &remoteHost)) + return NULL; +Py_BEGIN_ALLOW_THREADS + sprintf(extPort, "%hu", ePort); + sprintf(inPort, "%hu", iPort); + r = UPNP_AddPortMapping(self->urls.controlURL, self->data.first.servicetype, + extPort, inPort, host, desc, proto, + remoteHost, leaseDuration); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) + { + Py_RETURN_TRUE; + } + else + { + // TODO: RAISE an Exception. See upnpcommands.h for errors codes. + // upnperrors.c + //Py_RETURN_FALSE; + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +/* AddAnyPortMapping(externalPort, protocol, internalHost, internalPort, desc, + * remoteHost) + * protocol is 'UDP' or 'TCP' */ +static PyObject * +UPnP_addanyportmapping(UPnPObject *self, PyObject *args) +{ + char extPort[6]; + unsigned short ePort; + char inPort[6]; + unsigned short iPort; + char reservedPort[6]; + const char * proto; + const char * host; + const char * desc; + const char * remoteHost; + const char * leaseDuration = "0"; + int r; + if (!PyArg_ParseTuple(args, "HssHzz", &ePort, &proto, &host, &iPort, &desc, &remoteHost)) + return NULL; +Py_BEGIN_ALLOW_THREADS + sprintf(extPort, "%hu", ePort); + sprintf(inPort, "%hu", iPort); + r = UPNP_AddAnyPortMapping(self->urls.controlURL, self->data.first.servicetype, + extPort, inPort, host, desc, proto, + remoteHost, leaseDuration, reservedPort); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { + return Py_BuildValue("i", atoi(reservedPort)); + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + + +/* DeletePortMapping(extPort, proto, removeHost='') + * proto = 'UDP', 'TCP' */ +static PyObject * +UPnP_deleteportmapping(UPnPObject *self, PyObject *args) +{ + char extPort[6]; + unsigned short ePort; + const char * proto; + const char * remoteHost = ""; + int r; + if(!PyArg_ParseTuple(args, "Hs|z", &ePort, &proto, &remoteHost)) + return NULL; +Py_BEGIN_ALLOW_THREADS + sprintf(extPort, "%hu", ePort); + r = UPNP_DeletePortMapping(self->urls.controlURL, self->data.first.servicetype, + extPort, proto, remoteHost); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { + Py_RETURN_TRUE; + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +/* DeletePortMappingRange(extPort, proto, removeHost='') + * proto = 'UDP', 'TCP' */ +static PyObject * +UPnP_deleteportmappingrange(UPnPObject *self, PyObject *args) +{ + char extPortStart[6]; + unsigned short ePortStart; + char extPortEnd[6]; + unsigned short ePortEnd; + const char * proto; + unsigned char manage; + char manageStr[6]; + int r; + if(!PyArg_ParseTuple(args, "HHsb", &ePortStart, &ePortEnd, &proto, &manage)) + return NULL; +Py_BEGIN_ALLOW_THREADS + sprintf(extPortStart, "%hu", ePortStart); + sprintf(extPortEnd, "%hu", ePortEnd); + sprintf(manageStr, "%hu", (unsigned short)manage); + r = UPNP_DeletePortMappingRange(self->urls.controlURL, self->data.first.servicetype, + extPortStart, extPortEnd, proto, manageStr); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { + Py_RETURN_TRUE; + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +static PyObject * +UPnP_getportmappingnumberofentries(UPnPObject *self) +{ + unsigned int n = 0; + int r; +Py_BEGIN_ALLOW_THREADS + r = UPNP_GetPortMappingNumberOfEntries(self->urls.controlURL, + self->data.first.servicetype, + &n); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) { +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("I", n); +#else + return Py_BuildValue("i", (int)n); +#endif + } else { + /* TODO: have our own exception type ! */ + PyErr_SetString(PyExc_Exception, strupnperror(r)); + return NULL; + } +} + +/* GetSpecificPortMapping(ePort, proto, remoteHost='') + * proto = 'UDP' or 'TCP' */ +static PyObject * +UPnP_getspecificportmapping(UPnPObject *self, PyObject *args) +{ + char extPort[6]; + unsigned short ePort; + const char * proto; + const char * remoteHost = ""; + char intClient[40]; + char intPort[6]; + unsigned short iPort; + char desc[80]; + char enabled[4]; + char leaseDuration[16]; + if(!PyArg_ParseTuple(args, "Hs|z", &ePort, &proto, &remoteHost)) + return NULL; + extPort[0] = '\0'; intClient[0] = '\0'; intPort[0] = '\0'; + desc[0] = '\0'; enabled[0] = '\0'; leaseDuration[0] = '\0'; +Py_BEGIN_ALLOW_THREADS + sprintf(extPort, "%hu", ePort); + UPNP_GetSpecificPortMappingEntry(self->urls.controlURL, + self->data.first.servicetype, + extPort, proto, remoteHost, + intClient, intPort, + desc, enabled, leaseDuration); +Py_END_ALLOW_THREADS + if(intClient[0]) + { + iPort = (unsigned short)atoi(intPort); + return Py_BuildValue("(s,H,s,O,i)", + intClient, iPort, desc, + PyBool_FromLong(atoi(enabled)), + atoi(leaseDuration)); + } + else + { + Py_RETURN_NONE; + } +} + +/* GetGenericPortMapping(index) */ +static PyObject * +UPnP_getgenericportmapping(UPnPObject *self, PyObject *args) +{ + int i, r; + char index[8]; + char intClient[40]; + char intPort[6]; + unsigned short iPort; + char extPort[6]; + unsigned short ePort; + char protocol[4]; + char desc[80]; + char enabled[6]; + char rHost[64]; + char duration[16]; /* lease duration */ + unsigned int dur; + if(!PyArg_ParseTuple(args, "i", &i)) + return NULL; +Py_BEGIN_ALLOW_THREADS + snprintf(index, sizeof(index), "%d", i); + rHost[0] = '\0'; enabled[0] = '\0'; + duration[0] = '\0'; desc[0] = '\0'; + extPort[0] = '\0'; intPort[0] = '\0'; intClient[0] = '\0'; + r = UPNP_GetGenericPortMappingEntry(self->urls.controlURL, + self->data.first.servicetype, + index, + extPort, intClient, intPort, + protocol, desc, enabled, rHost, + duration); +Py_END_ALLOW_THREADS + if(r==UPNPCOMMAND_SUCCESS) + { + ePort = (unsigned short)atoi(extPort); + iPort = (unsigned short)atoi(intPort); + dur = (unsigned int)strtoul(duration, 0, 0); +#if (PY_MAJOR_VERSION >= 3) || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 3) + return Py_BuildValue("(H,s,(s,H),s,s,s,I)", + ePort, protocol, intClient, iPort, + desc, enabled, rHost, dur); +#else + return Py_BuildValue("(i,s,(s,i),s,s,s,i)", + (int)ePort, protocol, intClient, (int)iPort, + desc, enabled, rHost, (int)dur); +#endif + } + else + { + Py_RETURN_NONE; + } +} + +/* miniupnpc.UPnP object Method Table */ +static PyMethodDef UPnP_methods[] = { + {"discover", (PyCFunction)UPnP_discover, METH_NOARGS, + "discover UPnP IGD devices on the network" + }, + {"selectigd", (PyCFunction)UPnP_selectigd, METH_NOARGS, + "select a valid UPnP IGD among discovered devices" + }, + {"totalbytesent", (PyCFunction)UPnP_totalbytesent, METH_NOARGS, + "return the total number of bytes sent by UPnP IGD" + }, + {"totalbytereceived", (PyCFunction)UPnP_totalbytereceived, METH_NOARGS, + "return the total number of bytes received by UPnP IGD" + }, + {"totalpacketsent", (PyCFunction)UPnP_totalpacketsent, METH_NOARGS, + "return the total number of packets sent by UPnP IGD" + }, + {"totalpacketreceived", (PyCFunction)UPnP_totalpacketreceived, METH_NOARGS, + "return the total number of packets received by UPnP IGD" + }, + {"statusinfo", (PyCFunction)UPnP_statusinfo, METH_NOARGS, + "return status and uptime" + }, + {"connectiontype", (PyCFunction)UPnP_connectiontype, METH_NOARGS, + "return IGD WAN connection type" + }, + {"externalipaddress", (PyCFunction)UPnP_externalipaddress, METH_NOARGS, + "return external IP address" + }, + {"addportmapping", (PyCFunction)UPnP_addportmapping, METH_VARARGS, + "add a port mapping" + }, + {"addanyportmapping", (PyCFunction)UPnP_addanyportmapping, METH_VARARGS, + "add a port mapping, IGD to select alternative if necessary" + }, + {"deleteportmapping", (PyCFunction)UPnP_deleteportmapping, METH_VARARGS, + "delete a port mapping" + }, + {"deleteportmappingrange", (PyCFunction)UPnP_deleteportmappingrange, METH_VARARGS, + "delete a range of port mappings" + }, + {"getportmappingnumberofentries", (PyCFunction)UPnP_getportmappingnumberofentries, METH_NOARGS, + "-- non standard --" + }, + {"getspecificportmapping", (PyCFunction)UPnP_getspecificportmapping, METH_VARARGS, + "get details about a specific port mapping entry" + }, + {"getgenericportmapping", (PyCFunction)UPnP_getgenericportmapping, METH_VARARGS, + "get all details about the port mapping at index" + }, + {NULL} /* Sentinel */ +}; + +static PyTypeObject UPnPType = { + PyVarObject_HEAD_INIT(NULL, + 0) /*ob_size*/ + "miniupnpc.UPnP", /*tp_name*/ + sizeof(UPnPObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)UPnPObject_dealloc,/*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "UPnP objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + UPnP_methods, /* tp_methods */ + UPnP_members, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)UPnP_init, /* tp_init */ + 0, /* tp_alloc */ +#ifndef _WIN32 + PyType_GenericNew,/*UPnP_new,*/ /* tp_new */ +#else + 0, +#endif +}; + +/* module methods */ +static PyMethodDef miniupnpc_methods[] = { + {NULL} /* Sentinel */ +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "miniupnpc", /* m_name */ + "miniupnpc module.", /* m_doc */ + -1, /* m_size */ + miniupnpc_methods, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; +#endif + +#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ +#define PyMODINIT_FUNC void +#endif + +PyMODINIT_FUNC +#if PY_MAJOR_VERSION >= 3 +PyInit_miniupnpc(void) +#else +initminiupnpc(void) +#endif +{ + PyObject* m; + +#ifdef _WIN32 + /* initialize Winsock. */ + WSADATA wsaData; + int nResult = WSAStartup(MAKEWORD(2,2), &wsaData); + + UPnPType.tp_new = PyType_GenericNew; +#endif + if (PyType_Ready(&UPnPType) < 0) +#if PY_MAJOR_VERSION >= 3 + return 0; +#else + return; +#endif + +#if PY_MAJOR_VERSION >= 3 + m = PyModule_Create(&moduledef); +#else + m = Py_InitModule3("miniupnpc", miniupnpc_methods, + "miniupnpc module."); +#endif + + Py_INCREF(&UPnPType); + PyModule_AddObject(m, "UPnP", (PyObject *)&UPnPType); + +#if PY_MAJOR_VERSION >= 3 + return m; +#endif +} + diff --git a/thirdparty/miniupnpc/miniupnpcstrings.h b/thirdparty/miniupnpc/miniupnpcstrings.h new file mode 100644 index 0000000000..1d5c5882fd --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpcstrings.h @@ -0,0 +1,17 @@ +#ifndef MINIUPNPCSTRINGS_H_INCLUDED +#define MINIUPNPCSTRINGS_H_INCLUDED + +#include <version.h> + +#define OS_STRING VERSION_NAME "/1.0" +#define MINIUPNPC_VERSION_STRING "2.1" + +#if 0 +/* according to "UPnP Device Architecture 1.0" */ +#define UPNP_VERSION_STRING "UPnP/1.0" +#else +/* according to "UPnP Device Architecture 1.1" */ +#define UPNP_VERSION_STRING "UPnP/1.1" +#endif + +#endif diff --git a/thirdparty/miniupnpc/miniupnpctypes.h b/thirdparty/miniupnpc/miniupnpctypes.h new file mode 100644 index 0000000000..307ce39699 --- /dev/null +++ b/thirdparty/miniupnpc/miniupnpctypes.h @@ -0,0 +1,19 @@ +/* $Id: miniupnpctypes.h,v 1.1 2011/02/15 11:10:40 nanard Exp $ */ +/* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org + * Author : Thomas Bernard + * Copyright (c) 2011 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided within this distribution */ +#ifndef MINIUPNPCTYPES_H_INCLUDED +#define MINIUPNPCTYPES_H_INCLUDED + +#if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) +#define UNSIGNED_INTEGER unsigned long long +#define STRTOUI strtoull +#else +#define UNSIGNED_INTEGER unsigned int +#define STRTOUI strtoul +#endif + +#endif + diff --git a/thirdparty/miniupnpc/miniwget.c b/thirdparty/miniupnpc/miniwget.c new file mode 100644 index 0000000000..a46ba76022 --- /dev/null +++ b/thirdparty/miniupnpc/miniwget.c @@ -0,0 +1,662 @@ +/* $Id: miniwget.c,v 1.78 2018/03/13 23:22:18 nanard Exp $ */ +/* Project : miniupnp + * Website : http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#include <io.h> +#define MAXHOSTNAMELEN 64 +#define snprintf _snprintf +#define socklen_t int +#ifndef strncasecmp +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +#define strncasecmp _memicmp +#else /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#define strncasecmp memicmp +#endif /* defined(_MSC_VER) && (_MSC_VER >= 1400) */ +#endif /* #ifndef strncasecmp */ +#else /* #ifdef _WIN32 */ +#include <unistd.h> +#include <sys/param.h> +#if defined(__amigaos__) && !defined(__amigaos4__) +#define socklen_t int +#else /* #if defined(__amigaos__) && !defined(__amigaos4__) */ +#include <sys/select.h> +#endif /* #else defined(__amigaos__) && !defined(__amigaos4__) */ +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <net/if.h> +#include <netdb.h> +#define closesocket close +#include <strings.h> +#endif /* #else _WIN32 */ +#ifdef __GNU__ +#define MAXHOSTNAMELEN 64 +#endif /* __GNU__ */ + +#ifndef MIN +#define MIN(x,y) (((x)<(y))?(x):(y)) +#endif /* MIN */ + + +#include "miniupnpcstrings.h" +#include "miniwget.h" +#include "connecthostport.h" +#include "receivedata.h" + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 64 +#endif + +/* + * Read a HTTP response from a socket. + * Process Content-Length and Transfer-encoding headers. + * return a pointer to the content buffer, which length is saved + * to the length parameter. + */ +void * +getHTTPResponse(SOCKET s, int * size, int * status_code) +{ + char buf[2048]; + int n; + int endofheaders = 0; + int chunked = 0; + int content_length = -1; + unsigned int chunksize = 0; + unsigned int bytestocopy = 0; + /* buffers : */ + char * header_buf; + unsigned int header_buf_len = 2048; + unsigned int header_buf_used = 0; + char * content_buf; + unsigned int content_buf_len = 2048; + unsigned int content_buf_used = 0; + char chunksize_buf[32]; + unsigned int chunksize_buf_index; +#ifdef DEBUG + char * reason_phrase = NULL; + int reason_phrase_len = 0; +#endif + + if(status_code) *status_code = -1; + header_buf = malloc(header_buf_len); + if(header_buf == NULL) + { +#ifdef DEBUG + fprintf(stderr, "%s: Memory allocation error\n", "getHTTPResponse"); +#endif /* DEBUG */ + *size = -1; + return NULL; + } + content_buf = malloc(content_buf_len); + if(content_buf == NULL) + { + free(header_buf); +#ifdef DEBUG + fprintf(stderr, "%s: Memory allocation error\n", "getHTTPResponse"); +#endif /* DEBUG */ + *size = -1; + return NULL; + } + chunksize_buf[0] = '\0'; + chunksize_buf_index = 0; + + while((n = receivedata(s, buf, sizeof(buf), 5000, NULL)) > 0) + { + if(endofheaders == 0) + { + int i; + int linestart=0; + int colon=0; + int valuestart=0; + if(header_buf_used + n > header_buf_len) { + char * tmp = realloc(header_buf, header_buf_used + n); + if(tmp == NULL) { + /* memory allocation error */ + free(header_buf); + free(content_buf); + *size = -1; + return NULL; + } + header_buf = tmp; + header_buf_len = header_buf_used + n; + } + memcpy(header_buf + header_buf_used, buf, n); + header_buf_used += n; + /* search for CR LF CR LF (end of headers) + * recognize also LF LF */ + i = 0; + while(i < ((int)header_buf_used-1) && (endofheaders == 0)) { + if(header_buf[i] == '\r') { + i++; + if(header_buf[i] == '\n') { + i++; + if(i < (int)header_buf_used && header_buf[i] == '\r') { + i++; + if(i < (int)header_buf_used && header_buf[i] == '\n') { + endofheaders = i+1; + } + } + } + } else if(header_buf[i] == '\n') { + i++; + if(header_buf[i] == '\n') { + endofheaders = i+1; + } + } + i++; + } + if(endofheaders == 0) + continue; + /* parse header lines */ + for(i = 0; i < endofheaders - 1; i++) { + if(linestart > 0 && colon <= linestart && header_buf[i]==':') + { + colon = i; + while(i < (endofheaders-1) + && (header_buf[i+1] == ' ' || header_buf[i+1] == '\t')) + i++; + valuestart = i + 1; + } + /* detecting end of line */ + else if(header_buf[i]=='\r' || header_buf[i]=='\n') + { + if(linestart == 0 && status_code) + { + /* Status line + * HTTP-Version SP Status-Code SP Reason-Phrase CRLF */ + int sp; + for(sp = 0; sp < i; sp++) + if(header_buf[sp] == ' ') + { + if(*status_code < 0) + *status_code = atoi(header_buf + sp + 1); + else + { +#ifdef DEBUG + reason_phrase = header_buf + sp + 1; + reason_phrase_len = i - sp - 1; +#endif + break; + } + } +#ifdef DEBUG + printf("HTTP status code = %d, Reason phrase = %.*s\n", + *status_code, reason_phrase_len, reason_phrase); +#endif + } + else if(colon > linestart && valuestart > colon) + { +#ifdef DEBUG + printf("header='%.*s', value='%.*s'\n", + colon-linestart, header_buf+linestart, + i-valuestart, header_buf+valuestart); +#endif + if(0==strncasecmp(header_buf+linestart, "content-length", colon-linestart)) + { + content_length = atoi(header_buf+valuestart); +#ifdef DEBUG + printf("Content-Length: %d\n", content_length); +#endif + } + else if(0==strncasecmp(header_buf+linestart, "transfer-encoding", colon-linestart) + && 0==strncasecmp(header_buf+valuestart, "chunked", 7)) + { +#ifdef DEBUG + printf("chunked transfer-encoding!\n"); +#endif + chunked = 1; + } + } + while((i < (int)header_buf_used) && (header_buf[i]=='\r' || header_buf[i] == '\n')) + i++; + linestart = i; + colon = linestart; + valuestart = 0; + } + } + /* copy the remaining of the received data back to buf */ + n = header_buf_used - endofheaders; + memcpy(buf, header_buf + endofheaders, n); + /* if(headers) */ + } + /* if we get there, endofheaders != 0. + * In the other case, there was a continue above */ + /* content */ + if(chunked) + { + int i = 0; + while(i < n) + { + if(chunksize == 0) + { + /* reading chunk size */ + if(chunksize_buf_index == 0) { + /* skipping any leading CR LF */ + if(i<n && buf[i] == '\r') i++; + if(i<n && buf[i] == '\n') i++; + } + while(i<n && isxdigit(buf[i]) + && chunksize_buf_index < (sizeof(chunksize_buf)-1)) + { + chunksize_buf[chunksize_buf_index++] = buf[i]; + chunksize_buf[chunksize_buf_index] = '\0'; + i++; + } + while(i<n && buf[i] != '\r' && buf[i] != '\n') + i++; /* discarding chunk-extension */ + if(i<n && buf[i] == '\r') i++; + if(i<n && buf[i] == '\n') { + unsigned int j; + for(j = 0; j < chunksize_buf_index; j++) { + if(chunksize_buf[j] >= '0' + && chunksize_buf[j] <= '9') + chunksize = (chunksize << 4) + (chunksize_buf[j] - '0'); + else + chunksize = (chunksize << 4) + ((chunksize_buf[j] | 32) - 'a' + 10); + } + chunksize_buf[0] = '\0'; + chunksize_buf_index = 0; + i++; + } else { + /* not finished to get chunksize */ + continue; + } +#ifdef DEBUG + printf("chunksize = %u (%x)\n", chunksize, chunksize); +#endif + if(chunksize == 0) + { +#ifdef DEBUG + printf("end of HTTP content - %d %d\n", i, n); + /*printf("'%.*s'\n", n-i, buf+i);*/ +#endif + goto end_of_stream; + } + } + /* it is guaranteed that (n >= i) */ + bytestocopy = (chunksize < (unsigned int)(n - i))?chunksize:(unsigned int)(n - i); + if((content_buf_used + bytestocopy) > content_buf_len) + { + char * tmp; + if((content_length >= 0) && ((unsigned int)content_length >= (content_buf_used + bytestocopy))) { + content_buf_len = content_length; + } else { + content_buf_len = content_buf_used + bytestocopy; + } + tmp = realloc(content_buf, content_buf_len); + if(tmp == NULL) { + /* memory allocation error */ + free(content_buf); + free(header_buf); + *size = -1; + return NULL; + } + content_buf = tmp; + } + memcpy(content_buf + content_buf_used, buf + i, bytestocopy); + content_buf_used += bytestocopy; + i += bytestocopy; + chunksize -= bytestocopy; + } + } + else + { + /* not chunked */ + if(content_length > 0 + && (content_buf_used + n) > (unsigned int)content_length) { + /* skipping additional bytes */ + n = content_length - content_buf_used; + } + if(content_buf_used + n > content_buf_len) + { + char * tmp; + if(content_length >= 0 + && (unsigned int)content_length >= (content_buf_used + n)) { + content_buf_len = content_length; + } else { + content_buf_len = content_buf_used + n; + } + tmp = realloc(content_buf, content_buf_len); + if(tmp == NULL) { + /* memory allocation error */ + free(content_buf); + free(header_buf); + *size = -1; + return NULL; + } + content_buf = tmp; + } + memcpy(content_buf + content_buf_used, buf, n); + content_buf_used += n; + } + /* use the Content-Length header value if available */ + if(content_length > 0 && content_buf_used >= (unsigned int)content_length) + { +#ifdef DEBUG + printf("End of HTTP content\n"); +#endif + break; + } + } +end_of_stream: + free(header_buf); header_buf = NULL; + *size = content_buf_used; + if(content_buf_used == 0) + { + free(content_buf); + content_buf = NULL; + } + return content_buf; +} + +/* miniwget3() : + * do all the work. + * Return NULL if something failed. */ +static void * +miniwget3(const char * host, + unsigned short port, const char * path, + int * size, char * addr_str, int addr_str_len, + const char * httpversion, unsigned int scope_id, + int * status_code) +{ + char buf[2048]; + SOCKET s; + int n; + int len; + int sent; + void * content; + + *size = 0; + s = connecthostport(host, port, scope_id); + if(ISINVALID(s)) + return NULL; + + /* get address for caller ! */ + if(addr_str) + { + struct sockaddr_storage saddr; + socklen_t saddrlen; + + saddrlen = sizeof(saddr); + if(getsockname(s, (struct sockaddr *)&saddr, &saddrlen) < 0) + { + perror("getsockname"); + } + else + { +#if defined(__amigaos__) && !defined(__amigaos4__) + /* using INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); + * But his function make a string with the port : nn.nn.nn.nn:port */ +/* if(WSAAddressToStringA((SOCKADDR *)&saddr, sizeof(saddr), + NULL, addr_str, (DWORD *)&addr_str_len)) + { + printf("WSAAddressToStringA() failed : %d\n", WSAGetLastError()); + }*/ + /* the following code is only compatible with ip v4 addresses */ + strncpy(addr_str, inet_ntoa(((struct sockaddr_in *)&saddr)->sin_addr), addr_str_len); +#else +#if 0 + if(saddr.sa_family == AF_INET6) { + inet_ntop(AF_INET6, + &(((struct sockaddr_in6 *)&saddr)->sin6_addr), + addr_str, addr_str_len); + } else { + inet_ntop(AF_INET, + &(((struct sockaddr_in *)&saddr)->sin_addr), + addr_str, addr_str_len); + } +#endif + /* getnameinfo return ip v6 address with the scope identifier + * such as : 2a01:e35:8b2b:7330::%4281128194 */ + n = getnameinfo((const struct sockaddr *)&saddr, saddrlen, + addr_str, addr_str_len, + NULL, 0, + NI_NUMERICHOST | NI_NUMERICSERV); + if(n != 0) { +#ifdef _WIN32 + fprintf(stderr, "getnameinfo() failed : %d\n", n); +#else + fprintf(stderr, "getnameinfo() failed : %s\n", gai_strerror(n)); +#endif + } +#endif + } +#ifdef DEBUG + printf("address miniwget : %s\n", addr_str); +#endif + } + + len = snprintf(buf, sizeof(buf), + "GET %s HTTP/%s\r\n" + "Host: %s:%d\r\n" + "Connection: Close\r\n" + "User-Agent: " OS_STRING ", " UPNP_VERSION_STRING ", MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" + + "\r\n", + path, httpversion, host, port); + if ((unsigned int)len >= sizeof(buf)) + { + closesocket(s); + return NULL; + } + sent = 0; + /* sending the HTTP request */ + while(sent < len) + { + n = send(s, buf+sent, len-sent, 0); + if(n < 0) + { + perror("send"); + closesocket(s); + return NULL; + } + else + { + sent += n; + } + } + content = getHTTPResponse(s, size, status_code); + closesocket(s); + return content; +} + +/* miniwget2() : + * Call miniwget3(); retry with HTTP/1.1 if 1.0 fails. */ +static void * +miniwget2(const char * host, + unsigned short port, const char * path, + int * size, char * addr_str, int addr_str_len, + unsigned int scope_id, int * status_code) +{ + char * respbuffer; + +#if 1 + respbuffer = miniwget3(host, port, path, size, + addr_str, addr_str_len, "1.1", + scope_id, status_code); +#else + respbuffer = miniwget3(host, port, path, size, + addr_str, addr_str_len, "1.0", + scope_id, status_code); + if (*size == 0) + { +#ifdef DEBUG + printf("Retrying with HTTP/1.1\n"); +#endif + free(respbuffer); + respbuffer = miniwget3(host, port, path, size, + addr_str, addr_str_len, "1.1", + scope_id, status_code); + } +#endif + return respbuffer; +} + + + + +/* parseURL() + * arguments : + * url : source string not modified + * hostname : hostname destination string (size of MAXHOSTNAMELEN+1) + * port : port (destination) + * path : pointer to the path part of the URL + * + * Return values : + * 0 - Failure + * 1 - Success */ +int +parseURL(const char * url, + char * hostname, unsigned short * port, + char * * path, unsigned int * scope_id) +{ + char * p1, *p2, *p3; + if(!url) + return 0; + p1 = strstr(url, "://"); + if(!p1) + return 0; + p1 += 3; + if( (url[0]!='h') || (url[1]!='t') + ||(url[2]!='t') || (url[3]!='p')) + return 0; + memset(hostname, 0, MAXHOSTNAMELEN + 1); + if(*p1 == '[') + { + /* IP v6 : http://[2a00:1450:8002::6a]/path/abc */ + char * scope; + scope = strchr(p1, '%'); + p2 = strchr(p1, ']'); + if(p2 && scope && scope < p2 && scope_id) { + /* parse scope */ +#ifdef IF_NAMESIZE + char tmp[IF_NAMESIZE]; + int l; + scope++; + /* "%25" is just '%' in URL encoding */ + if(scope[0] == '2' && scope[1] == '5') + scope += 2; /* skip "25" */ + l = p2 - scope; + if(l >= IF_NAMESIZE) + l = IF_NAMESIZE - 1; + memcpy(tmp, scope, l); + tmp[l] = '\0'; + *scope_id = if_nametoindex(tmp); + if(*scope_id == 0) { + *scope_id = (unsigned int)strtoul(tmp, NULL, 10); + } +#else + /* under windows, scope is numerical */ + char tmp[8]; + int l; + scope++; + /* "%25" is just '%' in URL encoding */ + if(scope[0] == '2' && scope[1] == '5') + scope += 2; /* skip "25" */ + l = p2 - scope; + if(l >= sizeof(tmp)) + l = sizeof(tmp) - 1; + memcpy(tmp, scope, l); + tmp[l] = '\0'; + *scope_id = (unsigned int)strtoul(tmp, NULL, 10); +#endif + } + p3 = strchr(p1, '/'); + if(p2 && p3) + { + p2++; + strncpy(hostname, p1, MIN(MAXHOSTNAMELEN, (int)(p2-p1))); + if(*p2 == ':') + { + *port = 0; + p2++; + while( (*p2 >= '0') && (*p2 <= '9')) + { + *port *= 10; + *port += (unsigned short)(*p2 - '0'); + p2++; + } + } + else + { + *port = 80; + } + *path = p3; + return 1; + } + } + p2 = strchr(p1, ':'); + p3 = strchr(p1, '/'); + if(!p3) + return 0; + if(!p2 || (p2>p3)) + { + strncpy(hostname, p1, MIN(MAXHOSTNAMELEN, (int)(p3-p1))); + *port = 80; + } + else + { + strncpy(hostname, p1, MIN(MAXHOSTNAMELEN, (int)(p2-p1))); + *port = 0; + p2++; + while( (*p2 >= '0') && (*p2 <= '9')) + { + *port *= 10; + *port += (unsigned short)(*p2 - '0'); + p2++; + } + } + *path = p3; + return 1; +} + +void * +miniwget(const char * url, int * size, + unsigned int scope_id, int * status_code) +{ + unsigned short port; + char * path; + /* protocol://host:port/chemin */ + char hostname[MAXHOSTNAMELEN+1]; + *size = 0; + if(!parseURL(url, hostname, &port, &path, &scope_id)) + return NULL; +#ifdef DEBUG + printf("parsed url : hostname='%s' port=%hu path='%s' scope_id=%u\n", + hostname, port, path, scope_id); +#endif + return miniwget2(hostname, port, path, size, 0, 0, scope_id, status_code); +} + +void * +miniwget_getaddr(const char * url, int * size, + char * addr, int addrlen, unsigned int scope_id, + int * status_code) +{ + unsigned short port; + char * path; + /* protocol://host:port/path */ + char hostname[MAXHOSTNAMELEN+1]; + *size = 0; + if(addr) + addr[0] = '\0'; + if(!parseURL(url, hostname, &port, &path, &scope_id)) + return NULL; +#ifdef DEBUG + printf("parsed url : hostname='%s' port=%hu path='%s' scope_id=%u\n", + hostname, port, path, scope_id); +#endif + return miniwget2(hostname, port, path, size, addr, addrlen, scope_id, status_code); +} + diff --git a/thirdparty/miniupnpc/miniwget.h b/thirdparty/miniupnpc/miniwget.h new file mode 100644 index 0000000000..f5572c2544 --- /dev/null +++ b/thirdparty/miniupnpc/miniwget.h @@ -0,0 +1,27 @@ +/* $Id: miniwget.h,v 1.12 2016/01/24 17:24:36 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2016 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#ifndef MINIWGET_H_INCLUDED +#define MINIWGET_H_INCLUDED + +#include "miniupnpc_declspec.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MINIUPNP_LIBSPEC void * miniwget(const char *, int *, unsigned int, int *); + +MINIUPNP_LIBSPEC void * miniwget_getaddr(const char *, int *, char *, int, unsigned int, int *); + +int parseURL(const char *, char *, unsigned short *, char * *, unsigned int *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/miniupnpc/miniwget_private.h b/thirdparty/miniupnpc/miniwget_private.h new file mode 100644 index 0000000000..e4eaac8085 --- /dev/null +++ b/thirdparty/miniupnpc/miniwget_private.h @@ -0,0 +1,15 @@ +/* $Id: miniwget_private.h,v 1.1 2018/04/06 10:17:58 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#ifndef MINIWGET_INTERNAL_H_INCLUDED +#define MINIWGET_INTERNAL_H_INCLUDED + +#include "miniupnpc_socketdef.h" + +void * getHTTPResponse(SOCKET s, int * size, int * status_code); + +#endif diff --git a/thirdparty/miniupnpc/minixml.c b/thirdparty/miniupnpc/minixml.c new file mode 100644 index 0000000000..ed2d3c759c --- /dev/null +++ b/thirdparty/miniupnpc/minixml.c @@ -0,0 +1,231 @@ +/* $Id: minixml.c,v 1.10 2012/03/05 19:42:47 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * minixml.c : the minimum size a xml parser can be ! */ +/* Project : miniupnp + * webpage: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * Author : Thomas Bernard + +Copyright (c) 2005-2017, Thomas BERNARD +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ +#include <string.h> +#include "minixml.h" + +/* parseatt : used to parse the argument list + * return 0 (false) in case of success and -1 (true) if the end + * of the xmlbuffer is reached. */ +static int parseatt(struct xmlparser * p) +{ + const char * attname; + int attnamelen; + const char * attvalue; + int attvaluelen; + while(p->xml < p->xmlend) + { + if(*p->xml=='/' || *p->xml=='>') + return 0; + if( !IS_WHITE_SPACE(*p->xml) ) + { + char sep; + attname = p->xml; + attnamelen = 0; + while(*p->xml!='=' && !IS_WHITE_SPACE(*p->xml) ) + { + attnamelen++; p->xml++; + if(p->xml >= p->xmlend) + return -1; + } + while(*(p->xml++) != '=') + { + if(p->xml >= p->xmlend) + return -1; + } + while(IS_WHITE_SPACE(*p->xml)) + { + p->xml++; + if(p->xml >= p->xmlend) + return -1; + } + sep = *p->xml; + if(sep=='\'' || sep=='\"') + { + p->xml++; + if(p->xml >= p->xmlend) + return -1; + attvalue = p->xml; + attvaluelen = 0; + while(*p->xml != sep) + { + attvaluelen++; p->xml++; + if(p->xml >= p->xmlend) + return -1; + } + } + else + { + attvalue = p->xml; + attvaluelen = 0; + while( !IS_WHITE_SPACE(*p->xml) + && *p->xml != '>' && *p->xml != '/') + { + attvaluelen++; p->xml++; + if(p->xml >= p->xmlend) + return -1; + } + } + /*printf("%.*s='%.*s'\n", + attnamelen, attname, attvaluelen, attvalue);*/ + if(p->attfunc) + p->attfunc(p->data, attname, attnamelen, attvalue, attvaluelen); + } + p->xml++; + } + return -1; +} + +/* parseelt parse the xml stream and + * call the callback functions when needed... */ +static void parseelt(struct xmlparser * p) +{ + int i; + const char * elementname; + while(p->xml < (p->xmlend - 1)) + { + if((p->xml + 4) <= p->xmlend && (0 == memcmp(p->xml, "<!--", 4))) + { + p->xml += 3; + /* ignore comments */ + do + { + p->xml++; + if ((p->xml + 3) >= p->xmlend) + return; + } + while(memcmp(p->xml, "-->", 3) != 0); + p->xml += 3; + } + else if((p->xml)[0]=='<' && (p->xml)[1]!='?') + { + i = 0; elementname = ++p->xml; + while( !IS_WHITE_SPACE(*p->xml) + && (*p->xml!='>') && (*p->xml!='/') + ) + { + i++; p->xml++; + if (p->xml >= p->xmlend) + return; + /* to ignore namespace : */ + if(*p->xml==':') + { + i = 0; + elementname = ++p->xml; + } + } + if(i>0) + { + if(p->starteltfunc) + p->starteltfunc(p->data, elementname, i); + if(parseatt(p)) + return; + if(*p->xml!='/') + { + const char * data; + i = 0; data = ++p->xml; + if (p->xml >= p->xmlend) + return; + while( IS_WHITE_SPACE(*p->xml) ) + { + i++; p->xml++; + if (p->xml >= p->xmlend) + return; + } + /* CDATA are at least 9 + 3 characters long : <![CDATA[ ]]> */ + if((p->xmlend >= (p->xml + (9 + 3))) && (memcmp(p->xml, "<![CDATA[", 9) == 0)) + { + /* CDATA handling */ + p->xml += 9; + data = p->xml; + i = 0; + while(memcmp(p->xml, "]]>", 3) != 0) + { + i++; p->xml++; + if ((p->xml + 3) >= p->xmlend) + return; + } + if(i>0 && p->datafunc) + p->datafunc(p->data, data, i); + while(*p->xml!='<') + { + p->xml++; + if (p->xml >= p->xmlend) + return; + } + } + else + { + while(*p->xml!='<') + { + i++; p->xml++; + if ((p->xml + 1) >= p->xmlend) + return; + } + if(i>0 && p->datafunc && *(p->xml + 1) == '/') + p->datafunc(p->data, data, i); + } + } + } + else if(*p->xml == '/') + { + i = 0; elementname = ++p->xml; + if (p->xml >= p->xmlend) + return; + while((*p->xml != '>')) + { + i++; p->xml++; + if (p->xml >= p->xmlend) + return; + } + if(p->endeltfunc) + p->endeltfunc(p->data, elementname, i); + p->xml++; + } + } + else + { + p->xml++; + } + } +} + +/* the parser must be initialized before calling this function */ +void parsexml(struct xmlparser * parser) +{ + parser->xml = parser->xmlstart; + parser->xmlend = parser->xmlstart + parser->xmlsize; + parseelt(parser); +} + + diff --git a/thirdparty/miniupnpc/minixml.h b/thirdparty/miniupnpc/minixml.h new file mode 100644 index 0000000000..19e6f513bf --- /dev/null +++ b/thirdparty/miniupnpc/minixml.h @@ -0,0 +1,37 @@ +/* $Id: minixml.h,v 1.6 2006/11/30 11:47:21 nanard Exp $ */ +/* minimal xml parser + * + * Project : miniupnp + * Website : http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#ifndef MINIXML_H_INCLUDED +#define MINIXML_H_INCLUDED +#define IS_WHITE_SPACE(c) ((c==' ') || (c=='\t') || (c=='\r') || (c=='\n')) + +/* if a callback function pointer is set to NULL, + * the function is not called */ +struct xmlparser { + const char *xmlstart; + const char *xmlend; + const char *xml; /* pointer to current character */ + int xmlsize; + void * data; + void (*starteltfunc) (void *, const char *, int); + void (*endeltfunc) (void *, const char *, int); + void (*datafunc) (void *, const char *, int); + void (*attfunc) (void *, const char *, int, const char *, int); +}; + +/* parsexml() + * the xmlparser structure must be initialized before the call + * the following structure members have to be initialized : + * xmlstart, xmlsize, data, *func + * xml is for internal usage, xmlend is computed automatically */ +void parsexml(struct xmlparser *); + +#endif + diff --git a/thirdparty/miniupnpc/minixmlvalid.c b/thirdparty/miniupnpc/minixmlvalid.c new file mode 100644 index 0000000000..dad1488122 --- /dev/null +++ b/thirdparty/miniupnpc/minixmlvalid.c @@ -0,0 +1,163 @@ +/* $Id: minixmlvalid.c,v 1.7 2015/07/15 12:41:15 nanard Exp $ */ +/* MiniUPnP Project + * http://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/ + * minixmlvalid.c : + * validation program for the minixml parser + * + * (c) 2006-2011 Thomas Bernard */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "minixml.h" + +/* xml event structure */ +struct event { + enum { ELTSTART, ELTEND, ATT, CHARDATA } type; + const char * data; + int len; +}; + +struct eventlist { + int n; + struct event * events; +}; + +/* compare 2 xml event lists + * return 0 if the two lists are equals */ +int evtlistcmp(struct eventlist * a, struct eventlist * b) +{ + int i; + struct event * ae, * be; + if(a->n != b->n) + { + printf("event number not matching : %d != %d\n", a->n, b->n); + /*return 1;*/ + } + for(i=0; i<a->n; i++) + { + ae = a->events + i; + be = b->events + i; + if( (ae->type != be->type) + ||(ae->len != be->len) + ||memcmp(ae->data, be->data, ae->len)) + { + printf("Found a difference : %d '%.*s' != %d '%.*s'\n", + ae->type, ae->len, ae->data, + be->type, be->len, be->data); + return 1; + } + } + return 0; +} + +/* Test data */ +static const char xmldata[] = +"<xmlroot>\n" +" <elt1 att1=\"attvalue1\" att2=\"attvalue2\">" +"character data" +"</elt1> \n \t" +"<elt1b/>" +"<elt1>\n<![CDATA[ <html>stuff !\n ]]> \n</elt1>\n" +"<elt2a> \t<elt2b>chardata1</elt2b><elt2b> chardata2 </elt2b></elt2a>" +"</xmlroot>"; + +static const struct event evtref[] = +{ + {ELTSTART, "xmlroot", 7}, + {ELTSTART, "elt1", 4}, + /* attributes */ + {CHARDATA, "character data", 14}, + {ELTEND, "elt1", 4}, + {ELTSTART, "elt1b", 5}, + {ELTSTART, "elt1", 4}, + {CHARDATA, " <html>stuff !\n ", 16}, + {ELTEND, "elt1", 4}, + {ELTSTART, "elt2a", 5}, + {ELTSTART, "elt2b", 5}, + {CHARDATA, "chardata1", 9}, + {ELTEND, "elt2b", 5}, + {ELTSTART, "elt2b", 5}, + {CHARDATA, " chardata2 ", 11}, + {ELTEND, "elt2b", 5}, + {ELTEND, "elt2a", 5}, + {ELTEND, "xmlroot", 7} +}; + +void startelt(void * data, const char * p, int l) +{ + struct eventlist * evtlist = data; + struct event * evt; + evt = evtlist->events + evtlist->n; + /*printf("startelt : %.*s\n", l, p);*/ + evt->type = ELTSTART; + evt->data = p; + evt->len = l; + evtlist->n++; +} + +void endelt(void * data, const char * p, int l) +{ + struct eventlist * evtlist = data; + struct event * evt; + evt = evtlist->events + evtlist->n; + /*printf("endelt : %.*s\n", l, p);*/ + evt->type = ELTEND; + evt->data = p; + evt->len = l; + evtlist->n++; +} + +void chardata(void * data, const char * p, int l) +{ + struct eventlist * evtlist = data; + struct event * evt; + evt = evtlist->events + evtlist->n; + /*printf("chardata : '%.*s'\n", l, p);*/ + evt->type = CHARDATA; + evt->data = p; + evt->len = l; + evtlist->n++; +} + +int testxmlparser(const char * xml, int size) +{ + int r; + struct eventlist evtlist; + struct eventlist evtlistref; + struct xmlparser parser; + evtlist.n = 0; + evtlist.events = malloc(sizeof(struct event)*100); + if(evtlist.events == NULL) + { + fprintf(stderr, "Memory allocation error.\n"); + return -1; + } + memset(&parser, 0, sizeof(parser)); + parser.xmlstart = xml; + parser.xmlsize = size; + parser.data = &evtlist; + parser.starteltfunc = startelt; + parser.endeltfunc = endelt; + parser.datafunc = chardata; + parsexml(&parser); + printf("%d events\n", evtlist.n); + /* compare */ + evtlistref.n = sizeof(evtref)/sizeof(struct event); + evtlistref.events = (struct event *)evtref; + r = evtlistcmp(&evtlistref, &evtlist); + free(evtlist.events); + return r; +} + +int main(int argc, char * * argv) +{ + int r; + (void)argc; (void)argv; + + r = testxmlparser(xmldata, sizeof(xmldata)-1); + if(r) + printf("minixml validation test failed\n"); + return r; +} + diff --git a/thirdparty/miniupnpc/portlistingparse.c b/thirdparty/miniupnpc/portlistingparse.c new file mode 100644 index 0000000000..55859f2714 --- /dev/null +++ b/thirdparty/miniupnpc/portlistingparse.c @@ -0,0 +1,172 @@ +/* $Id: portlistingparse.c,v 1.9 2015/07/15 12:41:13 nanard Exp $ */ +/* MiniUPnP project + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * (c) 2011-2016 Thomas Bernard + * This software is subject to the conditions detailed + * in the LICENCE file provided within the distribution */ +#include <string.h> +#include <stdlib.h> +#ifdef DEBUG +#include <stdio.h> +#endif /* DEBUG */ +#include "portlistingparse.h" +#include "minixml.h" + +/* list of the elements */ +static const struct { + const portMappingElt code; + const char * const str; +} elements[] = { + { PortMappingEntry, "PortMappingEntry"}, + { NewRemoteHost, "NewRemoteHost"}, + { NewExternalPort, "NewExternalPort"}, + { NewProtocol, "NewProtocol"}, + { NewInternalPort, "NewInternalPort"}, + { NewInternalClient, "NewInternalClient"}, + { NewEnabled, "NewEnabled"}, + { NewDescription, "NewDescription"}, + { NewLeaseTime, "NewLeaseTime"}, + { PortMappingEltNone, NULL} +}; + +/* Helper function */ +static UNSIGNED_INTEGER +atoui(const char * p, int l) +{ + UNSIGNED_INTEGER r = 0; + while(l > 0 && *p) + { + if(*p >= '0' && *p <= '9') + r = r*10 + (*p - '0'); + else + break; + p++; + l--; + } + return r; +} + +/* Start element handler */ +static void +startelt(void * d, const char * name, int l) +{ + int i; + struct PortMappingParserData * pdata = (struct PortMappingParserData *)d; + pdata->curelt = PortMappingEltNone; + for(i = 0; elements[i].str; i++) + { + if(strlen(elements[i].str) == (size_t)l && memcmp(name, elements[i].str, l) == 0) + { + pdata->curelt = elements[i].code; + break; + } + } + if(pdata->curelt == PortMappingEntry) + { + struct PortMapping * pm; + pm = calloc(1, sizeof(struct PortMapping)); + if(pm == NULL) + { + /* malloc error */ +#ifdef DEBUG + fprintf(stderr, "%s: error allocating memory", + "startelt"); +#endif /* DEBUG */ + return; + } + pm->l_next = pdata->l_head; /* insert in list */ + pdata->l_head = pm; + } +} + +/* End element handler */ +static void +endelt(void * d, const char * name, int l) +{ + struct PortMappingParserData * pdata = (struct PortMappingParserData *)d; + (void)name; + (void)l; + pdata->curelt = PortMappingEltNone; +} + +/* Data handler */ +static void +data(void * d, const char * data, int l) +{ + struct PortMapping * pm; + struct PortMappingParserData * pdata = (struct PortMappingParserData *)d; + pm = pdata->l_head; + if(!pm) + return; + if(l > 63) + l = 63; + switch(pdata->curelt) + { + case NewRemoteHost: + memcpy(pm->remoteHost, data, l); + pm->remoteHost[l] = '\0'; + break; + case NewExternalPort: + pm->externalPort = (unsigned short)atoui(data, l); + break; + case NewProtocol: + if(l > 3) + l = 3; + memcpy(pm->protocol, data, l); + pm->protocol[l] = '\0'; + break; + case NewInternalPort: + pm->internalPort = (unsigned short)atoui(data, l); + break; + case NewInternalClient: + memcpy(pm->internalClient, data, l); + pm->internalClient[l] = '\0'; + break; + case NewEnabled: + pm->enabled = (unsigned char)atoui(data, l); + break; + case NewDescription: + memcpy(pm->description, data, l); + pm->description[l] = '\0'; + break; + case NewLeaseTime: + pm->leaseTime = atoui(data, l); + break; + default: + break; + } +} + + +/* Parse the PortMappingList XML document for IGD version 2 + */ +void +ParsePortListing(const char * buffer, int bufsize, + struct PortMappingParserData * pdata) +{ + struct xmlparser parser; + + memset(pdata, 0, sizeof(struct PortMappingParserData)); + /* init xmlparser */ + parser.xmlstart = buffer; + parser.xmlsize = bufsize; + parser.data = pdata; + parser.starteltfunc = startelt; + parser.endeltfunc = endelt; + parser.datafunc = data; + parser.attfunc = 0; + parsexml(&parser); +} + +void +FreePortListing(struct PortMappingParserData * pdata) +{ + struct PortMapping * pm; + while((pm = pdata->l_head) != NULL) + { + /* remove from list */ + pdata->l_head = pm->l_next; + free(pm); + } +} + diff --git a/thirdparty/miniupnpc/portlistingparse.h b/thirdparty/miniupnpc/portlistingparse.h new file mode 100644 index 0000000000..e3957a3f4c --- /dev/null +++ b/thirdparty/miniupnpc/portlistingparse.h @@ -0,0 +1,65 @@ +/* $Id: portlistingparse.h,v 1.10 2014/11/01 10:37:32 nanard Exp $ */ +/* MiniUPnP project + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * (c) 2011-2015 Thomas Bernard + * This software is subject to the conditions detailed + * in the LICENCE file provided within the distribution */ +#ifndef PORTLISTINGPARSE_H_INCLUDED +#define PORTLISTINGPARSE_H_INCLUDED + +#include "miniupnpc_declspec.h" +/* for the definition of UNSIGNED_INTEGER */ +#include "miniupnpctypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* sample of PortMappingEntry : + <p:PortMappingEntry> + <p:NewRemoteHost>202.233.2.1</p:NewRemoteHost> + <p:NewExternalPort>2345</p:NewExternalPort> + <p:NewProtocol>TCP</p:NewProtocol> + <p:NewInternalPort>2345</p:NewInternalPort> + <p:NewInternalClient>192.168.1.137</p:NewInternalClient> + <p:NewEnabled>1</p:NewEnabled> + <p:NewDescription>dooom</p:NewDescription> + <p:NewLeaseTime>345</p:NewLeaseTime> + </p:PortMappingEntry> + */ +typedef enum { PortMappingEltNone, + PortMappingEntry, NewRemoteHost, + NewExternalPort, NewProtocol, + NewInternalPort, NewInternalClient, + NewEnabled, NewDescription, + NewLeaseTime } portMappingElt; + +struct PortMapping { + struct PortMapping * l_next; /* list next element */ + UNSIGNED_INTEGER leaseTime; + unsigned short externalPort; + unsigned short internalPort; + char remoteHost[64]; + char internalClient[64]; + char description[64]; + char protocol[4]; + unsigned char enabled; +}; + +struct PortMappingParserData { + struct PortMapping * l_head; /* list head */ + portMappingElt curelt; +}; + +MINIUPNP_LIBSPEC void +ParsePortListing(const char * buffer, int bufsize, + struct PortMappingParserData * pdata); + +MINIUPNP_LIBSPEC void +FreePortListing(struct PortMappingParserData * pdata); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/miniupnpc/receivedata.c b/thirdparty/miniupnpc/receivedata.c new file mode 100644 index 0000000000..7b9cc5b778 --- /dev/null +++ b/thirdparty/miniupnpc/receivedata.c @@ -0,0 +1,99 @@ +/* $Id: receivedata.c,v 1.7 2015/11/09 21:51:41 nanard Exp $ */ +/* Project : miniupnp + * Website : http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2011-2014 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +#include <stdio.h> +#include <string.h> +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#else /* _WIN32 */ +#include <unistd.h> +#if defined(__amigaos__) && !defined(__amigaos4__) +#define socklen_t int +#else /* #if defined(__amigaos__) && !defined(__amigaos4__) */ +#include <sys/select.h> +#endif /* #else defined(__amigaos__) && !defined(__amigaos4__) */ +#include <sys/socket.h> +#include <netinet/in.h> +#if !defined(__amigaos__) && !defined(__amigaos4__) +#include <poll.h> +#endif /* !defined(__amigaos__) && !defined(__amigaos4__) */ +#include <errno.h> +#define MINIUPNPC_IGNORE_EINTR +#endif /* _WIN32 */ + +#include "receivedata.h" + +int +receivedata(SOCKET socket, + char * data, int length, + int timeout, unsigned int * scope_id) +{ +#ifdef MINIUPNPC_GET_SRC_ADDR + struct sockaddr_storage src_addr; + socklen_t src_addr_len = sizeof(src_addr); +#endif /* MINIUPNPC_GET_SRC_ADDR */ + int n; +#if !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) + /* using poll */ + struct pollfd fds[1]; /* for the poll */ +#ifdef MINIUPNPC_IGNORE_EINTR + do { +#endif /* MINIUPNPC_IGNORE_EINTR */ + fds[0].fd = socket; + fds[0].events = POLLIN; + n = poll(fds, 1, timeout); +#ifdef MINIUPNPC_IGNORE_EINTR + } while(n < 0 && errno == EINTR); +#endif /* MINIUPNPC_IGNORE_EINTR */ + if(n < 0) { + PRINT_SOCKET_ERROR("poll"); + return -1; + } else if(n == 0) { + /* timeout */ + return 0; + } +#else /* !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) */ + /* using select under _WIN32 and amigaos */ + fd_set socketSet; + TIMEVAL timeval; + FD_ZERO(&socketSet); + FD_SET(socket, &socketSet); + timeval.tv_sec = timeout / 1000; + timeval.tv_usec = (timeout % 1000) * 1000; + n = select(FD_SETSIZE, &socketSet, NULL, NULL, &timeval); + if(n < 0) { + PRINT_SOCKET_ERROR("select"); + return -1; + } else if(n == 0) { + return 0; + } +#endif /* !defined(_WIN32) && !defined(__amigaos__) && !defined(__amigaos4__) */ +#ifdef MINIUPNPC_GET_SRC_ADDR + memset(&src_addr, 0, sizeof(src_addr)); + n = recvfrom(socket, data, length, 0, + (struct sockaddr *)&src_addr, &src_addr_len); +#else /* MINIUPNPC_GET_SRC_ADDR */ + n = recv(socket, data, length, 0); +#endif /* MINIUPNPC_GET_SRC_ADDR */ + if(n<0) { + PRINT_SOCKET_ERROR("recv"); + } +#ifdef MINIUPNPC_GET_SRC_ADDR + if (src_addr.ss_family == AF_INET6) { + const struct sockaddr_in6 * src_addr6 = (struct sockaddr_in6 *)&src_addr; +#ifdef DEBUG + printf("scope_id=%u\n", src_addr6->sin6_scope_id); +#endif /* DEBUG */ + if(scope_id) + *scope_id = src_addr6->sin6_scope_id; + } +#endif /* MINIUPNPC_GET_SRC_ADDR */ + return n; +} + diff --git a/thirdparty/miniupnpc/receivedata.h b/thirdparty/miniupnpc/receivedata.h new file mode 100644 index 0000000000..c9fdc561f8 --- /dev/null +++ b/thirdparty/miniupnpc/receivedata.h @@ -0,0 +1,21 @@ +/* $Id: receivedata.h,v 1.3 2012/06/23 22:34:47 nanard Exp $ */ +/* Project: miniupnp + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * Author: Thomas Bernard + * Copyright (c) 2011-2018 Thomas Bernard + * This software is subjects to the conditions detailed + * in the LICENCE file provided within this distribution */ +#ifndef RECEIVEDATA_H_INCLUDED +#define RECEIVEDATA_H_INCLUDED + +#include "miniupnpc_socketdef.h" + +/* Reads data from the specified socket. + * Returns the number of bytes read if successful, zero if no bytes were + * read or if we timed out. Returns negative if there was an error. */ +int receivedata(SOCKET socket, + char * data, int length, + int timeout, unsigned int * scope_id); + +#endif + diff --git a/thirdparty/miniupnpc/upnpc.c b/thirdparty/miniupnpc/upnpc.c new file mode 100644 index 0000000000..0c65cbe8c0 --- /dev/null +++ b/thirdparty/miniupnpc/upnpc.c @@ -0,0 +1,861 @@ +/* $Id: upnpc.c,v 1.119 2018/03/13 23:34:46 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#ifdef _WIN32 +#include <winsock2.h> +#define snprintf _snprintf +#else +/* for IPPROTO_TCP / IPPROTO_UDP */ +#include <netinet/in.h> +#endif +#include <ctype.h> +#include "miniwget.h" +#include "miniupnpc.h" +#include "upnpcommands.h" +#include "portlistingparse.h" +#include "upnperrors.h" +#include "miniupnpcstrings.h" + +/* protofix() checks if protocol is "UDP" or "TCP" + * returns NULL if not */ +const char * protofix(const char * proto) +{ + static const char proto_tcp[4] = { 'T', 'C', 'P', 0}; + static const char proto_udp[4] = { 'U', 'D', 'P', 0}; + int i, b; + for(i=0, b=1; i<4; i++) + b = b && ( (proto[i] == proto_tcp[i]) + || (proto[i] == (proto_tcp[i] | 32)) ); + if(b) + return proto_tcp; + for(i=0, b=1; i<4; i++) + b = b && ( (proto[i] == proto_udp[i]) + || (proto[i] == (proto_udp[i] | 32)) ); + if(b) + return proto_udp; + return 0; +} + +/* is_int() checks if parameter is an integer or not + * 1 for integer + * 0 for not an integer */ +int is_int(char const* s) +{ + if(s == NULL) + return 0; + while(*s) { + /* #define isdigit(c) ((c) >= '0' && (c) <= '9') */ + if(!isdigit(*s)) + return 0; + s++; + } + return 1; +} + +static void DisplayInfos(struct UPNPUrls * urls, + struct IGDdatas * data) +{ + char externalIPAddress[40]; + char connectionType[64]; + char status[64]; + char lastconnerr[64]; + unsigned int uptime = 0; + unsigned int brUp, brDown; + time_t timenow, timestarted; + int r; + if(UPNP_GetConnectionTypeInfo(urls->controlURL, + data->first.servicetype, + connectionType) != UPNPCOMMAND_SUCCESS) + printf("GetConnectionTypeInfo failed.\n"); + else + printf("Connection Type : %s\n", connectionType); + if(UPNP_GetStatusInfo(urls->controlURL, data->first.servicetype, + status, &uptime, lastconnerr) != UPNPCOMMAND_SUCCESS) + printf("GetStatusInfo failed.\n"); + else + printf("Status : %s, uptime=%us, LastConnectionError : %s\n", + status, uptime, lastconnerr); + if(uptime > 0) { + timenow = time(NULL); + timestarted = timenow - uptime; + printf(" Time started : %s", ctime(×tarted)); + } + if(UPNP_GetLinkLayerMaxBitRates(urls->controlURL_CIF, data->CIF.servicetype, + &brDown, &brUp) != UPNPCOMMAND_SUCCESS) { + printf("GetLinkLayerMaxBitRates failed.\n"); + } else { + printf("MaxBitRateDown : %u bps", brDown); + if(brDown >= 1000000) { + printf(" (%u.%u Mbps)", brDown / 1000000, (brDown / 100000) % 10); + } else if(brDown >= 1000) { + printf(" (%u Kbps)", brDown / 1000); + } + printf(" MaxBitRateUp %u bps", brUp); + if(brUp >= 1000000) { + printf(" (%u.%u Mbps)", brUp / 1000000, (brUp / 100000) % 10); + } else if(brUp >= 1000) { + printf(" (%u Kbps)", brUp / 1000); + } + printf("\n"); + } + r = UPNP_GetExternalIPAddress(urls->controlURL, + data->first.servicetype, + externalIPAddress); + if(r != UPNPCOMMAND_SUCCESS) { + printf("GetExternalIPAddress failed. (errorcode=%d)\n", r); + } else { + printf("ExternalIPAddress = %s\n", externalIPAddress); + } +} + +static void GetConnectionStatus(struct UPNPUrls * urls, + struct IGDdatas * data) +{ + unsigned int bytessent, bytesreceived, packetsreceived, packetssent; + DisplayInfos(urls, data); + bytessent = UPNP_GetTotalBytesSent(urls->controlURL_CIF, data->CIF.servicetype); + bytesreceived = UPNP_GetTotalBytesReceived(urls->controlURL_CIF, data->CIF.servicetype); + packetssent = UPNP_GetTotalPacketsSent(urls->controlURL_CIF, data->CIF.servicetype); + packetsreceived = UPNP_GetTotalPacketsReceived(urls->controlURL_CIF, data->CIF.servicetype); + printf("Bytes: Sent: %8u\tRecv: %8u\n", bytessent, bytesreceived); + printf("Packets: Sent: %8u\tRecv: %8u\n", packetssent, packetsreceived); +} + +static void ListRedirections(struct UPNPUrls * urls, + struct IGDdatas * data) +{ + int r; + int i = 0; + char index[6]; + char intClient[40]; + char intPort[6]; + char extPort[6]; + char protocol[4]; + char desc[80]; + char enabled[6]; + char rHost[64]; + char duration[16]; + /*unsigned int num=0; + UPNP_GetPortMappingNumberOfEntries(urls->controlURL, data->servicetype, &num); + printf("PortMappingNumberOfEntries : %u\n", num);*/ + printf(" i protocol exPort->inAddr:inPort description remoteHost leaseTime\n"); + do { + snprintf(index, 6, "%d", i); + rHost[0] = '\0'; enabled[0] = '\0'; + duration[0] = '\0'; desc[0] = '\0'; + extPort[0] = '\0'; intPort[0] = '\0'; intClient[0] = '\0'; + r = UPNP_GetGenericPortMappingEntry(urls->controlURL, + data->first.servicetype, + index, + extPort, intClient, intPort, + protocol, desc, enabled, + rHost, duration); + if(r==0) + /* + printf("%02d - %s %s->%s:%s\tenabled=%s leaseDuration=%s\n" + " desc='%s' rHost='%s'\n", + i, protocol, extPort, intClient, intPort, + enabled, duration, + desc, rHost); + */ + printf("%2d %s %5s->%s:%-5s '%s' '%s' %s\n", + i, protocol, extPort, intClient, intPort, + desc, rHost, duration); + else + printf("GetGenericPortMappingEntry() returned %d (%s)\n", + r, strupnperror(r)); + i++; + } while(r==0); +} + +static void NewListRedirections(struct UPNPUrls * urls, + struct IGDdatas * data) +{ + int r; + int i = 0; + struct PortMappingParserData pdata; + struct PortMapping * pm; + + memset(&pdata, 0, sizeof(struct PortMappingParserData)); + r = UPNP_GetListOfPortMappings(urls->controlURL, + data->first.servicetype, + "0", + "65535", + "TCP", + "1000", + &pdata); + if(r == UPNPCOMMAND_SUCCESS) + { + printf(" i protocol exPort->inAddr:inPort description remoteHost leaseTime\n"); + for(pm = pdata.l_head; pm != NULL; pm = pm->l_next) + { + printf("%2d %s %5hu->%s:%-5hu '%s' '%s' %u\n", + i, pm->protocol, pm->externalPort, pm->internalClient, + pm->internalPort, + pm->description, pm->remoteHost, + (unsigned)pm->leaseTime); + i++; + } + FreePortListing(&pdata); + } + else + { + printf("GetListOfPortMappings() returned %d (%s)\n", + r, strupnperror(r)); + } + r = UPNP_GetListOfPortMappings(urls->controlURL, + data->first.servicetype, + "0", + "65535", + "UDP", + "1000", + &pdata); + if(r == UPNPCOMMAND_SUCCESS) + { + for(pm = pdata.l_head; pm != NULL; pm = pm->l_next) + { + printf("%2d %s %5hu->%s:%-5hu '%s' '%s' %u\n", + i, pm->protocol, pm->externalPort, pm->internalClient, + pm->internalPort, + pm->description, pm->remoteHost, + (unsigned)pm->leaseTime); + i++; + } + FreePortListing(&pdata); + } + else + { + printf("GetListOfPortMappings() returned %d (%s)\n", + r, strupnperror(r)); + } +} + +/* Test function + * 1 - get connection type + * 2 - get extenal ip address + * 3 - Add port mapping + * 4 - get this port mapping from the IGD */ +static int SetRedirectAndTest(struct UPNPUrls * urls, + struct IGDdatas * data, + const char * iaddr, + const char * iport, + const char * eport, + const char * proto, + const char * leaseDuration, + const char * description, + int addAny) +{ + char externalIPAddress[40]; + char intClient[40]; + char intPort[6]; + char reservedPort[6]; + char duration[16]; + int r; + + if(!iaddr || !iport || !eport || !proto) + { + fprintf(stderr, "Wrong arguments\n"); + return -1; + } + proto = protofix(proto); + if(!proto) + { + fprintf(stderr, "invalid protocol\n"); + return -1; + } + + r = UPNP_GetExternalIPAddress(urls->controlURL, + data->first.servicetype, + externalIPAddress); + if(r!=UPNPCOMMAND_SUCCESS) + printf("GetExternalIPAddress failed.\n"); + else + printf("ExternalIPAddress = %s\n", externalIPAddress); + + if (addAny) { + r = UPNP_AddAnyPortMapping(urls->controlURL, data->first.servicetype, + eport, iport, iaddr, description, + proto, 0, leaseDuration, reservedPort); + if(r==UPNPCOMMAND_SUCCESS) + eport = reservedPort; + else + printf("AddAnyPortMapping(%s, %s, %s) failed with code %d (%s)\n", + eport, iport, iaddr, r, strupnperror(r)); + } else { + r = UPNP_AddPortMapping(urls->controlURL, data->first.servicetype, + eport, iport, iaddr, description, + proto, 0, leaseDuration); + if(r!=UPNPCOMMAND_SUCCESS) { + printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + eport, iport, iaddr, r, strupnperror(r)); + return -2; + } + } + + r = UPNP_GetSpecificPortMappingEntry(urls->controlURL, + data->first.servicetype, + eport, proto, NULL/*remoteHost*/, + intClient, intPort, NULL/*desc*/, + NULL/*enabled*/, duration); + if(r!=UPNPCOMMAND_SUCCESS) { + printf("GetSpecificPortMappingEntry() failed with code %d (%s)\n", + r, strupnperror(r)); + return -2; + } else { + printf("InternalIP:Port = %s:%s\n", intClient, intPort); + printf("external %s:%s %s is redirected to internal %s:%s (duration=%s)\n", + externalIPAddress, eport, proto, intClient, intPort, duration); + } + return 0; +} + +static int +RemoveRedirect(struct UPNPUrls * urls, + struct IGDdatas * data, + const char * eport, + const char * proto, + const char * remoteHost) +{ + int r; + if(!proto || !eport) + { + fprintf(stderr, "invalid arguments\n"); + return -1; + } + proto = protofix(proto); + if(!proto) + { + fprintf(stderr, "protocol invalid\n"); + return -1; + } + r = UPNP_DeletePortMapping(urls->controlURL, data->first.servicetype, eport, proto, remoteHost); + if(r!=UPNPCOMMAND_SUCCESS) { + printf("UPNP_DeletePortMapping() failed with code : %d\n", r); + return -2; + }else { + printf("UPNP_DeletePortMapping() returned : %d\n", r); + } + return 0; +} + +static int +RemoveRedirectRange(struct UPNPUrls * urls, + struct IGDdatas * data, + const char * ePortStart, char const * ePortEnd, + const char * proto, const char * manage) +{ + int r; + + if (!manage) + manage = "0"; + + if(!proto || !ePortStart || !ePortEnd) + { + fprintf(stderr, "invalid arguments\n"); + return -1; + } + proto = protofix(proto); + if(!proto) + { + fprintf(stderr, "protocol invalid\n"); + return -1; + } + r = UPNP_DeletePortMappingRange(urls->controlURL, data->first.servicetype, ePortStart, ePortEnd, proto, manage); + if(r!=UPNPCOMMAND_SUCCESS) { + printf("UPNP_DeletePortMappingRange() failed with code : %d\n", r); + return -2; + }else { + printf("UPNP_DeletePortMappingRange() returned : %d\n", r); + } + return 0; +} + +/* IGD:2, functions for service WANIPv6FirewallControl:1 */ +static void GetFirewallStatus(struct UPNPUrls * urls, struct IGDdatas * data) +{ + unsigned int bytessent, bytesreceived, packetsreceived, packetssent; + int firewallEnabled = 0, inboundPinholeAllowed = 0; + + UPNP_GetFirewallStatus(urls->controlURL_6FC, data->IPv6FC.servicetype, &firewallEnabled, &inboundPinholeAllowed); + printf("FirewallEnabled: %d & Inbound Pinhole Allowed: %d\n", firewallEnabled, inboundPinholeAllowed); + printf("GetFirewallStatus:\n Firewall Enabled: %s\n Inbound Pinhole Allowed: %s\n", (firewallEnabled)? "Yes":"No", (inboundPinholeAllowed)? "Yes":"No"); + + bytessent = UPNP_GetTotalBytesSent(urls->controlURL_CIF, data->CIF.servicetype); + bytesreceived = UPNP_GetTotalBytesReceived(urls->controlURL_CIF, data->CIF.servicetype); + packetssent = UPNP_GetTotalPacketsSent(urls->controlURL_CIF, data->CIF.servicetype); + packetsreceived = UPNP_GetTotalPacketsReceived(urls->controlURL_CIF, data->CIF.servicetype); + printf("Bytes: Sent: %8u\tRecv: %8u\n", bytessent, bytesreceived); + printf("Packets: Sent: %8u\tRecv: %8u\n", packetssent, packetsreceived); +} + +/* Test function + * 1 - Add pinhole + * 2 - Check if pinhole is working from the IGD side */ +static void SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data, + const char * remoteaddr, const char * eport, + const char * intaddr, const char * iport, + const char * proto, const char * lease_time) +{ + char uniqueID[8]; + /*int isWorking = 0;*/ + int r; + char proto_tmp[8]; + + if(!intaddr || !remoteaddr || !iport || !eport || !proto || !lease_time) + { + fprintf(stderr, "Wrong arguments\n"); + return; + } + if(atoi(proto) == 0) + { + const char * protocol; + protocol = protofix(proto); + if(protocol && (strcmp("TCP", protocol) == 0)) + { + snprintf(proto_tmp, sizeof(proto_tmp), "%d", IPPROTO_TCP); + proto = proto_tmp; + } + else if(protocol && (strcmp("UDP", protocol) == 0)) + { + snprintf(proto_tmp, sizeof(proto_tmp), "%d", IPPROTO_UDP); + proto = proto_tmp; + } + else + { + fprintf(stderr, "invalid protocol\n"); + return; + } + } + r = UPNP_AddPinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, remoteaddr, eport, intaddr, iport, proto, lease_time, uniqueID); + if(r!=UPNPCOMMAND_SUCCESS) + printf("AddPinhole([%s]:%s -> [%s]:%s) failed with code %d (%s)\n", + remoteaddr, eport, intaddr, iport, r, strupnperror(r)); + else + { + printf("AddPinhole: ([%s]:%s -> [%s]:%s) / Pinhole ID = %s\n", + remoteaddr, eport, intaddr, iport, uniqueID); + /*r = UPNP_CheckPinholeWorking(urls->controlURL_6FC, data->servicetype_6FC, uniqueID, &isWorking); + if(r!=UPNPCOMMAND_SUCCESS) + printf("CheckPinholeWorking() failed with code %d (%s)\n", r, strupnperror(r)); + printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No");*/ + } +} + +/* Test function + * 1 - Check if pinhole is working from the IGD side + * 2 - Update pinhole */ +static void GetPinholeAndUpdate(struct UPNPUrls * urls, struct IGDdatas * data, + const char * uniqueID, const char * lease_time) +{ + int isWorking = 0; + int r; + + if(!uniqueID || !lease_time) + { + fprintf(stderr, "Wrong arguments\n"); + return; + } + r = UPNP_CheckPinholeWorking(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID, &isWorking); + printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No"); + if(r!=UPNPCOMMAND_SUCCESS) + printf("CheckPinholeWorking() failed with code %d (%s)\n", r, strupnperror(r)); + if(isWorking || r==709) + { + r = UPNP_UpdatePinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID, lease_time); + printf("UpdatePinhole: Pinhole ID = %s with Lease Time: %s\n", uniqueID, lease_time); + if(r!=UPNPCOMMAND_SUCCESS) + printf("UpdatePinhole: ID (%s) failed with code %d (%s)\n", uniqueID, r, strupnperror(r)); + } +} + +/* Test function + * Get pinhole timeout + */ +static void GetPinholeOutboundTimeout(struct UPNPUrls * urls, struct IGDdatas * data, + const char * remoteaddr, const char * eport, + const char * intaddr, const char * iport, + const char * proto) +{ + int timeout = 0; + int r; + + if(!intaddr || !remoteaddr || !iport || !eport || !proto) + { + fprintf(stderr, "Wrong arguments\n"); + return; + } + + r = UPNP_GetOutboundPinholeTimeout(urls->controlURL_6FC, data->IPv6FC.servicetype, remoteaddr, eport, intaddr, iport, proto, &timeout); + if(r!=UPNPCOMMAND_SUCCESS) + printf("GetOutboundPinholeTimeout([%s]:%s -> [%s]:%s) failed with code %d (%s)\n", + intaddr, iport, remoteaddr, eport, r, strupnperror(r)); + else + printf("GetOutboundPinholeTimeout: ([%s]:%s -> [%s]:%s) / Timeout = %d\n", intaddr, iport, remoteaddr, eport, timeout); +} + +static void +GetPinholePackets(struct UPNPUrls * urls, + struct IGDdatas * data, const char * uniqueID) +{ + int r, pinholePackets = 0; + if(!uniqueID) + { + fprintf(stderr, "invalid arguments\n"); + return; + } + r = UPNP_GetPinholePackets(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID, &pinholePackets); + if(r!=UPNPCOMMAND_SUCCESS) + printf("GetPinholePackets() failed with code %d (%s)\n", r, strupnperror(r)); + else + printf("GetPinholePackets: Pinhole ID = %s / PinholePackets = %d\n", uniqueID, pinholePackets); +} + +static void +CheckPinhole(struct UPNPUrls * urls, + struct IGDdatas * data, const char * uniqueID) +{ + int r, isWorking = 0; + if(!uniqueID) + { + fprintf(stderr, "invalid arguments\n"); + return; + } + r = UPNP_CheckPinholeWorking(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID, &isWorking); + if(r!=UPNPCOMMAND_SUCCESS) + printf("CheckPinholeWorking() failed with code %d (%s)\n", r, strupnperror(r)); + else + printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No"); +} + +static void +RemovePinhole(struct UPNPUrls * urls, + struct IGDdatas * data, const char * uniqueID) +{ + int r; + if(!uniqueID) + { + fprintf(stderr, "invalid arguments\n"); + return; + } + r = UPNP_DeletePinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID); + printf("UPNP_DeletePinhole() returned : %d\n", r); +} + + +/* sample upnp client program */ +int main(int argc, char ** argv) +{ + char command = 0; + char ** commandargv = 0; + int commandargc = 0; + struct UPNPDev * devlist = 0; + char lanaddr[64] = "unset"; /* my ip address on the LAN */ + int i; + const char * rootdescurl = 0; + const char * multicastif = 0; + const char * minissdpdpath = 0; + int localport = UPNP_LOCAL_PORT_ANY; + int retcode = 0; + int error = 0; + int ipv6 = 0; + unsigned char ttl = 2; /* defaulting to 2 */ + const char * description = 0; + +#ifdef _WIN32 + WSADATA wsaData; + int nResult = WSAStartup(MAKEWORD(2,2), &wsaData); + if(nResult != NO_ERROR) + { + fprintf(stderr, "WSAStartup() failed.\n"); + return -1; + } +#endif + printf("upnpc : miniupnpc library test client, version %s.\n", MINIUPNPC_VERSION_STRING); + printf(" (c) 2005-2018 Thomas Bernard.\n"); + printf("Go to http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/\n" + "for more information.\n"); + /* command line processing */ + for(i=1; i<argc; i++) + { + if(0 == strcmp(argv[i], "--help") || 0 == strcmp(argv[i], "-h")) + { + command = 0; + break; + } + if(argv[i][0] == '-') + { + if(argv[i][1] == 'u') + rootdescurl = argv[++i]; + else if(argv[i][1] == 'm') + { + multicastif = argv[++i]; + minissdpdpath = ""; /* Disable usage of minissdpd */ + } + else if(argv[i][1] == 'z') + { + char junk; + if(sscanf(argv[++i], "%d%c", &localport, &junk)!=1 || + localport<0 || localport>65535 || + (localport >1 && localport < 1024)) + { + fprintf(stderr, "Invalid localport '%s'\n", argv[i]); + localport = UPNP_LOCAL_PORT_ANY; + break; + } + } + else if(argv[i][1] == 'p') + minissdpdpath = argv[++i]; + else if(argv[i][1] == '6') + ipv6 = 1; + else if(argv[i][1] == 'e') + description = argv[++i]; + else if(argv[i][1] == 't') + ttl = (unsigned char)atoi(argv[++i]); + else + { + command = argv[i][1]; + i++; + commandargv = argv + i; + commandargc = argc - i; + break; + } + } + else + { + fprintf(stderr, "option '%s' invalid\n", argv[i]); + } + } + + if(!command + || (command == 'a' && commandargc<4) + || (command == 'd' && argc<2) + || (command == 'r' && argc<2) + || (command == 'A' && commandargc<6) + || (command == 'U' && commandargc<2) + || (command == 'D' && commandargc<1)) + { + fprintf(stderr, "Usage :\t%s [options] -a ip port external_port protocol [duration]\n\t\tAdd port redirection\n", argv[0]); + fprintf(stderr, " \t%s [options] -d external_port protocol <remote host>\n\t\tDelete port redirection\n", argv[0]); + fprintf(stderr, " \t%s [options] -s\n\t\tGet Connection status\n", argv[0]); + fprintf(stderr, " \t%s [options] -l\n\t\tList redirections\n", argv[0]); + fprintf(stderr, " \t%s [options] -L\n\t\tList redirections (using GetListOfPortMappings (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -n ip port external_port protocol [duration]\n\t\tAdd (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -N external_port_start external_port_end protocol [manage]\n\t\tDelete range of port redirections (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -r port1 [external_port1] protocol1 [port2 [external_port2] protocol2] [...]\n\t\tAdd all redirections to the current host\n", argv[0]); + fprintf(stderr, " \t%s [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time\n\t\tAdd Pinhole (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -U uniqueID new_lease_time\n\t\tUpdate Pinhole (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -C uniqueID\n\t\tCheck if Pinhole is Working (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -K uniqueID\n\t\tGet Number of packets going through the rule (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -D uniqueID\n\t\tDelete Pinhole (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -S\n\t\tGet Firewall status (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -G remote_ip remote_port internal_ip internal_port protocol\n\t\tGet Outbound Pinhole Timeout (for IGD:2 only)\n", argv[0]); + fprintf(stderr, " \t%s [options] -P\n\t\tGet Presentation url\n", argv[0]); + fprintf(stderr, "\nprotocol is UDP or TCP\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -e description : set description for port mapping.\n"); + fprintf(stderr, " -6 : use ip v6 instead of ip v4.\n"); + fprintf(stderr, " -u url : bypass discovery process by providing the XML root description url.\n"); + fprintf(stderr, " -m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.\n"); + fprintf(stderr, " -z localport : SSDP packets local (source) port (1024-65535).\n"); + fprintf(stderr, " -p path : use this path for MiniSSDPd socket.\n"); + fprintf(stderr, " -t ttl : set multicast TTL. Default value is 2.\n"); + return 1; + } + + if( rootdescurl + || (devlist = upnpDiscover(2000, multicastif, minissdpdpath, + localport, ipv6, ttl, &error))) + { + struct UPNPDev * device; + struct UPNPUrls urls; + struct IGDdatas data; + if(devlist) + { + printf("List of UPNP devices found on the network :\n"); + for(device = devlist; device; device = device->pNext) + { + printf(" desc: %s\n st: %s\n\n", + device->descURL, device->st); + } + } + else if(!rootdescurl) + { + printf("upnpDiscover() error code=%d\n", error); + } + i = 1; + if( (rootdescurl && UPNP_GetIGDFromUrl(rootdescurl, &urls, &data, lanaddr, sizeof(lanaddr))) + || (i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)))) + { + switch(i) { + case 1: + printf("Found valid IGD : %s\n", urls.controlURL); + break; + case 2: + printf("Found a (not connected?) IGD : %s\n", urls.controlURL); + printf("Trying to continue anyway\n"); + break; + case 3: + printf("UPnP device found. Is it an IGD ? : %s\n", urls.controlURL); + printf("Trying to continue anyway\n"); + break; + default: + printf("Found device (igd ?) : %s\n", urls.controlURL); + printf("Trying to continue anyway\n"); + } + printf("Local LAN ip address : %s\n", lanaddr); + #if 0 + printf("getting \"%s\"\n", urls.ipcondescURL); + descXML = miniwget(urls.ipcondescURL, &descXMLsize); + if(descXML) + { + /*fwrite(descXML, 1, descXMLsize, stdout);*/ + free(descXML); descXML = NULL; + } + #endif + + switch(command) + { + case 'l': + DisplayInfos(&urls, &data); + ListRedirections(&urls, &data); + break; + case 'L': + NewListRedirections(&urls, &data); + break; + case 'a': + if (SetRedirectAndTest(&urls, &data, + commandargv[0], commandargv[1], + commandargv[2], commandargv[3], + (commandargc > 4)?commandargv[4]:"0", + description, 0) < 0) + retcode = 2; + break; + case 'd': + if (RemoveRedirect(&urls, &data, commandargv[0], commandargv[1], + commandargc > 2 ? commandargv[2] : NULL) < 0) + retcode = 2; + break; + case 'n': /* aNy */ + if (SetRedirectAndTest(&urls, &data, + commandargv[0], commandargv[1], + commandargv[2], commandargv[3], + (commandargc > 4)?commandargv[4]:"0", + description, 1) < 0) + retcode = 2; + break; + case 'N': + if (commandargc < 3) + fprintf(stderr, "too few arguments\n"); + + if (RemoveRedirectRange(&urls, &data, commandargv[0], commandargv[1], commandargv[2], + commandargc > 3 ? commandargv[3] : NULL) < 0) + retcode = 2; + break; + case 's': + GetConnectionStatus(&urls, &data); + break; + case 'r': + i = 0; + while(i<commandargc) + { + if(!is_int(commandargv[i])) { + /* 1st parameter not an integer : error */ + fprintf(stderr, "command -r : %s is not an port number\n", commandargv[i]); + retcode = 1; + break; + } else if(is_int(commandargv[i+1])){ + /* 2nd parameter is an integer : <port> <external_port> <protocol> */ + if (SetRedirectAndTest(&urls, &data, + lanaddr, commandargv[i], + commandargv[i+1], commandargv[i+2], "0", + description, 0) < 0) + retcode = 2; + i+=3; /* 3 parameters parsed */ + } else { + /* 2nd parameter not an integer : <port> <protocol> */ + if (SetRedirectAndTest(&urls, &data, + lanaddr, commandargv[i], + commandargv[i], commandargv[i+1], "0", + description, 0) < 0) + retcode = 2; + i+=2; /* 2 parameters parsed */ + } + } + break; + case 'A': + SetPinholeAndTest(&urls, &data, + commandargv[0], commandargv[1], + commandargv[2], commandargv[3], + commandargv[4], commandargv[5]); + break; + case 'U': + GetPinholeAndUpdate(&urls, &data, + commandargv[0], commandargv[1]); + break; + case 'C': + for(i=0; i<commandargc; i++) + { + CheckPinhole(&urls, &data, commandargv[i]); + } + break; + case 'K': + for(i=0; i<commandargc; i++) + { + GetPinholePackets(&urls, &data, commandargv[i]); + } + break; + case 'D': + for(i=0; i<commandargc; i++) + { + RemovePinhole(&urls, &data, commandargv[i]); + } + break; + case 'S': + GetFirewallStatus(&urls, &data); + break; + case 'G': + GetPinholeOutboundTimeout(&urls, &data, + commandargv[0], commandargv[1], + commandargv[2], commandargv[3], + commandargv[4]); + break; + case 'P': + printf("Presentation URL found:\n"); + printf(" %s\n", data.presentationurl); + break; + default: + fprintf(stderr, "Unknown switch -%c\n", command); + retcode = 1; + } + + FreeUPNPUrls(&urls); + } + else + { + fprintf(stderr, "No valid UPNP Internet Gateway Device found.\n"); + retcode = 1; + } + freeUPNPDevlist(devlist); devlist = 0; + } + else + { + fprintf(stderr, "No IGD UPnP Device found on the network !\n"); + retcode = 1; + } +#ifdef _WIN32 + nResult = WSACleanup(); + if(nResult != NO_ERROR) { + fprintf(stderr, "WSACleanup() failed.\n"); + } +#endif /* _WIN32 */ + return retcode; +} + diff --git a/thirdparty/miniupnpc/upnpcommands.c b/thirdparty/miniupnpc/upnpcommands.c new file mode 100644 index 0000000000..b6a693a93a --- /dev/null +++ b/thirdparty/miniupnpc/upnpcommands.c @@ -0,0 +1,1241 @@ +/* $Id: upnpcommands.c,v 1.49 2018/03/13 23:34:47 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * Project : miniupnp + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided in this distribution. + * */ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "upnpcommands.h" +#include "miniupnpc.h" +#include "portlistingparse.h" +#include "upnpreplyparse.h" + +static UNSIGNED_INTEGER +my_atoui(const char * s) +{ + return s ? ((UNSIGNED_INTEGER)STRTOUI(s, NULL, 0)) : 0; +} + +/* + * */ +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesSent(const char * controlURL, + const char * servicetype) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + unsigned int r = 0; + char * p; + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetTotalBytesSent", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + /*DisplayNameValueList(buffer, bufsize);*/ + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "NewTotalBytesSent"); + r = my_atoui(p); + ClearNameValueList(&pdata); + return r; +} + +/* + * */ +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesReceived(const char * controlURL, + const char * servicetype) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + unsigned int r = 0; + char * p; + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetTotalBytesReceived", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + /*DisplayNameValueList(buffer, bufsize);*/ + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "NewTotalBytesReceived"); + r = my_atoui(p); + ClearNameValueList(&pdata); + return r; +} + +/* + * */ +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsSent(const char * controlURL, + const char * servicetype) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + unsigned int r = 0; + char * p; + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetTotalPacketsSent", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + /*DisplayNameValueList(buffer, bufsize);*/ + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "NewTotalPacketsSent"); + r = my_atoui(p); + ClearNameValueList(&pdata); + return r; +} + +/* + * */ +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsReceived(const char * controlURL, + const char * servicetype) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + unsigned int r = 0; + char * p; + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetTotalPacketsReceived", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + /*DisplayNameValueList(buffer, bufsize);*/ + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "NewTotalPacketsReceived"); + r = my_atoui(p); + ClearNameValueList(&pdata); + return r; +} + +/* UPNP_GetStatusInfo() call the corresponding UPNP method + * returns the current status and uptime */ +MINIUPNP_LIBSPEC int +UPNP_GetStatusInfo(const char * controlURL, + const char * servicetype, + char * status, + unsigned int * uptime, + char * lastconnerror) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + char * p; + char * up; + char * err; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!status && !uptime) + return UPNPCOMMAND_INVALID_ARGS; + + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetStatusInfo", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + /*DisplayNameValueList(buffer, bufsize);*/ + free(buffer); buffer = NULL; + up = GetValueFromNameValueList(&pdata, "NewUptime"); + p = GetValueFromNameValueList(&pdata, "NewConnectionStatus"); + err = GetValueFromNameValueList(&pdata, "NewLastConnectionError"); + if(p && up) + ret = UPNPCOMMAND_SUCCESS; + + if(status) { + if(p){ + strncpy(status, p, 64 ); + status[63] = '\0'; + }else + status[0]= '\0'; + } + + if(uptime) { + if(up) + sscanf(up,"%u",uptime); + else + *uptime = 0; + } + + if(lastconnerror) { + if(err) { + strncpy(lastconnerror, err, 64 ); + lastconnerror[63] = '\0'; + } else + lastconnerror[0] = '\0'; + } + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + ClearNameValueList(&pdata); + return ret; +} + +/* UPNP_GetConnectionTypeInfo() call the corresponding UPNP method + * returns the connection type */ +MINIUPNP_LIBSPEC int +UPNP_GetConnectionTypeInfo(const char * controlURL, + const char * servicetype, + char * connectionType) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + char * p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!connectionType) + return UPNPCOMMAND_INVALID_ARGS; + + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetConnectionTypeInfo", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "NewConnectionType"); + /*p = GetValueFromNameValueList(&pdata, "NewPossibleConnectionTypes");*/ + /* PossibleConnectionTypes will have several values.... */ + if(p) { + strncpy(connectionType, p, 64 ); + connectionType[63] = '\0'; + ret = UPNPCOMMAND_SUCCESS; + } else + connectionType[0] = '\0'; + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + ClearNameValueList(&pdata); + return ret; +} + +/* UPNP_GetLinkLayerMaxBitRate() call the corresponding UPNP method. + * Returns 2 values: Downloadlink bandwidth and Uplink bandwidth. + * One of the values can be null + * Note : GetLinkLayerMaxBitRates belongs to WANPPPConnection:1 only + * We can use the GetCommonLinkProperties from WANCommonInterfaceConfig:1 */ +MINIUPNP_LIBSPEC int +UPNP_GetLinkLayerMaxBitRates(const char * controlURL, + const char * servicetype, + unsigned int * bitrateDown, + unsigned int * bitrateUp) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + char * down; + char * up; + char * p; + + if(!bitrateDown && !bitrateUp) + return UPNPCOMMAND_INVALID_ARGS; + + /* shouldn't we use GetCommonLinkProperties ? */ + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetCommonLinkProperties", 0, &bufsize))) { + /*"GetLinkLayerMaxBitRates", 0, &bufsize);*/ + return UPNPCOMMAND_HTTP_ERROR; + } + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + /*down = GetValueFromNameValueList(&pdata, "NewDownstreamMaxBitRate");*/ + /*up = GetValueFromNameValueList(&pdata, "NewUpstreamMaxBitRate");*/ + down = GetValueFromNameValueList(&pdata, "NewLayer1DownstreamMaxBitRate"); + up = GetValueFromNameValueList(&pdata, "NewLayer1UpstreamMaxBitRate"); + /*GetValueFromNameValueList(&pdata, "NewWANAccessType");*/ + /*GetValueFromNameValueList(&pdata, "NewPhysicalLinkStatus");*/ + if(down && up) + ret = UPNPCOMMAND_SUCCESS; + + if(bitrateDown) { + if(down) + sscanf(down,"%u",bitrateDown); + else + *bitrateDown = 0; + } + + if(bitrateUp) { + if(up) + sscanf(up,"%u",bitrateUp); + else + *bitrateUp = 0; + } + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + ClearNameValueList(&pdata); + return ret; +} + + +/* UPNP_GetExternalIPAddress() call the corresponding UPNP method. + * if the third arg is not null the value is copied to it. + * at least 16 bytes must be available + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR Either an UPnP error code or an unknown error. + * + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + */ +MINIUPNP_LIBSPEC int +UPNP_GetExternalIPAddress(const char * controlURL, + const char * servicetype, + char * extIpAdd) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + char * p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!extIpAdd || !controlURL || !servicetype) + return UPNPCOMMAND_INVALID_ARGS; + + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetExternalIPAddress", 0, &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + /*printf("external ip = %s\n", GetValueFromNameValueList(&pdata, "NewExternalIPAddress") );*/ + p = GetValueFromNameValueList(&pdata, "NewExternalIPAddress"); + if(p) { + strncpy(extIpAdd, p, 16 ); + extIpAdd[15] = '\0'; + ret = UPNPCOMMAND_SUCCESS; + } else + extIpAdd[0] = '\0'; + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_AddPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration) +{ + struct UPNParg * AddPortMappingArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!inPort || !inClient || !proto || !extPort) + return UPNPCOMMAND_INVALID_ARGS; + + AddPortMappingArgs = calloc(9, sizeof(struct UPNParg)); + if(AddPortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + AddPortMappingArgs[0].elt = "NewRemoteHost"; + AddPortMappingArgs[0].val = remoteHost; + AddPortMappingArgs[1].elt = "NewExternalPort"; + AddPortMappingArgs[1].val = extPort; + AddPortMappingArgs[2].elt = "NewProtocol"; + AddPortMappingArgs[2].val = proto; + AddPortMappingArgs[3].elt = "NewInternalPort"; + AddPortMappingArgs[3].val = inPort; + AddPortMappingArgs[4].elt = "NewInternalClient"; + AddPortMappingArgs[4].val = inClient; + AddPortMappingArgs[5].elt = "NewEnabled"; + AddPortMappingArgs[5].val = "1"; + AddPortMappingArgs[6].elt = "NewPortMappingDescription"; + AddPortMappingArgs[6].val = desc?desc:"libminiupnpc"; + AddPortMappingArgs[7].elt = "NewLeaseDuration"; + AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0"; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "AddPortMapping", AddPortMappingArgs, + &bufsize); + free(AddPortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + /*DisplayNameValueList(buffer, bufsize);*/ + /*buffer[bufsize] = '\0';*/ + /*puts(buffer);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) { + /*printf("AddPortMapping errorCode = '%s'\n", resVal); */ + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } else { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration, + char * reservedPort) +{ + struct UPNParg * AddPortMappingArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!inPort || !inClient || !proto || !extPort) + return UPNPCOMMAND_INVALID_ARGS; + + AddPortMappingArgs = calloc(9, sizeof(struct UPNParg)); + if(AddPortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + AddPortMappingArgs[0].elt = "NewRemoteHost"; + AddPortMappingArgs[0].val = remoteHost; + AddPortMappingArgs[1].elt = "NewExternalPort"; + AddPortMappingArgs[1].val = extPort; + AddPortMappingArgs[2].elt = "NewProtocol"; + AddPortMappingArgs[2].val = proto; + AddPortMappingArgs[3].elt = "NewInternalPort"; + AddPortMappingArgs[3].val = inPort; + AddPortMappingArgs[4].elt = "NewInternalClient"; + AddPortMappingArgs[4].val = inClient; + AddPortMappingArgs[5].elt = "NewEnabled"; + AddPortMappingArgs[5].val = "1"; + AddPortMappingArgs[6].elt = "NewPortMappingDescription"; + AddPortMappingArgs[6].val = desc?desc:"libminiupnpc"; + AddPortMappingArgs[7].elt = "NewLeaseDuration"; + AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0"; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "AddAnyPortMapping", AddPortMappingArgs, + &bufsize); + free(AddPortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } else { + char *p; + + p = GetValueFromNameValueList(&pdata, "NewReservedPort"); + if(p) { + strncpy(reservedPort, p, 6); + reservedPort[5] = '\0'; + ret = UPNPCOMMAND_SUCCESS; + } else { + ret = UPNPCOMMAND_INVALID_RESPONSE; + } + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_DeletePortMapping(const char * controlURL, const char * servicetype, + const char * extPort, const char * proto, + const char * remoteHost) +{ + /*struct NameValueParserData pdata;*/ + struct UPNParg * DeletePortMappingArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!extPort || !proto) + return UPNPCOMMAND_INVALID_ARGS; + + DeletePortMappingArgs = calloc(4, sizeof(struct UPNParg)); + if(DeletePortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + DeletePortMappingArgs[0].elt = "NewRemoteHost"; + DeletePortMappingArgs[0].val = remoteHost; + DeletePortMappingArgs[1].elt = "NewExternalPort"; + DeletePortMappingArgs[1].val = extPort; + DeletePortMappingArgs[2].elt = "NewProtocol"; + DeletePortMappingArgs[2].val = proto; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "DeletePortMapping", + DeletePortMappingArgs, &bufsize); + free(DeletePortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } else { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype, + const char * extPortStart, const char * extPortEnd, + const char * proto, + const char * manage) +{ + struct UPNParg * DeletePortMappingArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!extPortStart || !extPortEnd || !proto || !manage) + return UPNPCOMMAND_INVALID_ARGS; + + DeletePortMappingArgs = calloc(5, sizeof(struct UPNParg)); + if(DeletePortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + DeletePortMappingArgs[0].elt = "NewStartPort"; + DeletePortMappingArgs[0].val = extPortStart; + DeletePortMappingArgs[1].elt = "NewEndPort"; + DeletePortMappingArgs[1].val = extPortEnd; + DeletePortMappingArgs[2].elt = "NewProtocol"; + DeletePortMappingArgs[2].val = proto; + DeletePortMappingArgs[3].elt = "NewManage"; + DeletePortMappingArgs[3].val = manage; + + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "DeletePortMappingRange", + DeletePortMappingArgs, &bufsize); + free(DeletePortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } else { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_GetGenericPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * index, + char * extPort, + char * intClient, + char * intPort, + char * protocol, + char * desc, + char * enabled, + char * rHost, + char * duration) +{ + struct NameValueParserData pdata; + struct UPNParg * GetPortMappingArgs; + char * buffer; + int bufsize; + char * p; + int r = UPNPCOMMAND_UNKNOWN_ERROR; + if(!index) + return UPNPCOMMAND_INVALID_ARGS; + intClient[0] = '\0'; + intPort[0] = '\0'; + GetPortMappingArgs = calloc(2, sizeof(struct UPNParg)); + if(GetPortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + GetPortMappingArgs[0].elt = "NewPortMappingIndex"; + GetPortMappingArgs[0].val = index; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetGenericPortMappingEntry", + GetPortMappingArgs, &bufsize); + free(GetPortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + p = GetValueFromNameValueList(&pdata, "NewRemoteHost"); + if(p && rHost) + { + strncpy(rHost, p, 64); + rHost[63] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "NewExternalPort"); + if(p && extPort) + { + strncpy(extPort, p, 6); + extPort[5] = '\0'; + r = UPNPCOMMAND_SUCCESS; + } + p = GetValueFromNameValueList(&pdata, "NewProtocol"); + if(p && protocol) + { + strncpy(protocol, p, 4); + protocol[3] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "NewInternalClient"); + if(p) + { + strncpy(intClient, p, 16); + intClient[15] = '\0'; + r = 0; + } + p = GetValueFromNameValueList(&pdata, "NewInternalPort"); + if(p) + { + strncpy(intPort, p, 6); + intPort[5] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "NewEnabled"); + if(p && enabled) + { + strncpy(enabled, p, 4); + enabled[3] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "NewPortMappingDescription"); + if(p && desc) + { + strncpy(desc, p, 80); + desc[79] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "NewLeaseDuration"); + if(p && duration) + { + strncpy(duration, p, 16); + duration[15] = '\0'; + } + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + r = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &r); + } + ClearNameValueList(&pdata); + return r; +} + +MINIUPNP_LIBSPEC int +UPNP_GetPortMappingNumberOfEntries(const char * controlURL, + const char * servicetype, + unsigned int * numEntries) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + char* p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetPortMappingNumberOfEntries", 0, + &bufsize))) { + return UPNPCOMMAND_HTTP_ERROR; + } +#ifdef DEBUG + DisplayNameValueList(buffer, bufsize); +#endif + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + p = GetValueFromNameValueList(&pdata, "NewPortMappingNumberOfEntries"); + if(numEntries && p) { + *numEntries = 0; + sscanf(p, "%u", numEntries); + ret = UPNPCOMMAND_SUCCESS; + } + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + + ClearNameValueList(&pdata); + return ret; +} + +/* UPNP_GetSpecificPortMappingEntry retrieves an existing port mapping + * the result is returned in the intClient and intPort strings + * please provide 16 and 6 bytes of data */ +MINIUPNP_LIBSPEC int +UPNP_GetSpecificPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * extPort, + const char * proto, + const char * remoteHost, + char * intClient, + char * intPort, + char * desc, + char * enabled, + char * leaseDuration) +{ + struct NameValueParserData pdata; + struct UPNParg * GetPortMappingArgs; + char * buffer; + int bufsize; + char * p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!intPort || !intClient || !extPort || !proto) + return UPNPCOMMAND_INVALID_ARGS; + + GetPortMappingArgs = calloc(4, sizeof(struct UPNParg)); + if(GetPortMappingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + GetPortMappingArgs[0].elt = "NewRemoteHost"; + GetPortMappingArgs[0].val = remoteHost; + GetPortMappingArgs[1].elt = "NewExternalPort"; + GetPortMappingArgs[1].val = extPort; + GetPortMappingArgs[2].elt = "NewProtocol"; + GetPortMappingArgs[2].val = proto; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetSpecificPortMappingEntry", + GetPortMappingArgs, &bufsize); + free(GetPortMappingArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + p = GetValueFromNameValueList(&pdata, "NewInternalClient"); + if(p) { + strncpy(intClient, p, 16); + intClient[15] = '\0'; + ret = UPNPCOMMAND_SUCCESS; + } else + intClient[0] = '\0'; + + p = GetValueFromNameValueList(&pdata, "NewInternalPort"); + if(p) { + strncpy(intPort, p, 6); + intPort[5] = '\0'; + } else + intPort[0] = '\0'; + + p = GetValueFromNameValueList(&pdata, "NewEnabled"); + if(p && enabled) { + strncpy(enabled, p, 4); + enabled[3] = '\0'; + } + + p = GetValueFromNameValueList(&pdata, "NewPortMappingDescription"); + if(p && desc) { + strncpy(desc, p, 80); + desc[79] = '\0'; + } + + p = GetValueFromNameValueList(&pdata, "NewLeaseDuration"); + if(p && leaseDuration) + { + strncpy(leaseDuration, p, 16); + leaseDuration[15] = '\0'; + } + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + + ClearNameValueList(&pdata); + return ret; +} + +/* UPNP_GetListOfPortMappings() + * + * Possible UPNP Error codes : + * 606 Action not Authorized + * 730 PortMappingNotFound - no port mapping is found in the specified range. + * 733 InconsistantParameters - NewStartPort and NewEndPort values are not + * consistent. + */ +MINIUPNP_LIBSPEC int +UPNP_GetListOfPortMappings(const char * controlURL, + const char * servicetype, + const char * startPort, + const char * endPort, + const char * protocol, + const char * numberOfPorts, + struct PortMappingParserData * data) +{ + struct NameValueParserData pdata; + struct UPNParg * GetListOfPortMappingsArgs; + const char * p; + char * buffer; + int bufsize; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!startPort || !endPort || !protocol) + return UPNPCOMMAND_INVALID_ARGS; + + GetListOfPortMappingsArgs = calloc(6, sizeof(struct UPNParg)); + if(GetListOfPortMappingsArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + GetListOfPortMappingsArgs[0].elt = "NewStartPort"; + GetListOfPortMappingsArgs[0].val = startPort; + GetListOfPortMappingsArgs[1].elt = "NewEndPort"; + GetListOfPortMappingsArgs[1].val = endPort; + GetListOfPortMappingsArgs[2].elt = "NewProtocol"; + GetListOfPortMappingsArgs[2].val = protocol; + GetListOfPortMappingsArgs[3].elt = "NewManage"; + GetListOfPortMappingsArgs[3].val = "1"; + GetListOfPortMappingsArgs[4].elt = "NewNumberOfPorts"; + GetListOfPortMappingsArgs[4].val = numberOfPorts?numberOfPorts:"1000"; + + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetListOfPortMappings", + GetListOfPortMappingsArgs, &bufsize); + free(GetListOfPortMappingsArgs); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + /*p = GetValueFromNameValueList(&pdata, "NewPortListing");*/ + /*if(p) { + printf("NewPortListing : %s\n", p); + }*/ + /*printf("NewPortListing(%d chars) : %s\n", + pdata.portListingLength, pdata.portListing);*/ + if(pdata.portListing) + { + /*struct PortMapping * pm; + int i = 0;*/ + ParsePortListing(pdata.portListing, pdata.portListingLength, + data); + ret = UPNPCOMMAND_SUCCESS; + /* + for(pm = data->head.lh_first; pm != NULL; pm = pm->entries.le_next) + { + printf("%2d %s %5hu->%s:%-5hu '%s' '%s'\n", + i, pm->protocol, pm->externalPort, pm->internalClient, + pm->internalPort, + pm->description, pm->remoteHost); + i++; + } + */ + /*FreePortListing(&data);*/ + } + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + ClearNameValueList(&pdata); + + /*printf("%.*s", bufsize, buffer);*/ + + return ret; +} + +/* IGD:2, functions for service WANIPv6FirewallControl:1 */ +MINIUPNP_LIBSPEC int +UPNP_GetFirewallStatus(const char * controlURL, + const char * servicetype, + int * firewallEnabled, + int * inboundPinholeAllowed) +{ + struct NameValueParserData pdata; + char * buffer; + int bufsize; + char * fe, *ipa, *p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!firewallEnabled || !inboundPinholeAllowed) + return UPNPCOMMAND_INVALID_ARGS; + + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetFirewallStatus", 0, &bufsize); + if(!buffer) { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + fe = GetValueFromNameValueList(&pdata, "FirewallEnabled"); + ipa = GetValueFromNameValueList(&pdata, "InboundPinholeAllowed"); + if(ipa && fe) + ret = UPNPCOMMAND_SUCCESS; + if(fe) + *firewallEnabled = my_atoui(fe); + /*else + *firewallEnabled = 0;*/ + if(ipa) + *inboundPinholeAllowed = my_atoui(ipa); + /*else + *inboundPinholeAllowed = 0;*/ + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) + { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + int * opTimeout) +{ + struct UPNParg * GetOutboundPinholeTimeoutArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + char * p; + int ret; + + if(!intPort || !intClient || !proto || !remotePort || !remoteHost) + return UPNPCOMMAND_INVALID_ARGS; + + GetOutboundPinholeTimeoutArgs = calloc(6, sizeof(struct UPNParg)); + if(GetOutboundPinholeTimeoutArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + GetOutboundPinholeTimeoutArgs[0].elt = "RemoteHost"; + GetOutboundPinholeTimeoutArgs[0].val = remoteHost; + GetOutboundPinholeTimeoutArgs[1].elt = "RemotePort"; + GetOutboundPinholeTimeoutArgs[1].val = remotePort; + GetOutboundPinholeTimeoutArgs[2].elt = "Protocol"; + GetOutboundPinholeTimeoutArgs[2].val = proto; + GetOutboundPinholeTimeoutArgs[3].elt = "InternalPort"; + GetOutboundPinholeTimeoutArgs[3].val = intPort; + GetOutboundPinholeTimeoutArgs[4].elt = "InternalClient"; + GetOutboundPinholeTimeoutArgs[4].val = intClient; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetOutboundPinholeTimeout", GetOutboundPinholeTimeoutArgs, &bufsize); + free(GetOutboundPinholeTimeoutArgs); + if(!buffer) + return UPNPCOMMAND_HTTP_ERROR; + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) + { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } + else + { + ret = UPNPCOMMAND_SUCCESS; + p = GetValueFromNameValueList(&pdata, "OutboundPinholeTimeout"); + if(p) + *opTimeout = my_atoui(p); + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_AddPinhole(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + const char * leaseTime, + char * uniqueID) +{ + struct UPNParg * AddPinholeArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + char * p; + int ret; + + if(!intPort || !intClient || !proto || !remoteHost || !remotePort || !leaseTime) + return UPNPCOMMAND_INVALID_ARGS; + + AddPinholeArgs = calloc(7, sizeof(struct UPNParg)); + if(AddPinholeArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + /* RemoteHost can be wilcarded */ + if(strncmp(remoteHost, "empty", 5)==0) + { + AddPinholeArgs[0].elt = "RemoteHost"; + AddPinholeArgs[0].val = ""; + } + else + { + AddPinholeArgs[0].elt = "RemoteHost"; + AddPinholeArgs[0].val = remoteHost; + } + AddPinholeArgs[1].elt = "RemotePort"; + AddPinholeArgs[1].val = remotePort; + AddPinholeArgs[2].elt = "Protocol"; + AddPinholeArgs[2].val = proto; + AddPinholeArgs[3].elt = "InternalPort"; + AddPinholeArgs[3].val = intPort; + if(strncmp(intClient, "empty", 5)==0) + { + AddPinholeArgs[4].elt = "InternalClient"; + AddPinholeArgs[4].val = ""; + } + else + { + AddPinholeArgs[4].elt = "InternalClient"; + AddPinholeArgs[4].val = intClient; + } + AddPinholeArgs[5].elt = "LeaseTime"; + AddPinholeArgs[5].val = leaseTime; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "AddPinhole", AddPinholeArgs, &bufsize); + free(AddPinholeArgs); + if(!buffer) + return UPNPCOMMAND_HTTP_ERROR; + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + p = GetValueFromNameValueList(&pdata, "UniqueID"); + if(p) + { + strncpy(uniqueID, p, 8); + uniqueID[7] = '\0'; + } + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) + { + /*printf("AddPortMapping errorCode = '%s'\n", resVal);*/ + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } + else + { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_UpdatePinhole(const char * controlURL, const char * servicetype, + const char * uniqueID, + const char * leaseTime) +{ + struct UPNParg * UpdatePinholeArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!uniqueID || !leaseTime) + return UPNPCOMMAND_INVALID_ARGS; + + UpdatePinholeArgs = calloc(3, sizeof(struct UPNParg)); + if(UpdatePinholeArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + UpdatePinholeArgs[0].elt = "UniqueID"; + UpdatePinholeArgs[0].val = uniqueID; + UpdatePinholeArgs[1].elt = "NewLeaseTime"; + UpdatePinholeArgs[1].val = leaseTime; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "UpdatePinhole", UpdatePinholeArgs, &bufsize); + free(UpdatePinholeArgs); + if(!buffer) + return UPNPCOMMAND_HTTP_ERROR; + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) + { + /*printf("AddPortMapping errorCode = '%s'\n", resVal); */ + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } + else + { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID) +{ + /*struct NameValueParserData pdata;*/ + struct UPNParg * DeletePinholeArgs; + char * buffer; + int bufsize; + struct NameValueParserData pdata; + const char * resVal; + int ret; + + if(!uniqueID) + return UPNPCOMMAND_INVALID_ARGS; + + DeletePinholeArgs = calloc(2, sizeof(struct UPNParg)); + if(DeletePinholeArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + DeletePinholeArgs[0].elt = "UniqueID"; + DeletePinholeArgs[0].val = uniqueID; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "DeletePinhole", DeletePinholeArgs, &bufsize); + free(DeletePinholeArgs); + if(!buffer) + return UPNPCOMMAND_HTTP_ERROR; + /*DisplayNameValueList(buffer, bufsize);*/ + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + resVal = GetValueFromNameValueList(&pdata, "errorCode"); + if(resVal) + { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(resVal, "%d", &ret); + } + else + { + ret = UPNPCOMMAND_SUCCESS; + } + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype, + const char * uniqueID, int * isWorking) +{ + struct NameValueParserData pdata; + struct UPNParg * CheckPinholeWorkingArgs; + char * buffer; + int bufsize; + char * p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!uniqueID) + return UPNPCOMMAND_INVALID_ARGS; + + CheckPinholeWorkingArgs = calloc(4, sizeof(struct UPNParg)); + if(CheckPinholeWorkingArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + CheckPinholeWorkingArgs[0].elt = "UniqueID"; + CheckPinholeWorkingArgs[0].val = uniqueID; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "CheckPinholeWorking", CheckPinholeWorkingArgs, &bufsize); + free(CheckPinholeWorkingArgs); + if(!buffer) + { + return UPNPCOMMAND_HTTP_ERROR; + } + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + p = GetValueFromNameValueList(&pdata, "IsWorking"); + if(p) + { + *isWorking=my_atoui(p); + ret = UPNPCOMMAND_SUCCESS; + } + else + *isWorking = 0; + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) + { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + + ClearNameValueList(&pdata); + return ret; +} + +MINIUPNP_LIBSPEC int +UPNP_GetPinholePackets(const char * controlURL, const char * servicetype, + const char * uniqueID, int * packets) +{ + struct NameValueParserData pdata; + struct UPNParg * GetPinholePacketsArgs; + char * buffer; + int bufsize; + char * p; + int ret = UPNPCOMMAND_UNKNOWN_ERROR; + + if(!uniqueID) + return UPNPCOMMAND_INVALID_ARGS; + + GetPinholePacketsArgs = calloc(4, sizeof(struct UPNParg)); + if(GetPinholePacketsArgs == NULL) + return UPNPCOMMAND_MEM_ALLOC_ERROR; + GetPinholePacketsArgs[0].elt = "UniqueID"; + GetPinholePacketsArgs[0].val = uniqueID; + buffer = simpleUPnPcommand(-1, controlURL, servicetype, + "GetPinholePackets", GetPinholePacketsArgs, &bufsize); + free(GetPinholePacketsArgs); + if(!buffer) + return UPNPCOMMAND_HTTP_ERROR; + ParseNameValue(buffer, bufsize, &pdata); + free(buffer); buffer = NULL; + + p = GetValueFromNameValueList(&pdata, "PinholePackets"); + if(p) + { + *packets=my_atoui(p); + ret = UPNPCOMMAND_SUCCESS; + } + + p = GetValueFromNameValueList(&pdata, "errorCode"); + if(p) + { + ret = UPNPCOMMAND_UNKNOWN_ERROR; + sscanf(p, "%d", &ret); + } + + ClearNameValueList(&pdata); + return ret; +} + + diff --git a/thirdparty/miniupnpc/upnpcommands.h b/thirdparty/miniupnpc/upnpcommands.h new file mode 100644 index 0000000000..0c6d501666 --- /dev/null +++ b/thirdparty/miniupnpc/upnpcommands.h @@ -0,0 +1,348 @@ +/* $Id: upnpcommands.h,v 1.32 2018/03/13 23:34:47 nanard Exp $ */ +/* Miniupnp project : http://miniupnp.free.fr/ + * Author : Thomas Bernard + * Copyright (c) 2005-2018 Thomas Bernard + * This software is subject to the conditions detailed in the + * LICENCE file provided within this distribution */ +#ifndef UPNPCOMMANDS_H_INCLUDED +#define UPNPCOMMANDS_H_INCLUDED + +#include "miniupnpc_declspec.h" +#include "miniupnpctypes.h" + +/* MiniUPnPc return codes : */ +#define UPNPCOMMAND_SUCCESS (0) +#define UPNPCOMMAND_UNKNOWN_ERROR (-1) +#define UPNPCOMMAND_INVALID_ARGS (-2) +#define UPNPCOMMAND_HTTP_ERROR (-3) +#define UPNPCOMMAND_INVALID_RESPONSE (-4) +#define UPNPCOMMAND_MEM_ALLOC_ERROR (-5) + +#ifdef __cplusplus +extern "C" { +#endif + +struct PortMappingParserData; + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesSent(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalBytesReceived(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsSent(const char * controlURL, + const char * servicetype); + +MINIUPNP_LIBSPEC UNSIGNED_INTEGER +UPNP_GetTotalPacketsReceived(const char * controlURL, + const char * servicetype); + +/* UPNP_GetStatusInfo() + * status and lastconnerror are 64 byte buffers + * Return values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error code */ +MINIUPNP_LIBSPEC int +UPNP_GetStatusInfo(const char * controlURL, + const char * servicetype, + char * status, + unsigned int * uptime, + char * lastconnerror); + +/* UPNP_GetConnectionTypeInfo() + * argument connectionType is a 64 character buffer + * Return Values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error code */ +MINIUPNP_LIBSPEC int +UPNP_GetConnectionTypeInfo(const char * controlURL, + const char * servicetype, + char * connectionType); + +/* UPNP_GetExternalIPAddress() call the corresponding UPNP method. + * if the third arg is not null the value is copied to it. + * at least 16 bytes must be available + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR Either an UPnP error code or an unknown error. + * + * possible UPnP Errors : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. */ +MINIUPNP_LIBSPEC int +UPNP_GetExternalIPAddress(const char * controlURL, + const char * servicetype, + char * extIpAdd); + +/* UPNP_GetLinkLayerMaxBitRates() + * call WANCommonInterfaceConfig:1#GetCommonLinkProperties + * + * return values : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. */ +MINIUPNP_LIBSPEC int +UPNP_GetLinkLayerMaxBitRates(const char* controlURL, + const char* servicetype, + unsigned int * bitrateDown, + unsigned int * bitrateUp); + +/* UPNP_AddPortMapping() + * if desc is NULL, it will be defaulted to "libminiupnpc" + * remoteHost is usually NULL because IGD don't support it. + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR. Either an UPnP error code or an unknown error. + * + * List of possible UPnP errors for AddPortMapping : + * errorCode errorDescription (short) - Description (long) + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization and + * the sender was not authorized. + * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be + * wild-carded + * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded + * 718 ConflictInMappingEntry - The port mapping entry specified conflicts + * with a mapping assigned previously to another client + * 724 SamePortValuesRequired - Internal and External port values + * must be the same + * 725 OnlyPermanentLeasesSupported - The NAT implementation only supports + * permanent lease times on port mappings + * 726 RemoteHostOnlySupportsWildcard - RemoteHost must be a wildcard + * and cannot be a specific IP address or DNS name + * 727 ExternalPortOnlySupportsWildcard - ExternalPort must be a wildcard and + * cannot be a specific port value + * 728 NoPortMapsAvailable - There are not enough free ports available to + * complete port mapping. + * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed + * due to conflict with other mechanisms. + * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded + */ +MINIUPNP_LIBSPEC int +UPNP_AddPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration); + +/* UPNP_AddAnyPortMapping() + * if desc is NULL, it will be defaulted to "libminiupnpc" + * remoteHost is usually NULL because IGD don't support it. + * + * Return values : + * 0 : SUCCESS + * NON ZERO : ERROR. Either an UPnP error code or an unknown error. + * + * List of possible UPnP errors for AddPortMapping : + * errorCode errorDescription (short) - Description (long) + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization and + * the sender was not authorized. + * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be + * wild-carded + * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded + * 728 NoPortMapsAvailable - There are not enough free ports available to + * complete port mapping. + * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed + * due to conflict with other mechanisms. + * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded + */ +MINIUPNP_LIBSPEC int +UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype, + const char * extPort, + const char * inPort, + const char * inClient, + const char * desc, + const char * proto, + const char * remoteHost, + const char * leaseDuration, + char * reservedPort); + +/* UPNP_DeletePortMapping() + * Use same argument values as what was used for AddPortMapping(). + * remoteHost is usually NULL because IGD don't support it. + * Return Values : + * 0 : SUCCESS + * NON ZERO : error. Either an UPnP error code or an undefined error. + * + * List of possible UPnP errors for DeletePortMapping : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 714 NoSuchEntryInArray - The specified value does not exist in the array */ +MINIUPNP_LIBSPEC int +UPNP_DeletePortMapping(const char * controlURL, const char * servicetype, + const char * extPort, const char * proto, + const char * remoteHost); + +/* UPNP_DeletePortRangeMapping() + * Use same argument values as what was used for AddPortMapping(). + * remoteHost is usually NULL because IGD don't support it. + * Return Values : + * 0 : SUCCESS + * NON ZERO : error. Either an UPnP error code or an undefined error. + * + * List of possible UPnP errors for DeletePortMapping : + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 730 PortMappingNotFound - This error message is returned if no port + * mapping is found in the specified range. + * 733 InconsistentParameters - NewStartPort and NewEndPort values are not consistent. */ +MINIUPNP_LIBSPEC int +UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype, + const char * extPortStart, const char * extPortEnd, + const char * proto, + const char * manage); + +/* UPNP_GetPortMappingNumberOfEntries() + * not supported by all routers */ +MINIUPNP_LIBSPEC int +UPNP_GetPortMappingNumberOfEntries(const char* controlURL, + const char* servicetype, + unsigned int * num); + +/* UPNP_GetSpecificPortMappingEntry() + * retrieves an existing port mapping + * params : + * in extPort + * in proto + * in remoteHost + * out intClient (16 bytes) + * out intPort (6 bytes) + * out desc (80 bytes) + * out enabled (4 bytes) + * out leaseDuration (16 bytes) + * + * return value : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. + * + * List of possible UPnP errors for _GetSpecificPortMappingEntry : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 501 Action Failed - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 714 NoSuchEntryInArray - The specified value does not exist in the array. + */ +MINIUPNP_LIBSPEC int +UPNP_GetSpecificPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * extPort, + const char * proto, + const char * remoteHost, + char * intClient, + char * intPort, + char * desc, + char * enabled, + char * leaseDuration); + +/* UPNP_GetGenericPortMappingEntry() + * params : + * in index + * out extPort (6 bytes) + * out intClient (16 bytes) + * out intPort (6 bytes) + * out protocol (4 bytes) + * out desc (80 bytes) + * out enabled (4 bytes) + * out rHost (64 bytes) + * out duration (16 bytes) + * + * return value : + * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR + * or a UPnP Error Code. + * + * Possible UPNP Error codes : + * 402 Invalid Args - See UPnP Device Architecture section on Control. + * 606 Action not authorized - The action requested REQUIRES authorization + * and the sender was not authorized. + * 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds + */ +MINIUPNP_LIBSPEC int +UPNP_GetGenericPortMappingEntry(const char * controlURL, + const char * servicetype, + const char * index, + char * extPort, + char * intClient, + char * intPort, + char * protocol, + char * desc, + char * enabled, + char * rHost, + char * duration); + +/* UPNP_GetListOfPortMappings() Available in IGD v2 + * + * + * Possible UPNP Error codes : + * 606 Action not Authorized + * 730 PortMappingNotFound - no port mapping is found in the specified range. + * 733 InconsistantParameters - NewStartPort and NewEndPort values are not + * consistent. + */ +MINIUPNP_LIBSPEC int +UPNP_GetListOfPortMappings(const char * controlURL, + const char * servicetype, + const char * startPort, + const char * endPort, + const char * protocol, + const char * numberOfPorts, + struct PortMappingParserData * data); + +/* IGD:2, functions for service WANIPv6FirewallControl:1 */ +MINIUPNP_LIBSPEC int +UPNP_GetFirewallStatus(const char * controlURL, + const char * servicetype, + int * firewallEnabled, + int * inboundPinholeAllowed); + +MINIUPNP_LIBSPEC int +UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + int * opTimeout); + +MINIUPNP_LIBSPEC int +UPNP_AddPinhole(const char * controlURL, const char * servicetype, + const char * remoteHost, + const char * remotePort, + const char * intClient, + const char * intPort, + const char * proto, + const char * leaseTime, + char * uniqueID); + +MINIUPNP_LIBSPEC int +UPNP_UpdatePinhole(const char * controlURL, const char * servicetype, + const char * uniqueID, + const char * leaseTime); + +MINIUPNP_LIBSPEC int +UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID); + +MINIUPNP_LIBSPEC int +UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype, + const char * uniqueID, int * isWorking); + +MINIUPNP_LIBSPEC int +UPNP_GetPinholePackets(const char * controlURL, const char * servicetype, + const char * uniqueID, int * packets); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/thirdparty/miniupnpc/upnpdev.c b/thirdparty/miniupnpc/upnpdev.c new file mode 100644 index 0000000000..d89a9934c3 --- /dev/null +++ b/thirdparty/miniupnpc/upnpdev.c @@ -0,0 +1,23 @@ +/* $Id: upnpdev.c,v 1.1 2015/08/28 12:14:19 nanard Exp $ */ +/* Project : miniupnp + * Web : http://miniupnp.free.fr/ + * Author : Thomas BERNARD + * copyright (c) 2005-2015 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENSE file. */ +#include <stdlib.h> +#include "upnpdev.h" + +/* freeUPNPDevlist() should be used to + * free the chained list returned by upnpDiscover() */ +void freeUPNPDevlist(struct UPNPDev * devlist) +{ + struct UPNPDev * next; + while(devlist) + { + next = devlist->pNext; + free(devlist); + devlist = next; + } +} + diff --git a/thirdparty/miniupnpc/upnpdev.h b/thirdparty/miniupnpc/upnpdev.h new file mode 100644 index 0000000000..f4ae174426 --- /dev/null +++ b/thirdparty/miniupnpc/upnpdev.h @@ -0,0 +1,36 @@ +/* $Id: upnpdev.h,v 1.1 2015/08/28 12:14:19 nanard Exp $ */ +/* Project : miniupnp + * Web : http://miniupnp.free.fr/ + * Author : Thomas BERNARD + * copyright (c) 2005-2018 Thomas Bernard + * This software is subjet to the conditions detailed in the + * provided LICENSE file. */ +#ifndef UPNPDEV_H_INCLUDED +#define UPNPDEV_H_INCLUDED + +#include "miniupnpc_declspec.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct UPNPDev { + struct UPNPDev * pNext; + char * descURL; + char * st; + char * usn; + unsigned int scope_id; + char buffer[3]; +}; + +/* freeUPNPDevlist() + * free list returned by upnpDiscover() */ +MINIUPNP_LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist); + + +#ifdef __cplusplus +} +#endif + + +#endif /* UPNPDEV_H_INCLUDED */ diff --git a/thirdparty/miniupnpc/upnperrors.c b/thirdparty/miniupnpc/upnperrors.c new file mode 100644 index 0000000000..40a2e7857f --- /dev/null +++ b/thirdparty/miniupnpc/upnperrors.c @@ -0,0 +1,107 @@ +/* $Id: upnperrors.c,v 1.5 2011/04/10 11:19:36 nanard Exp $ */ +/* Project : miniupnp + * Author : Thomas BERNARD + * copyright (c) 2007 Thomas Bernard + * All Right reserved. + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * This software is subjet to the conditions detailed in the + * provided LICENCE file. */ +#include <string.h> +#include "upnperrors.h" +#include "upnpcommands.h" +#include "miniupnpc.h" + +const char * strupnperror(int err) +{ + const char * s = NULL; + switch(err) { + case UPNPCOMMAND_SUCCESS: + s = "Success"; + break; + case UPNPCOMMAND_UNKNOWN_ERROR: + s = "Miniupnpc Unknown Error"; + break; + case UPNPCOMMAND_INVALID_ARGS: + s = "Miniupnpc Invalid Arguments"; + break; + case UPNPCOMMAND_INVALID_RESPONSE: + s = "Miniupnpc Invalid response"; + break; + case UPNPDISCOVER_SOCKET_ERROR: + s = "Miniupnpc Socket error"; + break; + case UPNPDISCOVER_MEMORY_ERROR: + s = "Miniupnpc Memory allocation error"; + break; + case 401: + s = "Invalid Action"; + break; + case 402: + s = "Invalid Args"; + break; + case 501: + s = "Action Failed"; + break; + case 606: + s = "Action not authorized"; + break; + case 701: + s = "PinholeSpaceExhausted"; + break; + case 702: + s = "FirewallDisabled"; + break; + case 703: + s = "InboundPinholeNotAllowed"; + break; + case 704: + s = "NoSuchEntry"; + break; + case 705: + s = "ProtocolNotSupported"; + break; + case 706: + s = "InternalPortWildcardingNotAllowed"; + break; + case 707: + s = "ProtocolWildcardingNotAllowed"; + break; + case 708: + s = "WildcardNotPermittedInSrcIP"; + break; + case 709: + s = "NoPacketSent"; + break; + case 713: + s = "SpecifiedArrayIndexInvalid"; + break; + case 714: + s = "NoSuchEntryInArray"; + break; + case 715: + s = "WildCardNotPermittedInSrcIP"; + break; + case 716: + s = "WildCardNotPermittedInExtPort"; + break; + case 718: + s = "ConflictInMappingEntry"; + break; + case 724: + s = "SamePortValuesRequired"; + break; + case 725: + s = "OnlyPermanentLeasesSupported"; + break; + case 726: + s = "RemoteHostOnlySupportsWildcard"; + break; + case 727: + s = "ExternalPortOnlySupportsWildcard"; + break; + default: + s = "UnknownError"; + break; + } + return s; +} diff --git a/thirdparty/miniupnpc/upnperrors.h b/thirdparty/miniupnpc/upnperrors.h new file mode 100644 index 0000000000..8499d9a1c9 --- /dev/null +++ b/thirdparty/miniupnpc/upnperrors.h @@ -0,0 +1,26 @@ +/* $Id: upnperrors.h,v 1.2 2008/07/02 23:31:15 nanard Exp $ */ +/* (c) 2007-2015 Thomas Bernard + * All rights reserved. + * MiniUPnP Project. + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * This software is subjet to the conditions detailed in the + * provided LICENCE file. */ +#ifndef UPNPERRORS_H_INCLUDED +#define UPNPERRORS_H_INCLUDED + +#include "miniupnpc_declspec.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* strupnperror() + * Return a string description of the UPnP error code + * or NULL for undefinded errors */ +MINIUPNP_LIBSPEC const char * strupnperror(int err); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/miniupnpc/upnpreplyparse.c b/thirdparty/miniupnpc/upnpreplyparse.c new file mode 100644 index 0000000000..68a47c0278 --- /dev/null +++ b/thirdparty/miniupnpc/upnpreplyparse.c @@ -0,0 +1,196 @@ +/* $Id: upnpreplyparse.c,v 1.19 2015/07/15 10:29:11 nanard Exp $ */ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * MiniUPnP project + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * (c) 2006-2017 Thomas Bernard + * This software is subject to the conditions detailed + * in the LICENCE file provided within the distribution */ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include "upnpreplyparse.h" +#include "minixml.h" + +static void +NameValueParserStartElt(void * d, const char * name, int l) +{ + struct NameValueParserData * data = (struct NameValueParserData *)d; + data->topelt = 1; + if(l>63) + l = 63; + memcpy(data->curelt, name, l); + data->curelt[l] = '\0'; + data->cdata = NULL; + data->cdatalen = 0; +} + +static void +NameValueParserEndElt(void * d, const char * name, int namelen) +{ + struct NameValueParserData * data = (struct NameValueParserData *)d; + struct NameValue * nv; + (void)name; + (void)namelen; + if(!data->topelt) + return; + if(strcmp(data->curelt, "NewPortListing") != 0) + { + int l; + /* standard case. Limited to n chars strings */ + l = data->cdatalen; + nv = malloc(sizeof(struct NameValue)); + if(nv == NULL) + { + /* malloc error */ +#ifdef DEBUG + fprintf(stderr, "%s: error allocating memory", + "NameValueParserEndElt"); +#endif /* DEBUG */ + return; + } + if(l>=(int)sizeof(nv->value)) + l = sizeof(nv->value) - 1; + strncpy(nv->name, data->curelt, 64); + nv->name[63] = '\0'; + if(data->cdata != NULL) + { + memcpy(nv->value, data->cdata, l); + nv->value[l] = '\0'; + } + else + { + nv->value[0] = '\0'; + } + nv->l_next = data->l_head; /* insert in list */ + data->l_head = nv; + } + data->cdata = NULL; + data->cdatalen = 0; + data->topelt = 0; +} + +static void +NameValueParserGetData(void * d, const char * datas, int l) +{ + struct NameValueParserData * data = (struct NameValueParserData *)d; + if(strcmp(data->curelt, "NewPortListing") == 0) + { + /* specific case for NewPortListing which is a XML Document */ + data->portListing = malloc(l + 1); + if(!data->portListing) + { + /* malloc error */ +#ifdef DEBUG + fprintf(stderr, "%s: error allocating memory", + "NameValueParserGetData"); +#endif /* DEBUG */ + return; + } + memcpy(data->portListing, datas, l); + data->portListing[l] = '\0'; + data->portListingLength = l; + } + else + { + /* standard case. */ + data->cdata = datas; + data->cdatalen = l; + } +} + +void +ParseNameValue(const char * buffer, int bufsize, + struct NameValueParserData * data) +{ + struct xmlparser parser; + memset(data, 0, sizeof(struct NameValueParserData)); + /* init xmlparser object */ + parser.xmlstart = buffer; + parser.xmlsize = bufsize; + parser.data = data; + parser.starteltfunc = NameValueParserStartElt; + parser.endeltfunc = NameValueParserEndElt; + parser.datafunc = NameValueParserGetData; + parser.attfunc = 0; + parsexml(&parser); +} + +void +ClearNameValueList(struct NameValueParserData * pdata) +{ + struct NameValue * nv; + if(pdata->portListing) + { + free(pdata->portListing); + pdata->portListing = NULL; + pdata->portListingLength = 0; + } + while((nv = pdata->l_head) != NULL) + { + pdata->l_head = nv->l_next; + free(nv); + } +} + +char * +GetValueFromNameValueList(struct NameValueParserData * pdata, + const char * Name) +{ + struct NameValue * nv; + char * p = NULL; + for(nv = pdata->l_head; + (nv != NULL) && (p == NULL); + nv = nv->l_next) + { + if(strcmp(nv->name, Name) == 0) + p = nv->value; + } + return p; +} + +#if 0 +/* useless now that minixml ignores namespaces by itself */ +char * +GetValueFromNameValueListIgnoreNS(struct NameValueParserData * pdata, + const char * Name) +{ + struct NameValue * nv; + char * p = NULL; + char * pname; + for(nv = pdata->head.lh_first; + (nv != NULL) && (p == NULL); + nv = nv->entries.le_next) + { + pname = strrchr(nv->name, ':'); + if(pname) + pname++; + else + pname = nv->name; + if(strcmp(pname, Name)==0) + p = nv->value; + } + return p; +} +#endif + +/* debug all-in-one function + * do parsing then display to stdout */ +#ifdef DEBUG +void +DisplayNameValueList(char * buffer, int bufsize) +{ + struct NameValueParserData pdata; + struct NameValue * nv; + ParseNameValue(buffer, bufsize, &pdata); + for(nv = pdata.l_head; + nv != NULL; + nv = nv->l_next) + { + printf("%s = %s\n", nv->name, nv->value); + } + ClearNameValueList(&pdata); +} +#endif /* DEBUG */ + diff --git a/thirdparty/miniupnpc/upnpreplyparse.h b/thirdparty/miniupnpc/upnpreplyparse.h new file mode 100644 index 0000000000..6badd15b26 --- /dev/null +++ b/thirdparty/miniupnpc/upnpreplyparse.h @@ -0,0 +1,63 @@ +/* $Id: upnpreplyparse.h,v 1.19 2014/10/27 16:33:19 nanard Exp $ */ +/* MiniUPnP project + * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ + * (c) 2006-2013 Thomas Bernard + * This software is subject to the conditions detailed + * in the LICENCE file provided within the distribution */ + +#ifndef UPNPREPLYPARSE_H_INCLUDED +#define UPNPREPLYPARSE_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + +struct NameValue { + struct NameValue * l_next; + char name[64]; + char value[128]; +}; + +struct NameValueParserData { + struct NameValue * l_head; + char curelt[64]; + char * portListing; + int portListingLength; + int topelt; + const char * cdata; + int cdatalen; +}; + +/* ParseNameValue() */ +void +ParseNameValue(const char * buffer, int bufsize, + struct NameValueParserData * data); + +/* ClearNameValueList() */ +void +ClearNameValueList(struct NameValueParserData * pdata); + +/* GetValueFromNameValueList() */ +char * +GetValueFromNameValueList(struct NameValueParserData * pdata, + const char * Name); + +#if 0 +/* GetValueFromNameValueListIgnoreNS() */ +char * +GetValueFromNameValueListIgnoreNS(struct NameValueParserData * pdata, + const char * Name); +#endif + +/* DisplayNameValueList() */ +#ifdef DEBUG +void +DisplayNameValueList(char * buffer, int bufsize); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + |