diff options
author | Yaco <franco@reevo.org> | 2019-01-06 01:26:56 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2019-01-06 01:26:56 -0300 |
commit | 7f758b8eb3e0dc81aa27aba21dded2b2f1cca0c3 (patch) | |
tree | f53fea31875e09a68043b5c6c272dd6b0d1ff2f1 /www/wiki/extensions | |
parent | f8b67f7d649de1785393f026a3f3eed463b5238b (diff) |
agrega extensiones faltantes
Diffstat (limited to 'www/wiki/extensions')
257 files changed, 10356 insertions, 0 deletions
diff --git a/www/wiki/extensions/DataTransfer/COPYING b/www/wiki/extensions/DataTransfer/COPYING new file mode 100644 index 00000000..a8659280 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/COPYING @@ -0,0 +1,348 @@ +The license text below "----" applies to all files within this distribution, other +than those that are in a directory which contains files named "LICENSE" or +"COPYING", or a subdirectory thereof. For those files, the license text contained in +said file overrides any license information contained in directories of smaller depth. +Alternative licenses are typically used for software that is provided by external +parties, and merely packaged with the Data Transfer release for convenience. +---- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +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 Program or any portion +of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +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 Program, 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 Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) 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; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, 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 executable. However, as a +special exception, the source code 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. + +If distribution of executable or 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 counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program 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. + + 5. 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 Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program 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 to +this License. + + 7. 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 Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program 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 Program. + +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. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program 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. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies 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 Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, 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 + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +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 program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/www/wiki/extensions/DataTransfer/DataTransfer.i18n.alias.php b/www/wiki/extensions/DataTransfer/DataTransfer.i18n.alias.php new file mode 100644 index 00000000..56edd9ef --- /dev/null +++ b/www/wiki/extensions/DataTransfer/DataTransfer.i18n.alias.php @@ -0,0 +1,411 @@ +<?php +/** + * Aliases for special pages + * + * @file + * @ingroup Extensions + */ + +$specialPageAliases = array(); + +/** English (English) */ +$specialPageAliases['en'] = array( + 'ImportCSV' => array( 'ImportCSV' ), + 'ImportXML' => array( 'ImportXML' ), + 'ImportSpreadsheet' => array( 'ImportSpreadsheet' ), + 'ViewXML' => array( 'ViewXML' ), +); + +/** Afrikaans (Afrikaans) */ +$specialPageAliases['af'] = array( + 'ViewXML' => array( 'WysXML' ), +); + +/** Arabic (العربية) */ +$specialPageAliases['ar'] = array( + 'ImportCSV' => array( 'استيراد_سي_إس_في' ), + 'ImportXML' => array( 'استيراد_إكس_إم_إل' ), + 'ViewXML' => array( 'عرض_إكس_إم_إل' ), +); + +/** Egyptian Arabic (مصرى) */ +$specialPageAliases['arz'] = array( + 'ImportCSV' => array( 'استيراد_سى_اس_فى' ), + 'ImportXML' => array( 'استيراد_اكس_ام_ال' ), + 'ViewXML' => array( 'عرض_اكس_ام_ال' ), +); + +/** Assamese (অসমীয়া) */ +$specialPageAliases['as'] = array( + 'ImportCSV' => array( 'CSV_আমদানি' ), + 'ImportXML' => array( 'XML_আমদানি' ), + 'ViewXML' => array( 'XML_পৰিদৰ্শন' ), +); + +/** Western Balochi (بلوچی رخشانی) */ +$specialPageAliases['bgn'] = array( + 'ImportCSV' => array( 'سی_اس_وی_ئی_درون_ریچی' ), + 'ImportXML' => array( 'اکس_ام_ال_ئی_درون_ریچی' ), + 'ViewXML' => array( 'اکس_ام_ال_ئی_دیستین' ), +); + +/** Banjar (Bahasa Banjar) */ +$specialPageAliases['bjn'] = array( + 'ViewXML' => array( 'Itihi_XML' ), +); + +/** Breton (brezhoneg) */ +$specialPageAliases['br'] = array( + 'ImportCSV' => array( 'EnporzhiañCSV' ), + 'ImportXML' => array( 'EnporzhiañXML' ), + 'ViewXML' => array( 'GweletXML' ), +); + +/** Bosnian (bosanski) */ +$specialPageAliases['bs'] = array( + 'ViewXML' => array( 'VidiXML' ), +); + +/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */ +$specialPageAliases['cdo'] = array( + 'ImportCSV' => array( '導底CSV' ), + 'ImportXML' => array( '導底XML' ), + 'ViewXML' => array( '看蜀看XML' ), +); + +/** German (Deutsch) */ +$specialPageAliases['de'] = array( + 'ImportCSV' => array( 'CSV_importieren' ), + 'ImportXML' => array( 'XML_importieren' ), + 'ViewXML' => array( 'XML_anzeigen' ), +); + +/** Zazaki (Zazaki) */ +$specialPageAliases['diq'] = array( + 'ImportCSV' => array( 'CSVCıKe' ), + 'ImportXML' => array( 'XMLCıKe' ), + 'ViewXML' => array( 'XMLBivêne' ), +); + +/** Greek (Ελληνικά) */ +$specialPageAliases['el'] = array( + 'ImportCSV' => array( 'ΕισαγωγήCSV' ), + 'ImportXML' => array( 'ΕισαγωγήXML' ), + 'ViewXML' => array( 'ΠροβολήXML' ), +); + +/** Esperanto (Esperanto) */ +$specialPageAliases['eo'] = array( + 'ImportCSV' => array( 'Enporti_CSV', 'Importi_CSV' ), + 'ImportXML' => array( 'Enporti_XML', 'Importi_XML' ), + 'ViewXML' => array( 'Montri_XML' ), +); + +/** Spanish (español) */ +$specialPageAliases['es'] = array( + 'ViewXML' => array( 'Ver_XML', 'VerXML' ), +); + +/** Basque (euskara) */ +$specialPageAliases['eu'] = array( + 'ViewXML' => array( 'XMLIkusi' ), +); + +/** Persian (فارسی) */ +$specialPageAliases['fa'] = array( + 'ImportCSV' => array( 'درونریزی_سیاسوی' ), + 'ImportXML' => array( 'درونریزی_اکسامال' ), + 'ViewXML' => array( 'مشاهدهٔ_اکسامال' ), +); + +/** Finnish (suomi) */ +$specialPageAliases['fi'] = array( + 'ImportCSV' => array( 'Tuo_CSV' ), + 'ImportXML' => array( 'Tuo_XML' ), + 'ViewXML' => array( 'Näytä_XML' ), +); + +/** French (français) */ +$specialPageAliases['fr'] = array( + 'ImportCSV' => array( 'Importer_CVS', 'ImporterCVS' ), + 'ImportXML' => array( 'Importer_XML', 'ImporterXML' ), + 'ViewXML' => array( 'Voir_le_XML', 'Voir_XML', 'VoirXML' ), +); + +/** Arpitan (arpetan) */ +$specialPageAliases['frp'] = array( + 'ViewXML' => array( 'Vêre_lo_XML', 'VêreLoXML' ), +); + +/** Galician (galego) */ +$specialPageAliases['gl'] = array( + 'ImportCSV' => array( 'Importar_o_CSV' ), + 'ImportXML' => array( 'Importar_o_XML' ), + 'ViewXML' => array( 'Ver_o_XML' ), +); + +/** Swiss German (Alemannisch) */ +$specialPageAliases['gsw'] = array( + 'ViewXML' => array( 'Lueg_XML' ), +); + +/** Gujarati (ગુજરાતી) */ +$specialPageAliases['gu'] = array( + 'ViewXML' => array( 'XMLજુઓ' ), +); + +/** Hawaiian (Hawai`i) */ +$specialPageAliases['haw'] = array( + 'ImportCSV' => array( 'KākomoCSV', 'KakomoCSV' ), + 'ImportXML' => array( 'KākomoXML', 'KakomoXML' ), + 'ViewXML' => array( 'NānāXML', 'NanaXML' ), +); + +/** Upper Sorbian (hornjoserbsce) */ +$specialPageAliases['hsb'] = array( + 'ImportCSV' => array( 'CSV_importować' ), + 'ImportXML' => array( 'XML_importować' ), + 'ViewXML' => array( 'XML_pokazać' ), +); + +/** Haitian (Kreyòl ayisyen) */ +$specialPageAliases['ht'] = array( + 'ImportCSV' => array( 'EnpòteCSV' ), + 'ImportXML' => array( 'EnpòteXML' ), + 'ViewXML' => array( 'WèXML' ), +); + +/** Hungarian (magyar) */ +$specialPageAliases['hu'] = array( + 'ViewXML' => array( 'XML_megtekintése' ), +); + +/** Interlingua (interlingua) */ +$specialPageAliases['ia'] = array( + 'ImportCSV' => array( 'Importar_CSV' ), + 'ImportXML' => array( 'Importar_XML' ), + 'ViewXML' => array( 'Visualisar_XML' ), +); + +/** Indonesian (Bahasa Indonesia) */ +$specialPageAliases['id'] = array( + 'ImportCSV' => array( 'Impor_CSV', 'ImporCSV' ), + 'ImportXML' => array( 'Impor_XML', 'ImporXML' ), + 'ViewXML' => array( 'Lihat_XML', 'LihatXML' ), +); + +/** Italian (italiano) */ +$specialPageAliases['it'] = array( + 'ImportCSV' => array( 'ImportaCSV' ), + 'ImportXML' => array( 'ImportaXML' ), + 'ViewXML' => array( 'VediXML' ), +); + +/** Japanese (日本語) */ +$specialPageAliases['ja'] = array( + 'ImportCSV' => array( 'CSV取り込み', 'CSVインポート' ), + 'ImportXML' => array( 'XML取り込み', 'XMLインポート' ), + 'ViewXML' => array( 'XML表示', 'XML表示' ), +); + +/** Khmer (ភាសាខ្មែរ) */ +$specialPageAliases['km'] = array( + 'ViewXML' => array( 'មើលXML' ), +); + +/** Korean (한국어) */ +$specialPageAliases['ko'] = array( + 'ImportCSV' => array( 'CSV가져오기' ), + 'ImportXML' => array( 'XML가져오기' ), + 'ViewXML' => array( 'XML보기' ), +); + +/** Colognian (Ripoarisch) */ +$specialPageAliases['ksh'] = array( + 'ImportCSV' => array( 'CSV_Empotteere' ), + 'ImportXML' => array( 'XML_Empoteere' ), + 'ViewXML' => array( 'XML_beloore' ), +); + +/** Cornish (kernowek) */ +$specialPageAliases['kw'] = array( + 'ImportCSV' => array( 'YmperthiCSV' ), + 'ImportXML' => array( 'YmperthiXML' ), + 'ViewXML' => array( 'GwelesXML' ), +); + +/** Ladino (Ladino) */ +$specialPageAliases['lad'] = array( + 'ImportCSV' => array( 'Aktarear_CSV_Ariento' ), + 'ImportXML' => array( 'Aktarear_XML_Ariento' ), + 'ViewXML' => array( 'Ver_XML' ), +); + +/** Luxembourgish (Lëtzebuergesch) */ +$specialPageAliases['lb'] = array( + 'ImportCSV' => array( 'CSV_importéieren' ), + 'ImportXML' => array( 'XML_importéieren' ), + 'ViewXML' => array( 'XML_weisen' ), +); + +/** Northern Luri (لۊری شومالی) */ +$specialPageAliases['lrc'] = array( + 'ImportCSV' => array( 'ڤامین_اآڤوردئن_سی_ئس_ڤی' ), + 'ImportXML' => array( 'ڤامین_آڤوردئن_ئیکس_ئم_ئل' ), + 'ViewXML' => array( 'دیئن_ئیکس_ئم_ئل' ), +); + +/** Malagasy (Malagasy) */ +$specialPageAliases['mg'] = array( + 'ImportCSV' => array( 'HanafatraCSV' ), + 'ImportXML' => array( 'HanafatraXML' ), + 'ViewXML' => array( 'HijeryXML' ), +); + +/** Macedonian (македонски) */ +$specialPageAliases['mk'] = array( + 'ImportCSV' => array( 'УвезиCSV' ), + 'ImportXML' => array( 'УвезиXML' ), + 'ViewXML' => array( 'ВидиXML' ), +); + +/** Malayalam (മലയാളം) */ +$specialPageAliases['ml'] = array( + 'ImportCSV' => array( 'സി.എസ്.വി.ഇറക്കുമതി' ), + 'ImportXML' => array( 'എക്സ്.എം.എൽ.ഇറക്കുമതി' ), + 'ViewXML' => array( 'എക്സ്.എം.എൽ.കാണുക' ), +); + +/** Marathi (मराठी) */ +$specialPageAliases['mr'] = array( + 'ViewXML' => array( 'XMLपहा' ), +); + +/** Maltese (Malti) */ +$specialPageAliases['mt'] = array( + 'ViewXML' => array( 'UriXML' ), +); + +/** Norwegian Bokmål (norsk bokmål) */ +$specialPageAliases['nb'] = array( + 'ImportCSV' => array( 'Importer_CSV' ), + 'ImportXML' => array( 'Importer_XML' ), + 'ViewXML' => array( 'Vis_XML' ), +); + +/** Low Saxon (Netherlands) (Nedersaksies) */ +$specialPageAliases['nds-nl'] = array( + 'ImportCSV' => array( 'CSV_invoeren' ), + 'ImportXML' => array( 'XML_invoeren' ), + 'ViewXML' => array( 'XML_bekieken' ), +); + +/** Dutch (Nederlands) */ +$specialPageAliases['nl'] = array( + 'ImportCSV' => array( 'CSVImporteren' ), + 'ImportXML' => array( 'XMLImporteren' ), + 'ViewXML' => array( 'XMLBekijken' ), +); + +/** Occitan (occitan) */ +$specialPageAliases['oc'] = array( + 'ViewXML' => array( 'Veire_XML', 'VeireXML' ), +); + +/** Polish (polski) */ +$specialPageAliases['pl'] = array( + 'ViewXML' => array( 'XML' ), +); + +/** Portuguese (português) */ +$specialPageAliases['pt'] = array( + 'ImportCSV' => array( 'Importar_CSV' ), + 'ImportXML' => array( 'Importar_XML' ), + 'ViewXML' => array( 'Ver_XML' ), +); + +/** Romanian (română) */ +$specialPageAliases['ro'] = array( + 'ImportCSV' => array( 'Import_CSV' ), + 'ImportXML' => array( 'Import_XML' ), + 'ViewXML' => array( 'Vizualizare_XML' ), +); + +/** Sanskrit (संस्कृतम्) */ +$specialPageAliases['sa'] = array( + 'ViewXML' => array( 'XMLपश्यति' ), +); + +/** Sicilian (sicilianu) */ +$specialPageAliases['scn'] = array( + 'ImportCSV' => array( 'ImportaCSV' ), + 'ImportXML' => array( 'ImportaXML' ), + 'ViewXML' => array( 'VediXML' ), +); + +/** Slovak (slovenčina) */ +$specialPageAliases['sk'] = array( + 'ViewXML' => array( 'ZobraziťXML' ), +); + +/** Albanian (shqip) */ +$specialPageAliases['sq'] = array( + 'ViewXML' => array( 'ShihXML' ), +); + +/** Swedish (svenska) */ +$specialPageAliases['sv'] = array( + 'ImportCSV' => array( 'Importera_CSV' ), + 'ImportXML' => array( 'Importera_XML' ), + 'ViewXML' => array( 'Visa_XML' ), +); + +/** Swahili (Kiswahili) */ +$specialPageAliases['sw'] = array( + 'ViewXML' => array( 'OnyeshaXML' ), +); + +/** Tagalog (Tagalog) */ +$specialPageAliases['tl'] = array( + 'ViewXML' => array( 'Tingnan_ang_XML' ), +); + +/** Turkish (Türkçe) */ +$specialPageAliases['tr'] = array( + 'ImportCSV' => array( 'CSVAktar', 'CSVİçeAktar' ), + 'ImportXML' => array( 'XMLAktar', 'XMLİçeAktar' ), + 'ViewXML' => array( 'XMLGör' ), +); + +/** Tatar (Cyrillic script) (татарча) */ +$specialPageAliases['tt-cyrl'] = array( + 'ImportCSV' => array( 'CSV_импорт' ), + 'ImportXML' => array( 'XML_импорт' ), + 'ViewXML' => array( 'XML_иттереп_ачу' ), +); + +/** Venetian (vèneto) */ +$specialPageAliases['vec'] = array( + 'ViewXML' => array( 'VardaXML' ), +); + +/** Vietnamese (Tiếng Việt) */ +$specialPageAliases['vi'] = array( + 'ImportCSV' => array( 'Nhập_CSV' ), + 'ImportXML' => array( 'Nhập_XML' ), + 'ViewXML' => array( 'Xem_XML' ), +); + +/** Simplified Chinese (中文(简体)) */ +$specialPageAliases['zh-hans'] = array( + 'ImportCSV' => array( '导入CSV' ), + 'ImportXML' => array( '导入XML' ), + 'ViewXML' => array( '查看XML' ), +); + +/** Traditional Chinese (中文(繁體)) */ +$specialPageAliases['zh-hant'] = array( + 'ImportCSV' => array( '匯入CSV' ), + 'ImportXML' => array( '匯入XML' ), + 'ViewXML' => array( '檢視XML' ), +);
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/DataTransfer.php b/www/wiki/extensions/DataTransfer/DataTransfer.php new file mode 100644 index 00000000..71bafced --- /dev/null +++ b/www/wiki/extensions/DataTransfer/DataTransfer.php @@ -0,0 +1,70 @@ +<?php +/** + * Global functions and constants for the Data Transfer extension. + * + * @author Yaron Koren + * @ingroup DataTransfer + */ + +if ( !defined( 'MEDIAWIKI' ) ) die(); + +define( 'DATA_TRANSFER_VERSION', '1.0' ); + +$wgExtensionCredits['specialpage'][] = array( + 'path' => __FILE__, + 'name' => 'Data Transfer', + 'version' => DATA_TRANSFER_VERSION, + 'author' => 'Yaron Koren', + 'url' => 'https://www.mediawiki.org/wiki/Extension:Data_Transfer', + 'descriptionmsg' => 'datatransfer-desc', + 'license-name' => 'GPL-2.0-or-later' +); + +### +# This is the path to your installation of DataTransfer as +# seen on your local filesystem. Used against some PHP file path +# issues. +## +$dtgIP = dirname( __FILE__ ); +## + +$wgResourceModules[ 'ext.datatransfer' ] = array( + 'localBasePath' => $dtgIP, + 'styles' => 'styles/DataTransfer.css', + 'position' => 'bottom', +); + +// Register all special pages and other classes. +$wgAutoloadClasses['DTPageStructure'] = $dtgIP . '/includes/DT_PageStructure.php'; +$wgAutoloadClasses['DTPageComponent'] = $dtgIP . '/includes/DT_PageComponent.php'; +$wgAutoloadClasses['DTPage'] = $dtgIP . '/includes/DT_Page.php'; +$wgAutoloadClasses['DTUtils'] = $dtgIP . '/includes/DT_Utils.php'; +$wgSpecialPages['ViewXML'] = 'DTViewXML'; +$wgAutoloadClasses['DTViewXML'] = $dtgIP . '/specials/DT_ViewXML.php'; +$wgSpecialPages['ImportXML'] = 'DTImportXML'; +$wgAutoloadClasses['DTImportXML'] = $dtgIP . '/specials/DT_ImportXML.php'; +$wgSpecialPages['ImportCSV'] = 'DTImportCSV'; +$wgAutoloadClasses['DTImportCSV'] = $dtgIP . '/specials/DT_ImportCSV.php'; +$wgSpecialPages['ImportSpreadsheet'] = 'DTImportSpreadsheet'; +$wgAutoloadClasses['DTImportSpreadsheet'] = $dtgIP . '/specials/DT_ImportSpreadsheet.php'; +$wgJobClasses['dtImport'] = 'DTImportJob'; +$wgAutoloadClasses['DTImportJob'] = $dtgIP . '/includes/DT_ImportJob.php'; +$wgAutoloadClasses['DTXMLParser'] = $dtgIP . '/includes/DT_XMLParser.php'; +$wgAutoloadClasses['DTWikiTemplate'] = $dtgIP . '/includes/DT_WikiTemplate.php'; +$wgAutoloadClasses['DTWikiPage'] = $dtgIP . '/includes/DT_WikiPage.php'; +$wgAutoloadClasses['DTHooks'] = $dtgIP . '/includes/DT_Hooks.php'; + +$wgHooks['AdminLinks'][] = 'DTHooks::addToAdminLinks'; + +### +# Permission to import files +### +$wgGroupPermissions['sysop']['datatransferimport'] = true; +$wgAvailableRights[] = 'datatransferimport'; + +// Global settings +$wgDataTransferViewXMLParseFields = false; +$wgDataTransferViewXMLParseFreeText = true; + +$wgMessagesDirs['DataTransfer'] = __DIR__ . '/i18n'; +$wgExtensionMessagesFiles['DataTransferAlias'] = $dtgIP . '/DataTransfer.i18n.alias.php';
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/Gruntfile.js b/www/wiki/extensions/DataTransfer/Gruntfile.js new file mode 100644 index 00000000..a45071e1 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/Gruntfile.js @@ -0,0 +1,21 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + + grunt.initConfig( { + banana: { + all: 'i18n/' + }, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**', + '!vendor/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/www/wiki/extensions/DataTransfer/INSTALL b/www/wiki/extensions/DataTransfer/INSTALL new file mode 100644 index 00000000..800980a8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/INSTALL @@ -0,0 +1,34 @@ +[[Data Transfer 1.0]] + +Contents: +* Disclaimer +* Requirements +* Installation +* Contact + +== Disclaimer == + +For a proper legal disclaimer, see the file "COPYING". + +== Requirements == + +This extension requires MediaWiki 1.23 or greater. + +== Installation == + +(1) Extract the archive to obtain the directory "DataTransfer" + that contains all relevant files. Copy this directory (or + extract/download it) to "[wikipath]/extensions/". +(2) Insert either of the following lines into the file + "[wikipath]/LocalSettings.php": + include_once( "$IP/extensions/DataTransfer/DataTransfer.php" ); + wfLoadExtension( 'DataTransfer' ); +(3) To enable importing spreadsheet files (Excel, OOCalc, Gnumeric, ...), + use Composer to install the phpoffice/phpexcel module. From the MediaWiki + installation directory call: + composer require "phpoffice/phpexcel:~1.8" + +== Contact == + +If you have any issues or questions, please send them to +yaron57@gmail.com. diff --git a/www/wiki/extensions/DataTransfer/README b/www/wiki/extensions/DataTransfer/README new file mode 100644 index 00000000..192b04e0 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/README @@ -0,0 +1,31 @@ +== About == + +Data Transfer is an extension to MediaWiki that both exports data, +based on the current contents of pages in a wiki; and imports pages. +In both cases, it uses template calls, and the fields within them, +to define the data structure. + +The export is done in XML format, while the import can be done in +either XML, CSV or spreadsheet (.xls, .ods etc.) formats. + +For the export, any text that is not within a template call gets +placed into one or more "free text" fields. + +For more information on Data Transfer, see the extension +homepage at +http://www.mediawiki.org/wiki/Extension:Data_Transfer + +Notes on installing Data Transfer can be found in the file INSTALL. + +== Credits == + +Data Transfer was mostly written by Yaron Koren. The spreadsheet import +functionality was written by Stephan Gambke. + +The spreadsheet import functionality makes use of the PHPExcel +library, if it is available. + +== Contact == + +Comments, questions, suggestions and bug reports should be +sent to Yaron at yaron57@gmail.com. diff --git a/www/wiki/extensions/DataTransfer/composer.json b/www/wiki/extensions/DataTransfer/composer.json new file mode 100644 index 00000000..973fb5b0 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/composer.json @@ -0,0 +1,97 @@ +{ + "name": "mediawiki/data-transfer", + "type": "mediawiki-extension", + "description": "A MediaWiki extension for importing and exporting data in CSV and XML formats.", + "keywords": [ + "MediaWiki", + "CSV", + "XML", + "import", + "export" + ], + "homepage": "https://www.mediawiki.org/wiki/Extension:Data_Transfer", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "Alexandre Emsenhuber" + }, + { + "name": "Brion Vibber" + }, + { + "name": "Chad Horohoe" + }, + { + "name": "Daniel Friesen" + }, + { + "name": "Jeroen De Dauw" + }, + { + "name": "kghbln" + }, + { + "name": "Meno25" + }, + { + "name": "Niklas Laxström" + }, + { + "name": "Raimond Spekking" + }, + { + "name": "Sam Reed" + }, + { + "name": "Siebrand Mazeland" + }, + { + "name": "Shinjiman" + }, + { + "name": "shirayuki" + }, + { + "name": "Stephan Gambke" + }, + { + "name": "umherirrender" + }, + { + "name": "Yaron Koren" + } + ], + "support": { + "issues": "https://phabricator.wikimedia.org/project/profile/791/", + "irc": "irc://irc.freenode.net/mediawiki", + "wiki": "https://www.mediawiki.org/wiki/Extension:Data_Transfer", + "source": "https://phabricator.wikimedia.org/diffusion/EDTR/extension-datatransfer.git" + }, + "require": { + "php": ">=5.3.0", + "composer/installers": "1.*,>=1.0.1" + }, + "config": { + "optimize-autoloader": true, + "prepend-autoloader": false + }, + "autoload": { + "files": [ + "DataTransfer.php" + ] + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "1.0.0", + "jakub-onderka/php-console-highlighter": "0.3.2", + "mediawiki/minus-x": "0.3.1" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor --exclude node_modules", + "minus-x check ." + ], + "fix": [ + "minus-x fix ." + ] + } +} diff --git a/www/wiki/extensions/DataTransfer/extension.json b/www/wiki/extensions/DataTransfer/extension.json new file mode 100644 index 00000000..3fb2ce3c --- /dev/null +++ b/www/wiki/extensions/DataTransfer/extension.json @@ -0,0 +1,72 @@ +{ + "@Note": "When updating this file please also update DataTransfer.php with the same changes.", + "name": "Data Transfer", + "version": "1.0", + "author": [ + "Yaron Koren", + "..." + ], + "url": "https://www.mediawiki.org/wiki/Extension:Data_Transfer", + "descriptionmsg": "datatransfer-desc", + "license-name": "GPL-2.0-or-later", + "type": "specialpage", + "GroupPermissions": { + "sysop": { + "datatransferimport": true + } + }, + "AvailableRights": [ + "datatransferimport" + ], + "SpecialPages": { + "ViewXML": "DTViewXML", + "ImportXML": "DTImportXML", + "ImportCSV": "DTImportCSV", + "ImportSpreadsheet": "DTImportSpreadsheet" + }, + "JobClasses": { + "dtImport": "DTImportJob" + }, + "MessagesDirs": { + "DataTransfer": [ + "i18n" + ] + }, + "ExtensionMessagesFiles": { + "DataTransferAlias": "DataTransfer.i18n.alias.php" + }, + "AutoloadClasses": { + "DTPageStructure": "includes/DT_PageStructure.php", + "DTPageComponent": "includes/DT_PageComponent.php", + "DTPage": "includes/DT_Page.php", + "DTUtils": "includes/DT_Utils.php", + "DTImportJob": "includes/DT_ImportJob.php", + "DTXMLParser": "includes/DT_XMLParser.php", + "DTWikiTemplate": "includes/DT_WikiTemplate.php", + "DTWikiPage": "includes/DT_WikiPage.php", + "DTHooks": "includes/DT_Hooks.php", + "DTViewXML": "specials/DT_ViewXML.php", + "DTImportXML": "specials/DT_ImportXML.php", + "DTImportCSV": "specials/DT_ImportCSV.php", + "DTImportSpreadsheet": "specials/DT_ImportSpreadsheet.php" + }, + "ResourceModules": { + "ext.datatransfer": { + "styles": "styles/DataTransfer.css" + } + }, + "ResourceFileModulePaths": { + "localBasePath": "", + "remoteExtPath": "DataTransfer" + }, + "Hooks": { + "AdminLinks": [ + "DTHooks::addToAdminLinks" + ] + }, + "config": { + "DataTransferViewXMLParseFields": false, + "DataTransferViewXMLParseFreeText": true + }, + "manifest_version": 1 +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/i18n/af.json b/www/wiki/extensions/DataTransfer/i18n/af.json new file mode 100644 index 00000000..e40300ed --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/af.json @@ -0,0 +1,38 @@ +{ + "@metadata": { + "authors": [ + "Arnobarnard", + "Naudefj" + ] + }, + "datatransfer-desc": "Maak die laai en ontlaai van gestruktureerde gegewens in sjabloonaanroepe moontlik", + "viewxml": "Sien XML", + "dt_viewxml_docu": "Kies een van die volgende kategorieë en naamruimtes om in XML-formaat te sien.", + "dt_viewxml_categories": "Kategorieë", + "dt_viewxml_namespaces": "Naamruimtes", + "dt_viewxml_simplifiedformat": "Vereenvoudigde formaat", + "dt_xml_namespace": "Naamruimte", + "dt_xml_pages": "Bladsye", + "dt_xml_page": "Bladsy", + "dt_xml_template": "Sjabloon", + "dt_xml_field": "Veld", + "dt_xml_name": "Naam", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Vrye teks", + "importxml": "Laai XML", + "dt_import_selectfile": "Kies die $1 lêer om te laai:", + "dt_import_encodingtype": "Enkoderingstipe:", + "dt_import_forexisting": "Vir bladsye wat reeds bestaan:", + "dt_import_overwriteexisting": "Oorskryf bestaande inhoud", + "dt_import_mergeintoexisting": "Oorskryf slegs velde wat in die lêer voorkom", + "dt_import_skipexisting": "Slaan oor", + "dt_import_appendtoexisting": "Voeg by bestaande inhoud", + "dt_import_summarydesc": "Samevatting van die import:", + "dt_import_editsummary": "$1-laai", + "dt_import_importing": "Besig om te laai...", + "dt_import_success": "$1 {{PLURAL:$1|bladsy|bladsye}} sal geskep word vanaf die lêer $2.", + "importcsv": "Laai CSV", + "dt_importcsv_badheader": "Fout: Die opskrif van kolom $1, \"$2\", moet \"$3\" of \"$4\" wees, of in die vorm \"sjabloonnaam[veldnaam]\" genoteer word.", + "right-datatransferimport": "Laai data" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ais.json b/www/wiki/extensions/DataTransfer/i18n/ais.json new file mode 100644 index 00000000..9ea8c417 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ais.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Benel" + ] + }, + "viewxml": "ciwsace XML" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/aln.json b/www/wiki/extensions/DataTransfer/i18n/aln.json new file mode 100644 index 00000000..522902b7 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/aln.json @@ -0,0 +1,31 @@ +{ + "@metadata": { + "authors": [ + "Mdupont" + ] + }, + "datatransfer-desc": "Lejon për import dhe eksport të dhënave të përmbajtura në modelin e quan", + "viewxml": "Shiko XML", + "dt_viewxml_docu": "Ju lutem zgjidhni midis kategorive të mëposhtme dhe hapësira për të parë në formatin XML.", + "dt_viewxml_categories": "Kategoritë", + "dt_viewxml_namespaces": "Hapësira", + "dt_viewxml_simplifiedformat": "Formati i thjeshtuar", + "dt_xml_namespace": "Hapësira", + "dt_xml_pages": "Faqet", + "dt_xml_page": "Faqe", + "dt_xml_template": "Shabllon", + "dt_xml_field": "Fushë", + "dt_xml_name": "Emër", + "dt_xml_title": "Titull", + "dt_xml_id": "ID", + "dt_xml_freetext": "Free Tekst", + "importxml": "Importi XML", + "dt_import_selectfile": "Ju lutem përzgjidhni kartelën $1 për të importuar:", + "dt_import_encodingtype": "Encoding lloj:", + "dt_import_editsummary": "$1 importit", + "dt_import_importing": "Importimi ...", + "dt_import_success": "$1 {{PLURAL:$1|faqe|faqe}} do të krijohet nga file $2.", + "importcsv": "Importi CSV", + "dt_importcsv_badheader": "Gabim: $1 column header, '$2', duhet të jenë ose '$3', '$4' ose të formës 'template_name [field_name]'", + "right-datatransferimport": "Të dhënat e importit" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/am.json b/www/wiki/extensions/DataTransfer/i18n/am.json new file mode 100644 index 00000000..1a48bc6e --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/am.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Codex Sinaiticus" + ] + }, + "dt_viewxml_categories": "መደቦች", + "dt_viewxml_namespaces": "ክፍለ-ዊኪዎች", + "dt_xml_namespace": "ክፍለ-ዊኪ", + "dt_xml_name": "ስም", + "dt_xml_title": "አርዕስት" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/an.json b/www/wiki/extensions/DataTransfer/i18n/an.json new file mode 100644 index 00000000..0a0bc749 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/an.json @@ -0,0 +1,13 @@ +{ + "@metadata": { + "authors": [ + "Juanpabl", + "Remember the dot" + ] + }, + "dt_viewxml_namespaces": "Espacios de nombres", + "dt_xml_namespace": "Espacio de nombres", + "dt_xml_page": "Pachina", + "dt_xml_template": "Plantilla", + "dt_xml_name": "Nombre" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ar.json b/www/wiki/extensions/DataTransfer/i18n/ar.json new file mode 100644 index 00000000..5817f1cd --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ar.json @@ -0,0 +1,43 @@ +{ + "@metadata": { + "authors": [ + "Meno25", + "Mutarjem horr", + "OsamaK", + "Mido", + "ديفيد" + ] + }, + "datatransfer-desc": "يسمح باستيراد وتصدير بيانات محتواة في استدعاءات قالب", + "viewxml": "عرض XML", + "dt_viewxml_docu": "من فضلك اختر من بين التصنيفات والنطاقات التالية للعرض في صيغة XML.", + "dt_viewxml_categories": "تصنيفات", + "dt_viewxml_namespaces": "نطاقات", + "dt_viewxml_simplifiedformat": "صيغة مبسطة", + "dt_xml_namespace": "نطاق", + "dt_xml_pages": "صفحات", + "dt_xml_page": "الصفحة", + "dt_xml_template": "قالب", + "dt_xml_field": "حقل", + "dt_xml_name": "الاسم", + "dt_xml_title": "عنوان", + "dt_xml_id": "رقم", + "dt_xml_freetext": "نص حر", + "importxml": "استيراد XML", + "dt_import_selectfile": "من فضلك اختر ملف $1 للاستيراد:", + "dt_import_encodingtype": "نوع الترميز:", + "dt_import_forexisting": "لصفحات موجودة مسبقاّ :", + "dt_import_overwriteexisting": "أكتب على المحتوى الموجود", + "dt_import_mergeintoexisting": "استبدال الحقول الموجودة في الملف فقط", + "dt_import_skipexisting": "أقفز", + "dt_import_appendtoexisting": "إلحاق بالمحتوى الموجود", + "dt_import_summarydesc": "موجز الاستيراد :", + "dt_import_editsummary": "استيراد {{ucfirst:$1}}", + "dt_import_importing": "جارٍ الاستيراد...", + "dt_import_success": "سوف تُنشأ {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}} من ملف $2.", + "importcsv": "استورد CSV", + "importspreadsheet": "استيراد جدول البيانات", + "dt_importcsv_badheader": "خطأ: عنوان العامود $1، '$2'، يجب أن يكون إما '$3'، '$4' أو من الصيغة 'template_name[field_name]'", + "right-datatransferimport": "استورد بيانات", + "dt_filetype_spreadsheet": "جدول بيانات" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/arc.json b/www/wiki/extensions/DataTransfer/i18n/arc.json new file mode 100644 index 00000000..c7b7edb1 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/arc.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Basharh" + ] + }, + "dt_viewxml_categories": "ܣܕܪ̈ܐ", + "dt_viewxml_namespaces": "ܚܩܠܬ̈ܐ", + "dt_xml_namespace": "ܚܩܠܐ", + "dt_xml_pages": "ܦܐܬܬ̈ܐ", + "dt_xml_page": "ܦܐܬܐ", + "dt_xml_template": "ܩܠܒܐ", + "dt_xml_name": "ܫܡܐ", + "dt_xml_title": "ܟܘܢܝܐ", + "dt_xml_id": "ܗܝܝܘܬܐ", + "dt_import_summarydesc": "ܦܣܝܩܬ̈ܐ ܕܡܥܠܢܘܬܐ:", + "right-datatransferimport": "ܡܥܠܢܘܬܐ ܕܓܠܝܬ̈ܐ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/arn.json b/www/wiki/extensions/DataTransfer/i18n/arn.json new file mode 100644 index 00000000..9d61280a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/arn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Remember the dot" + ] + }, + "dt_xml_page": "Pakina" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/arz.json b/www/wiki/extensions/DataTransfer/i18n/arz.json new file mode 100644 index 00000000..352b08d9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/arz.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "Dudi", + "Ghaly", + "Meno25" + ] + }, + "datatransfer-desc": "بيسمح بـ import و export للداتا اللى جوّا القالب", + "viewxml": "شوف XML", + "dt_viewxml_docu": "لو سمحت اختار من التصانيف و اسامى المساحات الجايه علشان العرض فى XML format.", + "dt_viewxml_categories": "تصانيف", + "dt_viewxml_namespaces": "مساحات اسامى", + "dt_viewxml_simplifiedformat": "format متبسطه", + "dt_xml_namespace": "اسم مساحه", + "dt_xml_pages": "صفح", + "dt_xml_page": "صفحه", + "dt_xml_template": "قالب", + "dt_xml_field": "حقل", + "dt_xml_name": "اسم", + "dt_xml_title": "عنوان", + "dt_xml_id": "رقم", + "dt_xml_freetext": "نص حر", + "dt_import_selectfile": "لو سمحت اختار فايل $1 علشان تعمل import:", + "dt_import_editsummary": "استوراد $1", + "dt_import_success": "$1 {{PLURAL:$1|صفحه|صفحه}} ح يتعملو من الفايل $2." +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ast.json b/www/wiki/extensions/DataTransfer/i18n/ast.json new file mode 100644 index 00000000..cc8b815e --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ast.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Xuacu" + ] + }, + "datatransfer-desc": "Permite importar y esportar los datos que contienen les llamaes de les plantíes", + "viewxml": "Ver XML", + "dt_viewxml_docu": "Por favor, esbilla entre les siguientes categoríes y espacios de nome pa ver en formatu XML.", + "dt_viewxml_categories": "Categoríes", + "dt_viewxml_namespaces": "Espacios de nome", + "dt_viewxml_simplifiedformat": "Formatu simplificáu", + "dt_xml_namespace": "Espaciu de nomes", + "dt_xml_pages": "Páxines", + "dt_xml_page": "Páxina", + "dt_xml_template": "Plantía", + "dt_xml_field": "Campu", + "dt_xml_name": "Nome", + "dt_xml_title": "Títulu", + "dt_xml_id": "ID", + "dt_xml_freetext": "Testu llibre", + "importxml": "Importar XML", + "dt_import_selectfile": "Por favor, seleiciona el ficheru $1 a importar:", + "dt_import_encodingtype": "Triba de codificación:", + "dt_import_forexisting": "Pa páxines que yá esisten:", + "dt_import_overwriteexisting": "Sobreescribir el conteníu esistente", + "dt_import_mergeintoexisting": "Sobrescribir sólo los campos conteníos nel ficheru", + "dt_import_skipexisting": "Saltar", + "dt_import_appendtoexisting": "Amestar al conteníu esistente", + "dt_import_summarydesc": "Resume de la importación:", + "dt_import_editsummary": "Importación {{ucfirst:$1}}", + "dt_import_importing": "Importando...", + "dt_import_success": "Se {{PLURAL:$1|creará|crearán}} $1 {{PLURAL:$1|páxina|páxines}} del ficheru $2.", + "importcsv": "Importar CSV", + "importspreadsheet": "Importar fueya de cálculu", + "dt_importcsv_badheader": "Error : la testera de columna $1, \"$2\", tien de ser o \"$3\", \"$4\" o de la forma 'nome_de_plantía[nome_de_campu]'", + "right-datatransferimport": "Importar datos", + "dt_filetype_spreadsheet": "Fueya de cálculu" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/atj.json b/www/wiki/extensions/DataTransfer/i18n/atj.json new file mode 100644 index 00000000..24a88c10 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/atj.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Benoit Rochon" + ] + }, + "dt_xml_pages": "Masinahikana" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/az.json b/www/wiki/extensions/DataTransfer/i18n/az.json new file mode 100644 index 00000000..ee2abd46 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/az.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Cekli829", + "Vago" + ] + }, + "dt_viewxml_categories": "Kateqoriyalar", + "dt_viewxml_namespaces": "Adlar fəzaları", + "dt_xml_namespace": "Adlar fəzası", + "dt_xml_pages": "Səhifələr", + "dt_xml_page": "Səhifə", + "dt_xml_template": "Şablon", + "dt_xml_name": "Ad", + "dt_xml_title": "Başlıq", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/azb.json b/www/wiki/extensions/DataTransfer/i18n/azb.json new file mode 100644 index 00000000..8e2714f2 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/azb.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Erdemaslancan" + ] + }, + "dt_viewxml_namespaces": "آدلار فضاسی:" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ba.json b/www/wiki/extensions/DataTransfer/i18n/ba.json new file mode 100644 index 00000000..43c1ec93 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ba.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Ләйсән", + "Аҡҡашҡа", + "Мухамадеева", + "Айбикә" + ] + }, + "datatransfer-desc": "Ҡалыпты һорап алыу эстәлегендәге мәғлүмәтте импортлау һәм экспортлау", + "viewxml": "XMLды ҡарап сығыу", + "dt_viewxml_docu": "XML форматында исем категорияларын һәм арауығын ҡарап сығыуҙы һайлағыҙ.", + "dt_viewxml_categories": "Категориялар", + "dt_viewxml_namespaces": "Исем арауыҡтары", + "dt_viewxml_simplifiedformat": "Ябайлаштырылған формат", + "dt_xml_namespace": "Исемдәр арауығы", + "dt_xml_pages": "Биттәр", + "dt_xml_page": "Бит", + "dt_xml_template": "Ҡалып", + "dt_xml_field": "майҙан.", + "dt_xml_name": "Исем.", + "dt_xml_title": "Атама", + "dt_xml_id": "ID", + "dt_xml_freetext": "Ирекле текст", + "importxml": "XML импорты", + "dt_import_selectfile": " импорт өсөн $1 файлын һайлағыҙ", + "dt_import_encodingtype": "кодлау төрө", + "dt_import_forexisting": "Булған биттәр өсөн", + "dt_import_overwriteexisting": "Булған мәғлүмәттәрҙе яңынан күсереп яҙыу", + "dt_import_mergeintoexisting": "Файлда булған майҙандарҙы ғына яңынан яҙыу", + "dt_import_skipexisting": "Ҡалдырып торорға", + "dt_import_appendtoexisting": "Булған мәғлүмәттәргә өҫтәргә", + "dt_import_summarydesc": "Импортты һүрәтләү", + "dt_import_editsummary": " {{ucfirst:$1}}-тан импорт", + "dt_import_importing": "Индереү", + "dt_import_success": "$1 {{PLURAL:$1|бите булған|биттәр булған|бит булған}} $2 файлынан булдырылған.", + "importcsv": "CSV импорты", + "importspreadsheet": "Таблицаның импорты", + "dt_importcsv_badheader": "Хата. №$1 «$2» колонкаларының атмаһы «$3», йәки «$4», йәки «template_name[field_name]» формаһында булырға тейеш.", + "right-datatransferimport": "Мәғлүмәттәр импорты", + "dt_filetype_spreadsheet": "таблица" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/bcc.json b/www/wiki/extensions/DataTransfer/i18n/bcc.json new file mode 100644 index 00000000..74b1d6a8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/bcc.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Baloch Afghanistan" + ] + }, + "dt_xml_template": "تراشوان" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/be-tarask.json b/www/wiki/extensions/DataTransfer/i18n/be-tarask.json new file mode 100644 index 00000000..2cc7c880 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/be-tarask.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "EugeneZelenko", + "Jim-by", + "Wizardist", + "Red Winged Duck" + ] + }, + "datatransfer-desc": "Дазваляе імпартаваць і экспартаваць зьвесткі, якія ўтрымліваюцца ў выкліках шаблёнах", + "viewxml": "Паказаць XML", + "dt_viewxml_docu": "Калі ласка, выберыце што праглядаць у фармаце XML сярод наступных катэгорыяў і прастораў назваў.", + "dt_viewxml_categories": "Катэгорыі", + "dt_viewxml_namespaces": "Прасторы назваў", + "dt_viewxml_simplifiedformat": "Спрошчаны фармат", + "dt_xml_namespace": "Прастора назваў", + "dt_xml_pages": "Старонкі", + "dt_xml_page": "Старонка", + "dt_xml_template": "Шаблён", + "dt_xml_field": "Поле", + "dt_xml_name": "Назва", + "dt_xml_title": "Назва", + "dt_xml_id": "Ідэнтыфікатар", + "dt_xml_freetext": "Вольны тэкст", + "importxml": "Імпарт XML", + "dt_import_selectfile": "Калі ласка, выберыце файл у фармаце $1 для імпарту:", + "dt_import_encodingtype": "Тып кадыроўкі:", + "dt_import_forexisting": "Для старонак якія ўжо існуюць:", + "dt_import_overwriteexisting": "Перазапісваць існуючы зьмест", + "dt_import_mergeintoexisting": "Перазапісваць толькі палі, што ўтрымліваюцца ў файле", + "dt_import_skipexisting": "Прапускаць", + "dt_import_appendtoexisting": "Далучаць да існуючага зьместу", + "dt_import_summarydesc": "Кароткае апісаньне імпарту:", + "dt_import_editsummary": "імпарт з {{ucfirst:$1}}", + "dt_import_importing": "Імпартаваньне...", + "dt_import_success": "$1 {{PLURAL:$1|старонка будзе|старонкі будуць|старонак будзе}} створана з файла ў фармаце $2.", + "importcsv": "Імпарт CSV", + "importspreadsheet": "Імпарт табліцы", + "dt_importcsv_badheader": "Памылка: загаловак слупка $1, '$2', павінен быць адным з '$3', '$4' альбо у форме 'назва_шаблёну[назва_поля]'", + "right-datatransferimport": "імпарт зьвестак", + "dt_filetype_spreadsheet": "табліца" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/be.json b/www/wiki/extensions/DataTransfer/i18n/be.json new file mode 100644 index 00000000..9b01bd71 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/be.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Тест" + ] + }, + "dt_viewxml_categories": "Катэгорыі", + "dt_xml_template": "Шаблон" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/bg.json b/www/wiki/extensions/DataTransfer/i18n/bg.json new file mode 100644 index 00000000..2ccb7f16 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/bg.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "DCLXVI", + "පසිඳු කාවින්ද", + "StanProg" + ] + }, + "viewxml": "Преглед на XML", + "dt_viewxml_categories": "Категории", + "dt_viewxml_namespaces": "Именни пространства", + "dt_viewxml_simplifiedformat": "Опростен формат", + "dt_xml_namespace": "Именно пространство", + "dt_xml_pages": "Страници", + "dt_xml_page": "Страница", + "dt_xml_template": "Шаблон", + "dt_xml_field": "Поле", + "dt_xml_name": "Име", + "dt_xml_title": "Заглавие", + "dt_xml_id": "Номер", + "dt_xml_freetext": "Свободен текст", + "importxml": "Внасяне на XML", + "dt_import_skipexisting": "Пропускане", + "dt_import_importing": "Внасяне...", + "importcsv": "Внасяне на CSV", + "right-datatransferimport": "Внасяне на данни" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/bn.json b/www/wiki/extensions/DataTransfer/i18n/bn.json new file mode 100644 index 00000000..ab3d2831 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/bn.json @@ -0,0 +1,35 @@ +{ + "@metadata": { + "authors": [ + "Wikitanvir", + "Aftab1995", + "Aftabuzzaman", + "আফতাবুজ্জামান" + ] + }, + "viewxml": "এক্সএমএল দেখাও", + "dt_viewxml_categories": "বিষয়শ্রেণীসমূহ", + "dt_viewxml_namespaces": "নামস্থানসমূহ", + "dt_viewxml_simplifiedformat": "সাধারণকৃত কাঠামো", + "dt_xml_namespace": "নামস্থান", + "dt_xml_pages": "পাতা", + "dt_xml_page": "পাতা", + "dt_xml_template": "টেম্পলেট", + "dt_xml_field": "ফিল্ড", + "dt_xml_name": "নাম", + "dt_xml_title": "শিরোনাম", + "dt_xml_id": "আইডি", + "dt_xml_freetext": "মুক্ত লেখা", + "importxml": "এক্সএমএল আমদানি", + "dt_import_selectfile": "অনুগ্রহ করে আমদানির জন্য $1 ফাইল নির্বাচন করুন:", + "dt_import_encodingtype": "এনকোডিংয়ের ধরন:", + "dt_import_forexisting": "যে পাতাগুলো ইতিমধ্যেই আছে তার জন্য:", + "dt_import_overwriteexisting": "বিদ্যমান বিষয়সমূহ প্রতিস্থাপন করো", + "dt_import_skipexisting": "উপেক্ষা করো", + "dt_import_summarydesc": "আমদানির সারাংশ", + "dt_import_editsummary": "{{ucfirst:$1}} আমদানি", + "dt_import_importing": "আমদানি হচ্ছে...", + "dt_import_success": "$2টি ফাইল থেকে $1টি {{PLURAL:$1|পাতা|পাতা}} তৈরি করা হবে।", + "importcsv": "সিএসভি আমদানি", + "right-datatransferimport": "উপাত্ত আমদানি" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/br.json b/www/wiki/extensions/DataTransfer/i18n/br.json new file mode 100644 index 00000000..d9a36d19 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/br.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Fohanno", + "Fulup", + "Gwendal", + "Y-M D" + ] + }, + "datatransfer-desc": "Aotren a ra enporzhiañ hag ezporzhiañ roadennoù zo e galvoù patromoù", + "viewxml": "Gwelet XML", + "dt_viewxml_docu": "Dibabit e-touez ar rummadoù hag an esaouennoù anv da heul evit gwelet er furmad XML.", + "dt_viewxml_categories": "Rummadoù", + "dt_viewxml_namespaces": "Esaouennoù anv", + "dt_viewxml_simplifiedformat": "Furmad eeunaet", + "dt_xml_namespace": "Esaouenn anv", + "dt_xml_pages": "Pajennoù", + "dt_xml_page": "Pajenn", + "dt_xml_template": "Patrom", + "dt_xml_field": "Maezienn", + "dt_xml_name": "Anv", + "dt_xml_title": "Titl", + "dt_xml_id": "ID", + "dt_xml_freetext": "Testenn dieub", + "importxml": "Enporzhiañ XML", + "dt_import_selectfile": "Dibabit ar restr $1 da enporzhiañ :", + "dt_import_encodingtype": "Seurt enkodadur :", + "dt_import_forexisting": "Evit pajennoù zo anezho dija :", + "dt_import_overwriteexisting": "erlec'hiañ an endalc'had zo anezhañ dija", + "dt_import_mergeintoexisting": "Erlec'hiañ hepken ar maeziennoù a gaver er restr", + "dt_import_skipexisting": "Lezel a-gostez", + "dt_import_appendtoexisting": "Ouzhpennañ d'an endalc'had zo anezhañ dija", + "dt_import_summarydesc": "Diverradenn an enporzh :", + "dt_import_editsummary": "Enporzhiadur {{ucfirst:$1}}", + "dt_import_importing": "Oc'h enporzhiañ...", + "dt_import_success": "$1 {{PLURAL:$1|bajenn|pajenn}} a vo krouet diwar ar restr $2.", + "importcsv": "Enporzh CSV", + "importspreadsheet": "Enporzhiañ ur follenn jediñ", + "dt_importcsv_badheader": "Fazi : titl ar bann $1, \"$2\", a rank bezañ \"$3\", \"$4\" pe gant ar stumm \"anv_ar_patrom[anv_ar_vaezienn]\"", + "right-datatransferimport": "Enporzhiañ roadennoù", + "dt_filetype_spreadsheet": "follenn jediñ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/bs.json b/www/wiki/extensions/DataTransfer/i18n/bs.json new file mode 100644 index 00000000..348c0802 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/bs.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "CERminator", + "Srdjan m" + ] + }, + "datatransfer-desc": "Omogućuje uvoz i izvoz podataka koji su sadržani u pozivima šablona", + "viewxml": "Pregledaj XML", + "dt_viewxml_docu": "Molimo Vas odaberite unutar slijedećih kategorija i imenskih prostora za pregled u XML formatu.", + "dt_viewxml_categories": "Kategorije", + "dt_viewxml_namespaces": "Imenski prostori", + "dt_viewxml_simplifiedformat": "Pojednostavljeni format", + "dt_xml_namespace": "Imenski prostor", + "dt_xml_pages": "Stranice", + "dt_xml_page": "Stranica", + "dt_xml_template": "Šablon", + "dt_xml_field": "Polje", + "dt_xml_name": "Naziv", + "dt_xml_title": "Naslov", + "dt_xml_id": "ID", + "dt_xml_freetext": "Slobodni tekst", + "importxml": "Uvezi XML", + "dt_import_selectfile": "Molimo odaberite $1 datoteku za uvoz:", + "dt_import_encodingtype": "Tip šifriranja:", + "dt_import_forexisting": "Za stranice koje već postoje:", + "dt_import_overwriteexisting": "Piši preko postojećeg sadržaja", + "dt_import_skipexisting": "Preskoči", + "dt_import_appendtoexisting": "Dodaj na postojeći sadržaj", + "dt_import_summarydesc": "Sažetak uvoza:", + "dt_import_editsummary": "{{ucfirst:$1}} uvoz", + "dt_import_importing": "Uvoz...", + "dt_import_success": "$1 {{PLURAL:$1|stranica|stranice|stranica}} će biti napravljeno iz $2 datoteke.", + "importcsv": "Uvoz CSV", + "dt_importcsv_badheader": "Greška: zaglavlje $1 kolone, '$2', mora biti ili '$3', '$4' ili od obrasca 'template_name[field_name]'", + "right-datatransferimport": "Uvoz podataka" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ca.json b/www/wiki/extensions/DataTransfer/i18n/ca.json new file mode 100644 index 00000000..ff554ca9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ca.json @@ -0,0 +1,43 @@ +{ + "@metadata": { + "authors": [ + "Arnaugir", + "Jordi Roqué", + "SMP", + "Solde", + "Toniher" + ] + }, + "datatransfer-desc": "Permet importar i exportar les dades que contenen les crides de les plantilles", + "viewxml": "Visualitza l'XML", + "dt_viewxml_docu": "Seleccioneu d'entre les següents categories i espais de noms per a veure'l en format XML.", + "dt_viewxml_categories": "Categories", + "dt_viewxml_namespaces": "Espais de noms", + "dt_viewxml_simplifiedformat": "Format simplificat", + "dt_xml_namespace": "Espai de noms", + "dt_xml_pages": "Pàgines", + "dt_xml_page": "Pàgina", + "dt_xml_template": "Plantilla", + "dt_xml_field": "Camp", + "dt_xml_name": "Nom", + "dt_xml_title": "Títol", + "dt_xml_id": "ID", + "dt_xml_freetext": "Text lliure", + "importxml": "Importa un XML", + "dt_import_selectfile": "Seleccioneu el fitxer $1 per importar:", + "dt_import_encodingtype": "Joc de caràcters:", + "dt_import_forexisting": "Per a pàgines que ja existeixen:", + "dt_import_overwriteexisting": "Sobreescriu el contingut que ja existeix", + "dt_import_mergeintoexisting": "Sobreescriu només els camps continguts en el fitxer", + "dt_import_skipexisting": "Omet", + "dt_import_appendtoexisting": "Afegeix-ho al contingut existent", + "dt_import_summarydesc": "Resum de la importació:", + "dt_import_editsummary": "Importació de $1", + "dt_import_importing": "S'està important...", + "dt_import_success": "$1 {{PLURAL:$1|pàgina|pàgines}} es crearan des del fitxer $2.", + "importcsv": "Importa un CSV", + "importspreadsheet": "Importa el full de càlcul", + "dt_importcsv_badheader": "Error: la capçalera de la columna $1, '$2', ha de ser o bé '$3', '$4' o bé de la forma 'template_name[field_name]'", + "right-datatransferimport": "Importar dades", + "dt_filetype_spreadsheet": "full de càlcul" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ce.json b/www/wiki/extensions/DataTransfer/i18n/ce.json new file mode 100644 index 00000000..821fba36 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ce.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Sasan700", + "Умар" + ] + }, + "dt_viewxml_categories": "Категореш", + "dt_xml_pages": "АгӀонаш", + "dt_xml_page": "АгӀо", + "dt_xml_template": "Кеп", + "dt_xml_field": "Меттиг", + "dt_xml_name": "ЦӀе", + "dt_xml_title": "Корта", + "dt_xml_id": "ID", + "dt_xml_freetext": "Маьрша йоза", + "importxml": "Импорт XML", + "dt_import_summarydesc": "Импортах лаьцна:", + "dt_import_editsummary": "{{ucfirst:$1}} чура импорт", + "dt_import_importing": "Импорт яр...", + "dt_import_success": "$1 {{PLURAL:$1|агӀо кхоьллина|агӀонаш кхоьллина}} $2 файлах.", + "importcsv": "Импорт CSV", + "importspreadsheet": "Таблицам импорт", + "dt_filetype_spreadsheet": "таблица" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ckb.json b/www/wiki/extensions/DataTransfer/i18n/ckb.json new file mode 100644 index 00000000..d0d99a2a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ckb.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Calak", + "Asoxor" + ] + }, + "dt_xml_pages": "پەڕەکان", + "dt_xml_page": "پەڕە", + "dt_xml_template": "داڕێژە", + "dt_xml_name": "ناو", + "dt_xml_title": "سەردێڕ", + "dt_xml_id": "پێناسە" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/cs.json b/www/wiki/extensions/DataTransfer/i18n/cs.json new file mode 100644 index 00000000..b3ff2860 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/cs.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Jkjk", + "Matěj Grabovský" + ] + }, + "datatransfer-desc": "Umožňuje import a export strukturovaných údajů v buňkách šablon.", + "viewxml": "Zobrazit XML", + "dt_viewxml_categories": "Kategorie", + "dt_viewxml_namespaces": "Jmenné prostory", + "dt_viewxml_simplifiedformat": "Zjednodušený formát", + "dt_xml_namespace": "Jmenný prostor", + "dt_xml_pages": "Stránky", + "dt_xml_page": "Stránka", + "dt_xml_template": "Šablona", + "dt_xml_field": "Pole", + "dt_xml_name": "Název", + "dt_xml_title": "Název", + "dt_xml_id": "ID", + "dt_xml_freetext": "Libovolný text", + "importxml": "Importovat XML", + "dt_import_selectfile": "Prosím vyberte $1 soubor k importu:", + "dt_import_encodingtype": "Typ kódování:", + "dt_import_overwriteexisting": "Přepsat stávající obsah", + "dt_import_skipexisting": "Přeskočit", + "dt_import_appendtoexisting": "Připojit ke stávajícímu obsahu", + "dt_import_summarydesc": "Shrnutí importu:", + "dt_import_editsummary": "import $1", + "dt_import_importing": "Probíhá import...", + "dt_import_success": " $1 {{PLURAL:$1|stránky|stránky|stránek}} bude vytvořeno z $2 souboru.", + "importcsv": "Import CSV", + "right-datatransferimport": "Importovat data" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/cu.json b/www/wiki/extensions/DataTransfer/i18n/cu.json new file mode 100644 index 00000000..cd00195f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/cu.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "ОйЛ" + ] + }, + "dt_xml_name": "имѧ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/cv.json b/www/wiki/extensions/DataTransfer/i18n/cv.json new file mode 100644 index 00000000..459c70e9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/cv.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Chuvash2014" + ] + }, + "dt_viewxml_categories": "Категорисем", + "dt_xml_name": "Ят", + "dt_import_skipexisting": "Ирттер" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/da.json b/www/wiki/extensions/DataTransfer/i18n/da.json new file mode 100644 index 00000000..bfb085d1 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/da.json @@ -0,0 +1,26 @@ +{ + "@metadata": { + "authors": [ + "Jon Harald Søby", + "Tjernobyl", + "Saederup92" + ] + }, + "viewxml": "Vis XML", + "dt_viewxml_categories": "Kategorier", + "dt_viewxml_namespaces": "Navnerum", + "dt_viewxml_simplifiedformat": "Forenklet format", + "dt_xml_namespace": "Navnerum", + "dt_xml_pages": "Sider", + "dt_xml_page": "Side", + "dt_xml_template": "Skabelon", + "dt_xml_field": "Felt", + "dt_xml_name": "Navn", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Fritekst", + "importxml": "Importer XML", + "dt_import_overwriteexisting": "Overskriv eksisterende indhold", + "dt_import_skipexisting": "Spring over", + "dt_import_importing": "Importerer..." +} diff --git a/www/wiki/extensions/DataTransfer/i18n/de.json b/www/wiki/extensions/DataTransfer/i18n/de.json new file mode 100644 index 00000000..cd2a6f2c --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/de.json @@ -0,0 +1,44 @@ +{ + "@metadata": { + "authors": [ + "Als-Holder", + "Kghbln", + "Krabina", + "Metalhead64", + "Revolus", + "Umherirrender" + ] + }, + "datatransfer-desc": "Ermöglicht den Im- und Export von Daten", + "viewxml": "XML ansehen", + "dt_viewxml_docu": "Bitte auswählen, welche Kategorien und Namensräume im XML-Format angezeigt werden sollen:", + "dt_viewxml_categories": "Kategorien", + "dt_viewxml_namespaces": "Namensräume", + "dt_viewxml_simplifiedformat": "Vereinfachtes Format", + "dt_xml_namespace": "Namensraum", + "dt_xml_pages": "Seiten", + "dt_xml_page": "Seite", + "dt_xml_template": "Vorlage", + "dt_xml_field": "Feld", + "dt_xml_name": "Name", + "dt_xml_title": "Titel", + "dt_xml_id": "Kennung", + "dt_xml_freetext": "Freitext", + "importxml": "XML-Datei importieren", + "dt_import_selectfile": "Bitte die zu importierende $1-Datei auswählen:", + "dt_import_encodingtype": "Zeichenkodierung:", + "dt_import_forexisting": "Im Fall von Seiten, die bereits vorhanden sind:", + "dt_import_overwriteexisting": "Vorhandenen Inhalt überschreiben", + "dt_import_mergeintoexisting": "Nur in der Datei enthaltene Felder überschreiben", + "dt_import_skipexisting": "Seite nicht importieren", + "dt_import_appendtoexisting": "Vorhandenen Inhalt ergänzen", + "dt_import_summarydesc": "Zusammenfassung zum Import:", + "dt_import_editsummary": "{{ucfirst:$1}}-Import", + "dt_import_importing": "Importiere …", + "dt_import_success": "{{PLURAL:$1|Eine Seite|$1 Seiten}} werden aus der $2-Datei importiert.", + "importcsv": "CSV-Datei importieren", + "importspreadsheet": "Tabellenkalkulationsdatei importieren", + "dt_importcsv_badheader": "'''Fehler:''' Der Kopf der Spalte $1, „$2“, muss entweder „$3“, „$4“ oder im Format „Vorlagenname[Feldname]“ sein", + "right-datatransferimport": "Daten importieren", + "dt_filetype_spreadsheet": "Tabellenkalkulations" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/diq.json b/www/wiki/extensions/DataTransfer/i18n/diq.json new file mode 100644 index 00000000..83e935c3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/diq.json @@ -0,0 +1,33 @@ +{ + "@metadata": { + "authors": [ + "Erdemaslancan", + "Mirzali", + "Marmase", + "Kumkumuk", + "Gırd" + ] + }, + "viewxml": "XML'i bıvin", + "dt_viewxml_categories": "Kategoriyi", + "dt_viewxml_namespaces": "Heruna naman", + "dt_viewxml_simplifiedformat": "Basit kerde format", + "dt_xml_namespace": "Heruna namey", + "dt_xml_pages": "Peli", + "dt_xml_page": "Pele", + "dt_xml_template": "Şablon", + "dt_xml_field": "Ca", + "dt_xml_name": "Name", + "dt_xml_title": "Sername", + "dt_xml_id": "ID", + "dt_xml_freetext": "Xoser metin", + "importxml": "XML'i azere ke", + "dt_import_selectfile": "Azere kerdışi rê dosyay $1 weçinê", + "dt_import_encodingtype": "Babeta kod kerdışi", + "dt_import_skipexisting": "Çerme", + "dt_import_summarydesc": "Xulasaya azere kerdışi :", + "dt_import_editsummary": "{{ucfirst:$1}} azere de", + "dt_import_importing": "Dano azere...", + "importcsv": "TSV'yi azere de", + "right-datatransferimport": "Malumata zerre ke" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/dsb.json b/www/wiki/extensions/DataTransfer/i18n/dsb.json new file mode 100644 index 00000000..889225e0 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/dsb.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Michawiki" + ] + }, + "datatransfer-desc": "Zmóžnja importěrowanje a eksportěrowanje datow w zawołanjach pśedłogow", + "viewxml": "XML se woglědaś", + "dt_viewxml_docu": "Pšosym wubjeŕ, kótare slědujucych kategorijow a mjenjowych rumow maju se pokazaś w formaśe XML.", + "dt_viewxml_categories": "Kategorije", + "dt_viewxml_namespaces": "Mjenjowe rumy", + "dt_viewxml_simplifiedformat": "Zjadnorjony format", + "dt_xml_namespace": "Mjenjowy rum", + "dt_xml_pages": "Boki", + "dt_xml_page": "Bok", + "dt_xml_template": "Pśedłoga", + "dt_xml_field": "Pólo", + "dt_xml_name": "Mě", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Lichy tekst", + "importxml": "XML importěrowaś", + "dt_import_selectfile": "Pšosym wubjeŕ dataju $1 za importěrowanje:", + "dt_import_encodingtype": "Typ znamuškowego koda:", + "dt_import_forexisting": "Za boki, kótarež južo ekistěruju:", + "dt_import_overwriteexisting": "Eksistěrujuce wopśimjeśe pśepisaś", + "dt_import_mergeintoexisting": "Jano póla pśepisaś, kótarež su w dataji wopśimjone.", + "dt_import_skipexisting": "Pśeskócyś", + "dt_import_appendtoexisting": "K eksistěrujucemu wopśimjeśoju pśipowjesyś", + "dt_import_summarydesc": "Zespominanje importa:", + "dt_import_editsummary": "Importěrowanje $1", + "dt_import_importing": "Importěrujo se...", + "dt_import_success": "$1 {{PLURAL:$1|bok twóri|boka twóritej|boki twórje|bokow twóri}} se z dataje $2.", + "importcsv": "Importěrowanje CSV", + "dt_importcsv_badheader": "Zmólka: głowa słupa $1, '$2', musy pak '$3', '$4' byś pak formu 'mě_pśedłogi[mě_póla]' měś", + "right-datatransferimport": "Daty importěrowaś" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ee.json b/www/wiki/extensions/DataTransfer/i18n/ee.json new file mode 100644 index 00000000..a4eef5f3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ee.json @@ -0,0 +1,4 @@ +{ + "@metadata": [], + "dt_xml_page": "Axa" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/el.json b/www/wiki/extensions/DataTransfer/i18n/el.json new file mode 100644 index 00000000..647a9a2f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/el.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Consta", + "Crazymadlover", + "Glavkos", + "Omnipaedista", + "ZaDiak", + "Nikosgranturismogt" + ] + }, + "viewxml": "Προβολή XML", + "dt_viewxml_categories": "Κατηγορίες", + "dt_viewxml_namespaces": "Περιοχές ονομάτων", + "dt_xml_namespace": "Ονοματοχώρος", + "dt_xml_pages": "Σελίδες", + "dt_xml_page": "Σελίδα", + "dt_xml_template": "Πρότυπο", + "dt_xml_field": "Πεδίο", + "dt_xml_name": "Όνομα", + "dt_xml_title": "Τίτλος", + "dt_xml_id": "ID", + "dt_xml_freetext": "Ελεύθερο Κείμενο", + "importxml": "Εισαγωγή σε XML", + "dt_import_selectfile": "Παρακαλούμε επιλέξτε το αρχείο $1 για εισαγωγή:", + "dt_import_encodingtype": "Τύπος κωδικοποίησης", + "dt_import_forexisting": "Για σελίδες που υπάρχουν ήδη:", + "dt_import_skipexisting": "Παράβλεψη", + "dt_import_summarydesc": "Σύνοψη εισαγωγής:", + "dt_import_editsummary": "{{ucfirst:$1}} εισαγωγή", + "dt_import_importing": "Εισάγεται...", + "importcsv": "Εισαγωγή CSV", + "right-datatransferimport": "Εισαγωγή δεδομένων" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/en.json b/www/wiki/extensions/DataTransfer/i18n/en.json new file mode 100644 index 00000000..46995176 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/en.json @@ -0,0 +1,41 @@ +{ + "@metadata": { + "authors": [ + "Yaron Koren" + ] + }, + "datatransfer-desc": "Allows for importing and exporting data contained in template calls", + "viewxml": "View XML", + "dt_viewxml_docu": "Please select among the following categories and namespaces to view in XML format.", + "dt_viewxml_categories": "Categories", + "dt_viewxml_namespaces": "Namespaces", + "dt_viewxml_simplifiedformat": "Simplified format", + "dt_xml_namespace": "Namespace", + "dt_xml_pages": "Pages", + "dt_xml_page": "Page", + "dt_xml_template": "Template", + "dt_xml_field": "Field", + "dt_xml_name": "Name", + "dt_xml_title": "Title", + "dt_xml_id": "ID", + "dt_xml_freetext": "Free Text", + "importxml": "Import XML", + "dt_import_selectfile": "Please select the $1 file to import:", + "dt_import_encodingtype": "Encoding type:", + "dt_import_forexisting": "For pages that already exist:", + "dt_import_overwriteexisting": "Overwrite existing content", + "dt_import_mergeintoexisting": "Overwrite only fields contained in the file", + "dt_import_skipexisting": "Skip", + "dt_import_appendtoexisting": "Append to existing content", + "dt_import_summarydesc": "Summary of import:", + "dt_import_editsummary": "{{ucfirst:$1}} import", + "dt_import_importing": "Importing...", + "dt_import_success": "$1 {{PLURAL:$1|page|pages}} will be created from the $2 file.", + "importcsv": "Import CSV", + "importspreadsheet": "Import spreadsheet", + "dt_importcsv_badheader": "Error: the column $1 header, '$2', must be either '$3', '$4' or of the form 'template_name[field_name]'", + "right-datatransferimport": "Import data", + "dt_filetype_xml": "XML", + "dt_filetype_csv": "CSV", + "dt_filetype_spreadsheet": "spreadsheet" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/eo.json b/www/wiki/extensions/DataTransfer/i18n/eo.json new file mode 100644 index 00000000..12b3a5a4 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/eo.json @@ -0,0 +1,33 @@ +{ + "@metadata": { + "authors": [ + "Michawiki", + "Yekrats", + "Robin van der Vliet", + "Psychoslave", + "Lucas" + ] + }, + "datatransfer-desc": "Permesas enportadon kaj elportadon de datumoj enhave en ŝablonaj vokoj", + "viewxml": "Vidi XML-on", + "dt_viewxml_docu": "Bonvolu elekti inter la subaj kategorioj kaj nomspacoj por rigardi en XML-formato.", + "dt_viewxml_categories": "Kategorioj", + "dt_viewxml_namespaces": "Nomspacoj", + "dt_viewxml_simplifiedformat": "Simpligita formato", + "dt_xml_namespace": "Nomspaco", + "dt_xml_pages": "Paĝoj", + "dt_xml_page": "Paĝo", + "dt_xml_template": "Ŝablono", + "dt_xml_field": "Kampo", + "dt_xml_name": "Nomo", + "dt_xml_title": "Titolo", + "dt_xml_id": "identigo", + "dt_xml_freetext": "Libera Teksto", + "importxml": "Importi XML", + "dt_import_editsummary": "{{ucfirst:$1}}-enporto", + "dt_import_importing": "Enportante...", + "importcsv": "Importi CSV", + "importspreadsheet": "Importi kalkultabelon", + "right-datatransferimport": "Importi datenojn", + "dt_filetype_spreadsheet": "kalkultabelo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/es.json b/www/wiki/extensions/DataTransfer/i18n/es.json new file mode 100644 index 00000000..05e5559c --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/es.json @@ -0,0 +1,48 @@ +{ + "@metadata": { + "authors": [ + "Armando-Martin", + "Crazymadlover", + "Fitoschido", + "Imre", + "Locos epraix", + "Peter17", + "Sanbec", + "Translationista", + "VegaDark", + "Macofe" + ] + }, + "datatransfer-desc": "Permite importar y exportar datos contenidos en llamadas de plantilla", + "viewxml": "Ver XML", + "dt_viewxml_docu": "Selecciona entre las siguientes categorías y espacios de nombres para ver en formato XML.", + "dt_viewxml_categories": "Categorías", + "dt_viewxml_namespaces": "Espacios de nombres", + "dt_viewxml_simplifiedformat": "Formato simplificado", + "dt_xml_namespace": "Espacio de nombres", + "dt_xml_pages": "Páginas", + "dt_xml_page": "Página", + "dt_xml_template": "Plantilla", + "dt_xml_field": "Campo", + "dt_xml_name": "Nombre", + "dt_xml_title": "Título", + "dt_xml_id": "Id.", + "dt_xml_freetext": "Texto libre", + "importxml": "Importar XML", + "dt_import_selectfile": "Selecciona el archivo $1 que importar:", + "dt_import_encodingtype": "Tipo de codificación:", + "dt_import_forexisting": "Para las páginas que ya existen:", + "dt_import_overwriteexisting": "Sobrescribir el contenido existente", + "dt_import_mergeintoexisting": "Sobrescribir solo los campos contenidos en el archivo", + "dt_import_skipexisting": "Omitir", + "dt_import_appendtoexisting": "Anexar al contenido existente", + "dt_import_summarydesc": "Resumen de importación:", + "dt_import_editsummary": "importación {{ucfirst:$1}}", + "dt_import_importing": "Importando...", + "dt_import_success": "$1 {{PLURAL:$1|página se creará|páginas se crearán}} del archivo $2.", + "importcsv": "Importar CSV", + "importspreadsheet": "Importar hoja de cálculo", + "dt_importcsv_badheader": "Error: el título de columna $1, \"$2\", tiene que ser \"$3\", \"$4\" o de la forma 'nombre_de_plantilla[nombre_del_campo]'", + "right-datatransferimport": "Importar datos", + "dt_filetype_spreadsheet": "hoja de cálculo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/et.json b/www/wiki/extensions/DataTransfer/i18n/et.json new file mode 100644 index 00000000..a0c2b96b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/et.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Avjoska", + "Pikne" + ] + }, + "dt_viewxml_categories": "Kategooriad", + "dt_viewxml_namespaces": "Nimeruumid", + "dt_viewxml_simplifiedformat": "Lihtsustatud vorming", + "dt_xml_namespace": "Nimeruum", + "dt_xml_pages": "Leheküljed", + "dt_xml_page": "Lehekülg", + "dt_xml_template": "Mall", + "dt_xml_field": "Väli", + "dt_xml_name": "Nimi", + "dt_xml_title": "Pealkiri", + "dt_xml_id": "ID", + "dt_import_skipexisting": "Jäta vahele", + "dt_import_importing": "Importimine...", + "right-datatransferimport": "Impordiandmed" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/eu.json b/www/wiki/extensions/DataTransfer/i18n/eu.json new file mode 100644 index 00000000..26cc67a1 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/eu.json @@ -0,0 +1,40 @@ +{ + "@metadata": { + "authors": [ + "Kobazulo", + "Theklan", + "පසිඳු කාවින්ද", + "Xabier Armendaritz", + "An13sa", + "Subi" + ] + }, + "viewxml": "XML ikusi", + "dt_viewxml_categories": "Kategoriak", + "dt_viewxml_namespaces": "Izen-tarteak", + "dt_viewxml_simplifiedformat": "Formatu sinplifikatua", + "dt_xml_namespace": "Izen-tartea", + "dt_xml_pages": "Orrialdeak", + "dt_xml_page": "Orria", + "dt_xml_template": "Txantiloia", + "dt_xml_field": "Eremua", + "dt_xml_name": "Izena", + "dt_xml_title": "Izenburua", + "dt_xml_id": "ID", + "dt_xml_freetext": "Testu askea", + "importxml": "XML inportatu", + "dt_import_selectfile": "Mesedez, aukera ezazu inportatzeko $1 fitxategia:", + "dt_import_encodingtype": "Kodetze mota:", + "dt_import_forexisting": "Jada existitzen diren orrialdeak:", + "dt_import_overwriteexisting": "Jada existitzen den eduki bat gainidatzi", + "dt_import_mergeintoexisting": "Fitxategian dauden eremuak bakarrik gain-idatzi", + "dt_import_skipexisting": "Utzi", + "dt_import_appendtoexisting": "Jada baden edukiari gehitu", + "dt_import_summarydesc": "Inportatze laburpena:", + "dt_import_editsummary": "{{ucfirst:$1}} inportatu", + "dt_import_importing": "Inportatzen...", + "dt_import_success": "{{PLURAL:$1|Orri bat sortuko da|$1 orri sortuko dira}} $2 fitxategitik.", + "importcsv": "CSV inportatu", + "right-datatransferimport": "Datuak inportatu", + "dt_filetype_spreadsheet": "kalkulu-orria" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/fa.json b/www/wiki/extensions/DataTransfer/i18n/fa.json new file mode 100644 index 00000000..56da6c2d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/fa.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Armin1392", + "Mjbmr", + "Alirezaaa" + ] + }, + "datatransfer-desc": "اجازه برای واردات و صادرات اطلاعات حاوی الگوهای تماس", + "viewxml": "مشاهده XML", + "dt_viewxml_docu": "لطفاً برای مشاهده فرمت ایکسامال، از بین دستهبندیها و فضاهای نامی زیر انتخاب کنید.", + "dt_viewxml_categories": "ردهها", + "dt_viewxml_namespaces": "فضاهای نام", + "dt_viewxml_simplifiedformat": "فرمت ساده شده", + "dt_xml_namespace": "فضای نام", + "dt_xml_pages": "صفحات", + "dt_xml_page": "صفحه", + "dt_xml_template": "الگو", + "dt_xml_field": "زمینه", + "dt_xml_name": "نام", + "dt_xml_title": "عنوان", + "dt_xml_id": "شناسه", + "dt_xml_freetext": "متن آزاد", + "importxml": "درونریزی ایکسامال", + "dt_import_selectfile": "لطفاً برای وارد کردن،پوشهٔ $1 را انتخاب کنید:", + "dt_import_encodingtype": "نوع کدگذاری:", + "dt_import_forexisting": "برای صفحاتی که در حال حاضر وجود دارند:", + "dt_import_overwriteexisting": "رونویسی محتوای موجود", + "dt_import_mergeintoexisting": "رونویسی فقط زمینههای شامل در پوشه", + "dt_import_skipexisting": "پرش", + "dt_import_appendtoexisting": "ضمیمه کردن به محتوای موجود", + "dt_import_summarydesc": "خلاصهٔ درونریزی:", + "dt_import_editsummary": "درونریزی $1", + "dt_import_importing": "در حال درونریزی...", + "dt_import_success": "$1 {{PLURAL:$1|page|pages}} از پوشهٔ $2 ایجاد خواهدشد.", + "importcsv": "درونریزی سیاسوی", + "dt_importcsv_badheader": "خطا: سر فصل ستون $1،$2، باید یا $3،$4 یا فرم 'template_name[field_name]' باشد", + "right-datatransferimport": "درونریزی دادهها" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/fi.json b/www/wiki/extensions/DataTransfer/i18n/fi.json new file mode 100644 index 00000000..bb164d2f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/fi.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Centerlink", + "Crt", + "Nedergard", + "Nike", + "Str4nd", + "Vililikku", + "McSalama" + ] + }, + "datatransfer-desc": "Mahdollistaa tuoda ja viedä dataa, joka on mallinekutsuissa.", + "viewxml": "Näytä XML", + "dt_viewxml_docu": "Valitse yksi seuraavista luokista ja nimiavaruuksista tarkasteltavaksi XML-muodossa.", + "dt_viewxml_categories": "Luokat", + "dt_viewxml_namespaces": "Nimiavaruudet", + "dt_viewxml_simplifiedformat": "Yksinkertaistettu muoto", + "dt_xml_namespace": "Nimiavaruus", + "dt_xml_pages": "Sivut", + "dt_xml_page": "Sivu", + "dt_xml_template": "Malline", + "dt_xml_field": "Kenttä", + "dt_xml_name": "Nimi", + "dt_xml_title": "Otsikko", + "dt_xml_id": "Tunniste", + "dt_xml_freetext": "Vapaa teksti", + "importxml": "XML-tuonti", + "dt_import_selectfile": "Valitse $1-tiedosto tuotavaksi:", + "dt_import_encodingtype": "Merkistötyyppi:", + "dt_import_forexisting": "Nykyisille sivuille:", + "dt_import_overwriteexisting": "Korvaa nykyinen sisältö", + "dt_import_skipexisting": "Ohita", + "dt_import_appendtoexisting": "Liitä nykyiseen sisältöön", + "dt_import_summarydesc": "Tuonnin yhteenveto", + "dt_import_editsummary": "{{ucfirst:$1}} tuo", + "dt_import_importing": "Tuodaan...", + "dt_import_success": "$1 {{PLURAL:$1|sivu|sivua}} luodaan $2-tiedostosta.", + "importcsv": "CSV-tuonti", + "dt_importcsv_badheader": "Virhe: sarake $1 otsake, '$2', on oltava joko '$3', '$4' tai muotoa 'mallinne_nimi[kenttä_nimi]'", + "right-datatransferimport": "Tuoda tiedot" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/fr.json b/www/wiki/extensions/DataTransfer/i18n/fr.json new file mode 100644 index 00000000..15e29c7a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/fr.json @@ -0,0 +1,47 @@ +{ + "@metadata": { + "authors": [ + "Crochet.david", + "Grondin", + "IAlex", + "Metroitendo", + "Peter17", + "PieRRoMaN", + "Verdy p", + "Zetud", + "Gomoko" + ] + }, + "datatransfer-desc": "Permet l’import et l’export de données contenues dans des appels de modèles", + "viewxml": "Voir XML", + "dt_viewxml_docu": "Veuillez sélectionner parmi les catégories et les espaces de noms suivants afin de visionner au format XML.", + "dt_viewxml_categories": "Catégories", + "dt_viewxml_namespaces": "Espaces de noms", + "dt_viewxml_simplifiedformat": "Format simplifié", + "dt_xml_namespace": "Espace de noms", + "dt_xml_pages": "Pages", + "dt_xml_page": "Page", + "dt_xml_template": "Modèle", + "dt_xml_field": "Champ", + "dt_xml_name": "Nom", + "dt_xml_title": "Titre", + "dt_xml_id": "Identifiant", + "dt_xml_freetext": "Texte libre", + "importxml": "Import en XML", + "dt_import_selectfile": "Veuillez sélectionner le fichier $1 à importer :", + "dt_import_encodingtype": "Type d’encodage:", + "dt_import_forexisting": "Pour les pages qui existent déjà :", + "dt_import_overwriteexisting": "Remplacer le contenu existant", + "dt_import_mergeintoexisting": "Remplacer uniquement les champs contenus dans le fichier", + "dt_import_skipexisting": "Passer", + "dt_import_appendtoexisting": "Ajouter au contenu existant", + "dt_import_summarydesc": "Résumé de l’import :", + "dt_import_editsummary": "importer en {{ucfirst:$1}}", + "dt_import_importing": "Import en cours...", + "dt_import_success": "$1 {{PLURAL:$1|page sera créée|pages seront créées}} depuis le fichier $2.", + "importcsv": "Import CSV", + "importspreadsheet": "Importer la feuille de calcul", + "dt_importcsv_badheader": "Erreur : le titre de colonne $1, « $2 », doit être soit « $3 », « $4 » ou de la forme « nom_du_modèle[nom_du_champ] »", + "right-datatransferimport": "Importer des données", + "dt_filetype_spreadsheet": "feuille de calcul" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/frp.json b/www/wiki/extensions/DataTransfer/i18n/frp.json new file mode 100644 index 00000000..4e02903b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/frp.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Cedric31", + "ChrisPtDe" + ] + }, + "viewxml": "Vêre XML", + "dt_viewxml_categories": "Catègories", + "dt_viewxml_namespaces": "Èspâços de noms", + "dt_viewxml_simplifiedformat": "Format simplifiâ", + "dt_xml_namespace": "Èspâço de noms", + "dt_xml_pages": "Pâges", + "dt_xml_page": "Pâge", + "dt_xml_template": "Modèlo", + "dt_xml_field": "Champ", + "dt_xml_name": "Nom", + "dt_xml_title": "Titro", + "dt_xml_id": "Numerô", + "dt_xml_freetext": "Tèxto libro", + "importxml": "Importar un XML", + "dt_import_selectfile": "Volyéd chouèsir lo fichiér $1 a importar :", + "dt_import_encodingtype": "Tipo d’encodâjo :", + "dt_import_forexisting": "Por les pâges qu’ègzistont ja :", + "dt_import_overwriteexisting": "Ècllafar lo contegnu ègzistent", + "dt_import_skipexisting": "Passar", + "dt_import_appendtoexisting": "Apondre u contegnu ègzistent", + "dt_import_summarydesc": "Rèsumâ de l’importacion :", + "dt_import_editsummary": "Importacion de $1", + "dt_import_importing": "Importacion en cors...", + "dt_import_success": "$1 {{PLURAL:$1|pâge serat fêta|pâges seront fêtes}} dês lo fichiér $2.", + "importcsv": "Importar des balyês CSV", + "right-datatransferimport": "Importar des balyês" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/fy.json b/www/wiki/extensions/DataTransfer/i18n/fy.json new file mode 100644 index 00000000..75d8cbf9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/fy.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Snakesteuben", + "Robin0van0der0vliet", + "Robin van der Vliet" + ] + }, + "dt_viewxml_categories": "Kategoryen", + "dt_viewxml_namespaces": "Nammeromten", + "dt_xml_namespace": "Nammeromte", + "dt_xml_page": "Side", + "dt_xml_name": "Namme" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ga.json b/www/wiki/extensions/DataTransfer/i18n/ga.json new file mode 100644 index 00000000..971c2b17 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ga.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Alison", + "පසිඳු කාවින්ද" + ] + }, + "dt_viewxml_categories": "Catagóirí", + "dt_xml_namespace": "Ainmspás", + "dt_xml_pages": "Leathanaigh", + "dt_xml_page": "Leathanach", + "dt_xml_template": "Teimpléad", + "dt_xml_name": "Ainm", + "dt_xml_title": "Teideal" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/gl.json b/www/wiki/extensions/DataTransfer/i18n/gl.json new file mode 100644 index 00000000..9c127743 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/gl.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Alma", + "Toliño", + "Elisardojm", + "Banjo" + ] + }, + "datatransfer-desc": "Permite importar e exportar datos contidos en chamadas de modelos", + "viewxml": "Ver XML", + "dt_viewxml_docu": "Por favor seleccione entre as seguintes categorías e espazos de nomes para ver en formato XML.", + "dt_viewxml_categories": "Categorías", + "dt_viewxml_namespaces": "Espazos de nomes", + "dt_viewxml_simplifiedformat": "Formato simplificado", + "dt_xml_namespace": "Espazo de nomes", + "dt_xml_pages": "Páxinas", + "dt_xml_page": "Páxina", + "dt_xml_template": "Modelo", + "dt_xml_field": "Campo", + "dt_xml_name": "Nome", + "dt_xml_title": "Título", + "dt_xml_id": "ID", + "dt_xml_freetext": "Texto libre", + "importxml": "Importar XML", + "dt_import_selectfile": "Por favor, seleccione o ficheiro $1 a importar:", + "dt_import_encodingtype": "Tipo de codificación:", + "dt_import_forexisting": "Para páxinas que xa existen:", + "dt_import_overwriteexisting": "Sobrescribir o contido existente", + "dt_import_mergeintoexisting": "Sobrescribir só os campos contidos no ficheiro", + "dt_import_skipexisting": "Omitir", + "dt_import_appendtoexisting": "Engadir ao contido existente", + "dt_import_summarydesc": "Resumo da importación:", + "dt_import_editsummary": "Importación de {{ucfirst:$1}}", + "dt_import_importing": "Importando...", + "dt_import_success": "{{PLURAL:$1|Unha páxina será creada|$1 páxinas serán creadas}} a partir do ficheiro $2.", + "importcsv": "Importación en CSV", + "importspreadsheet": "Importar folla de cálculo", + "dt_importcsv_badheader": "Erro: a cabeceira da columna $1, \"$2\", debe ser un \"$3\", \"$4\" ou do formulario \"template_name[field_name]\"", + "right-datatransferimport": "Importar datos", + "dt_filetype_spreadsheet": "folla de cálculo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/got.json b/www/wiki/extensions/DataTransfer/i18n/got.json new file mode 100644 index 00000000..54292635 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/got.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Jocke Pirat", + "Gothicspeaker" + ] + }, + "dt_xml_namespace": "𐌽𐌰𐌼𐌰𐍂𐌿𐌼" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/grc.json b/www/wiki/extensions/DataTransfer/i18n/grc.json new file mode 100644 index 00000000..51d6e80a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/grc.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Crazymadlover", + "Omnipaedista" + ] + }, + "dt_viewxml_categories": "Κατηγορίαι", + "dt_viewxml_namespaces": "Ὀνοματεῖα", + "dt_xml_namespace": "Ὀνοματεῖον", + "dt_xml_pages": "Δέλτοι", + "dt_xml_page": "Δέλτος", + "dt_xml_template": "Πρότυπον", + "dt_xml_field": "Πεδίον", + "dt_xml_name": "Ὄνομα", + "dt_xml_title": "Ἐπιγραφή", + "dt_xml_freetext": "Ἐλεύθερον κείμενον" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/gsw.json b/www/wiki/extensions/DataTransfer/i18n/gsw.json new file mode 100644 index 00000000..b6e011f3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/gsw.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Als-Holder", + "J. 'mach' wust" + ] + }, + "datatransfer-desc": "Macht dr Import un dr Export vu strukturierte Date megli, wu in Ufrief vu Vorlage bruucht wäre.", + "viewxml": "XML aaluege", + "dt_viewxml_docu": "Bitte wehl uus, weli Kategorien un Namensryym im XML-Format solle aazeigt wäre.", + "dt_viewxml_categories": "Kategorie", + "dt_viewxml_namespaces": "Namensryym", + "dt_viewxml_simplifiedformat": "Vereifacht Format", + "dt_xml_namespace": "Namensruum", + "dt_xml_pages": "Syte", + "dt_xml_page": "Syte", + "dt_xml_template": "Vorlag", + "dt_xml_field": "Fäld", + "dt_xml_name": "Name", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Freje Täxt", + "importxml": "XML importiere", + "dt_import_selectfile": "Bitte wehl d $1-Datei zum importiere uus:", + "dt_import_encodingtype": "Verschlisseligstyp:", + "dt_import_forexisting": "Im Fall vu Syte, wu s scho git:", + "dt_import_overwriteexisting": "Vorhandene Inhalt iberschryybe", + "dt_import_skipexisting": "Ibergumpe", + "dt_import_appendtoexisting": "Vorhandene Inhalt ergänze", + "dt_import_summarydesc": "Zämmefassig vum Import:", + "dt_import_editsummary": "$1-Import", + "dt_import_importing": "Am Importiere ...", + "dt_import_success": "$1 {{PLURAL:$1|Syte|Syte}} wäre us dr $2-Datei aagleit.", + "importcsv": "CSV-Datei importiere", + "dt_importcsv_badheader": "Fähler: d Spalte $1 Iberschrift, '$2', muess entwäder '$3', '$4' syy oder us em Format 'template_name[field_name]'", + "right-datatransferimport": "Date importiere" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/gv.json b/www/wiki/extensions/DataTransfer/i18n/gv.json new file mode 100644 index 00000000..4c9e5f7b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/gv.json @@ -0,0 +1,13 @@ +{ + "@metadata": { + "authors": [ + "MacTire02" + ] + }, + "viewxml": "Jeeagh er XML", + "dt_viewxml_categories": "Ronnaghyn", + "dt_xml_page": "Duillag", + "dt_xml_name": "Ennym", + "dt_xml_title": "Ard-ennym", + "dt_xml_freetext": "Teks seyr" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ha.json b/www/wiki/extensions/DataTransfer/i18n/ha.json new file mode 100644 index 00000000..189d5659 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ha.json @@ -0,0 +1,5 @@ +{ + "@metadata": [], + "dt_xml_namespace": "Sararin suna", + "dt_xml_page": "Shafi" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/haw.json b/www/wiki/extensions/DataTransfer/i18n/haw.json new file mode 100644 index 00000000..20a735bc --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/haw.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Singularity" + ] + }, + "dt_xml_page": "‘Ao‘ao", + "dt_xml_name": "Inoa" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/he.json b/www/wiki/extensions/DataTransfer/i18n/he.json new file mode 100644 index 00000000..bd1de980 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/he.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Amire80", + "Rotemliss", + "YaronSh", + "Guycn2" + ] + }, + "datatransfer-desc": "מתן אפשרות לייבא ולייצא נתונים בקריאות לתבניות", + "viewxml": "הצגת XML", + "dt_viewxml_docu": "יש לבחור את הקטגוריות ואת מרחבי השם שיוצגו בפורמט XML.", + "dt_viewxml_categories": "קטגוריות", + "dt_viewxml_namespaces": "מרחבי שם", + "dt_viewxml_simplifiedformat": "מבנה מפושט", + "dt_xml_namespace": "מרחב שם", + "dt_xml_pages": "דפים", + "dt_xml_page": "דף", + "dt_xml_template": "תבנית", + "dt_xml_field": "שדה", + "dt_xml_name": "שם", + "dt_xml_title": "כותרת", + "dt_xml_id": "מזהה (ID)", + "dt_xml_freetext": "טקסט חופשי", + "importxml": "ייבוא XML", + "dt_import_selectfile": "נא לבחור את קובץ ה־$1 לייבוא:", + "dt_import_encodingtype": "סוג הקידוד:", + "dt_import_forexisting": "עבור הדפים שכבר קיימים:", + "dt_import_overwriteexisting": "לדרוס את התוכן הקיים", + "dt_import_mergeintoexisting": "לדרוס רק שדות שהקובץ מכיל", + "dt_import_skipexisting": "לדלג", + "dt_import_appendtoexisting": "לצרף את התוכן הקיים", + "dt_import_summarydesc": "תקציר היבוא:", + "dt_import_editsummary": "ייבוא של {{ucfirst:$1}}", + "dt_import_importing": "מתבצע יבוא...", + "dt_import_success": "{{PLURAL:$1|דף אחד ייווצר|$1 דפים ייווצרו}} מקובץ ה־$2.", + "importcsv": "יבוא CSV", + "importspreadsheet": "גיליון נתונים של ייבוא", + "dt_importcsv_badheader": "שגיאה: כותרת העמודה $1, '$2', חייבת להיות או '$3', '$4' או מהצורה 'שם_התבנית[שם_השדה]'", + "right-datatransferimport": "ייבוא נתונים", + "dt_filetype_spreadsheet": "גיליון נתונים" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/hi.json b/www/wiki/extensions/DataTransfer/i18n/hi.json new file mode 100644 index 00000000..181ea301 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/hi.json @@ -0,0 +1,29 @@ +{ + "@metadata": { + "authors": [ + "Ansumang", + "Kaustubh", + "Siddhartha Ghai", + "Sfic", + "Rajat11" + ] + }, + "datatransfer-desc": "टेम्प्लेट कॉल में उपलब्ध डाटाकी आयात-निर्यात करने की अनुमति देता हैं", + "viewxml": "XML देखें", + "dt_viewxml_docu": "कॄपया XML में देखने के लिये श्रेणीयाँ और नामस्थान चुनें।", + "dt_viewxml_categories": "श्रेणियाँ", + "dt_viewxml_namespaces": "नामस्थान", + "dt_viewxml_simplifiedformat": "आसान फॉरमैट", + "dt_xml_namespace": "नामस्थान", + "dt_xml_pages": "पृष्ठ", + "dt_xml_page": "पन्ना", + "dt_xml_template": "साँचा", + "dt_xml_field": "फ़ील्ड", + "dt_xml_name": "नाम", + "dt_xml_title": "शीर्षक", + "dt_xml_id": "आईडी", + "dt_xml_freetext": "मुक्त पाठ", + "dt_import_skipexisting": "छोड़ें", + "dt_import_editsummary": "{{ucfirst:$1}} आयात", + "right-datatransferimport": "डेटा आयात करें" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/hr.json b/www/wiki/extensions/DataTransfer/i18n/hr.json new file mode 100644 index 00000000..9347643d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/hr.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Dalibor Bosits" + ] + }, + "dt_viewxml_categories": "Kategorije", + "dt_xml_namespace": "Imenski prostor", + "dt_xml_page": "Stranica" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/hsb.json b/www/wiki/extensions/DataTransfer/i18n/hsb.json new file mode 100644 index 00000000..c711906b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/hsb.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Michawiki" + ] + }, + "datatransfer-desc": "Dowola importowanje a eksportowanje datow, kotrež su we wołanjach předłohow wobsahowane", + "viewxml": "XML wobhladać", + "dt_viewxml_docu": "Prošu wubjer ze slědowacych kategorijow a mjenowych rumow, zo by w XML-formaće wobhladał.", + "dt_viewxml_categories": "Kategorije", + "dt_viewxml_namespaces": "Mjenowe rumy", + "dt_viewxml_simplifiedformat": "Zjednorjeny format", + "dt_xml_namespace": "Mjenowy rum", + "dt_xml_pages": "Strony", + "dt_xml_page": "Strona", + "dt_xml_template": "Předłoha", + "dt_xml_field": "Polo", + "dt_xml_name": "Mjeno", + "dt_xml_title": "Titul", + "dt_xml_id": "Id", + "dt_xml_freetext": "Swobodny tekst", + "importxml": "XML importować", + "dt_import_selectfile": "Prošu wubjer dataju $1 za importowanje:", + "dt_import_encodingtype": "Typ znamješkoweho koda:", + "dt_import_forexisting": "Za strony, kotrež hižo eksistuja:", + "dt_import_overwriteexisting": "Eksistowacy wobsah přepisać", + "dt_import_mergeintoexisting": "Jenož pola přepisać, kotrež su w dataji wobsahowane.", + "dt_import_skipexisting": "Přeskočić", + "dt_import_appendtoexisting": "K eksistowacemu wobsahej připowěsnyć", + "dt_import_summarydesc": "Zjeće importa:", + "dt_import_editsummary": "Importowanje $1", + "dt_import_importing": "Importuje so...", + "dt_import_success": "$1 {{PLURAL:$1|strona so z dataje $2 twori|stronje so z dataje $2 tworitej|strony so z dataje $2 tworja|stronow so z dataje $2 twori}}.", + "importcsv": "Importowanje CSV", + "dt_importcsv_badheader": "Zmylk: hłowa špalty $1, '$2', dyrbi pak '$3', '$4' być pak formu 'mjeno_předłohi[mjeno_pola]' měć", + "right-datatransferimport": "Daty importować" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/hu.json b/www/wiki/extensions/DataTransfer/i18n/hu.json new file mode 100644 index 00000000..49ae99c8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/hu.json @@ -0,0 +1,38 @@ +{ + "@metadata": { + "authors": [ + "Dani", + "Dj", + "Glanthor Reviol" + ] + }, + "datatransfer-desc": "Lehetővé teszi a sablonhívásokban található adatok importálását és exportálását", + "viewxml": "XML megtekintése", + "dt_viewxml_docu": "Válaszd ki a kategóriák és a névterek közül azt, amelyiket meg akarod tekinteni XML formátumban.", + "dt_viewxml_categories": "Kategóriák", + "dt_viewxml_namespaces": "Névterek", + "dt_viewxml_simplifiedformat": "Egyszerűsített formátum", + "dt_xml_namespace": "Névtér", + "dt_xml_pages": "Lapok", + "dt_xml_page": "Lap", + "dt_xml_template": "Sablon", + "dt_xml_field": "Mező", + "dt_xml_name": "Név", + "dt_xml_title": "Cím", + "dt_xml_id": "Azonosító", + "dt_xml_freetext": "Szabad szöveg", + "importxml": "XML importálás", + "dt_import_selectfile": "Kérlek válaszd ki az importálandó $1 fájlt:", + "dt_import_encodingtype": "Kódolás típusa:", + "dt_import_forexisting": "Már létező lapok esetén:", + "dt_import_overwriteexisting": "Meglévő tartalom felülírása", + "dt_import_skipexisting": "Kihagyás", + "dt_import_appendtoexisting": "Hozzáfűzés a meglévő tartalomhoz", + "dt_import_summarydesc": "Az importálás összefoglalója:", + "dt_import_editsummary": "$1 importálás", + "dt_import_importing": "Importálás…", + "dt_import_success": "{{PLURAL:$1|egy|$1}} lap fog készülni a(z) $2 fájlból.", + "importcsv": "CSV importálása", + "dt_importcsv_badheader": "Hiba: a(z) $1 oszlop fejlécének („$2”) vagy „$3”, „$4”, vagy pedig „sablonnév[mezőnév]” formátumúnak kell lennie", + "right-datatransferimport": "Adatok importálása" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ia.json b/www/wiki/extensions/DataTransfer/i18n/ia.json new file mode 100644 index 00000000..117b666f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ia.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "McDutchie" + ] + }, + "datatransfer-desc": "Permitte importar e exportar datos continite in appellos a patronos", + "viewxml": "Vider XML", + "dt_viewxml_docu": "Per favor selige inter le sequente categorias e spatios de nomines pro vider in formato XML.", + "dt_viewxml_categories": "Categorias", + "dt_viewxml_namespaces": "Spatios de nomines", + "dt_viewxml_simplifiedformat": "Formato simplificate", + "dt_xml_namespace": "Spatio de nomines", + "dt_xml_pages": "Paginas", + "dt_xml_page": "Pagina", + "dt_xml_template": "Patrono", + "dt_xml_field": "Campo", + "dt_xml_name": "Nomine", + "dt_xml_title": "Titulo", + "dt_xml_id": "ID", + "dt_xml_freetext": "Texto libere", + "importxml": "Importar XML", + "dt_import_selectfile": "Per favor selige le file $1 a importar:", + "dt_import_encodingtype": "Typo de codification:", + "dt_import_forexisting": "Pro paginas que ja existe:", + "dt_import_overwriteexisting": "Superscriber le contento existente", + "dt_import_mergeintoexisting": "Superscriber solmente le campos continite in le file", + "dt_import_skipexisting": "Saltar", + "dt_import_appendtoexisting": "Adjunger al contento existente", + "dt_import_summarydesc": "Summario de importation:", + "dt_import_editsummary": "Importation de {{ucfirst:$1}}", + "dt_import_importing": "Importation in curso…", + "dt_import_success": "$1 {{PLURAL:$1|pagina|paginas}} essera create ex le file $2.", + "importcsv": "Importar CSV", + "importspreadsheet": "Importar folio de calculo", + "dt_importcsv_badheader": "Error: le capite del columna $1, '$2', debe esser '$3', '$4' o in le forma 'nomine_de_patrono[nomine_de_campo]'", + "right-datatransferimport": "Importar datos", + "dt_filetype_spreadsheet": "folio de calculo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/id.json b/www/wiki/extensions/DataTransfer/i18n/id.json new file mode 100644 index 00000000..68903678 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/id.json @@ -0,0 +1,40 @@ +{ + "@metadata": { + "authors": [ + "Bennylin", + "Farras", + "Irwangatot", + "IvanLanin", + "Rex" + ] + }, + "datatransfer-desc": "Membolehkan untuk impor dan ekspor data diisikan pada pemangilan templat", + "viewxml": "Tilik XML", + "dt_viewxml_docu": "Silakan pilih di antara kategori dan ruang nama berikut untuk melihat dalam format XML", + "dt_viewxml_categories": "Kategori", + "dt_viewxml_namespaces": "Ruang nama", + "dt_viewxml_simplifiedformat": "Penyederhanaan format", + "dt_xml_namespace": "Ruang nama", + "dt_xml_pages": "Halaman", + "dt_xml_page": "Halaman", + "dt_xml_template": "Templat", + "dt_xml_field": "Ruas", + "dt_xml_name": "Nama", + "dt_xml_title": "Judul", + "dt_xml_id": "ID", + "dt_xml_freetext": "Teks Bebas", + "importxml": "Impor XML", + "dt_import_selectfile": "Pilih berkas $1 untuk di impor:", + "dt_import_encodingtype": "Tipe penyandian:", + "dt_import_forexisting": "Untuk halaman yang sudah ada:", + "dt_import_overwriteexisting": "Menimpa konten yang ada", + "dt_import_skipexisting": "Lewati", + "dt_import_appendtoexisting": "Tambahkan kepada konten yang ada", + "dt_import_summarydesc": "Ringkasan impor:", + "dt_import_editsummary": "$1 impor", + "dt_import_importing": "Mengimpor...", + "dt_import_success": "$1 {{PLURAL:$1|halaman|halaman}} akan di buat dari berkas $2.", + "importcsv": "Impor CSV", + "dt_importcsv_badheader": "Kesalahan: kepala kolom $1, '$2', harus berupa '$3', '$4' atau bentuk 'template_name [field_name]'", + "right-datatransferimport": "Impor data" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ig.json b/www/wiki/extensions/DataTransfer/i18n/ig.json new file mode 100644 index 00000000..1314934f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ig.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Ukabia" + ] + }, + "dt_viewxml_categories": "Ụdàkọ", + "dt_viewxml_namespaces": "Ahàm̀bara", + "dt_xml_namespace": "Ahàm̀bara", + "dt_xml_pages": "Ihü", + "dt_xml_page": "Ihü", + "dt_xml_template": "Àtụ", + "dt_xml_name": "Áhà", + "dt_import_skipexisting": "Gáfè" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/inh.json b/www/wiki/extensions/DataTransfer/i18n/inh.json new file mode 100644 index 00000000..2b3fb19f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/inh.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Adam-Yourist", + "Kaganer" + ] + }, + "dt_viewxml_namespaces": "ЦӀерий моттигаш", + "dt_xml_template": "Ло" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/io.json b/www/wiki/extensions/DataTransfer/i18n/io.json new file mode 100644 index 00000000..0edc7386 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/io.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Malafaya" + ] + }, + "dt_xml_template": "Shablono", + "dt_xml_name": "Nomo", + "dt_xml_title": "Titulo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/is.json b/www/wiki/extensions/DataTransfer/i18n/is.json new file mode 100644 index 00000000..ec4ea646 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/is.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "S.Örvarr.S", + "පසිඳු කාවින්ද" + ] + }, + "dt_viewxml_namespaces": "Nafnrými", + "dt_xml_namespace": "Nafnrými", + "dt_xml_pages": "Síður", + "dt_xml_page": "Síða", + "dt_xml_field": "Svæði", + "dt_xml_name": "Nafn", + "dt_xml_title": "Titill", + "dt_import_skipexisting": "Sleppa" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/it.json b/www/wiki/extensions/DataTransfer/i18n/it.json new file mode 100644 index 00000000..a4806f40 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/it.json @@ -0,0 +1,41 @@ +{ + "@metadata": { + "authors": [ + "Beta16", + "BrokenArrow", + "Darth Kule" + ] + }, + "datatransfer-desc": "Permette l'importazione e l'esportazione di dati strutturati contenuti in chiamate a template", + "viewxml": "Vedi XML", + "dt_viewxml_docu": "Selezionare tra le categorie e namespace indicati di seguito quelli da visualizzare in formato XML.", + "dt_viewxml_categories": "Categorie", + "dt_viewxml_namespaces": "Namespace", + "dt_viewxml_simplifiedformat": "Formato semplificato", + "dt_xml_namespace": "Namespace", + "dt_xml_pages": "Pagine", + "dt_xml_page": "Pagina", + "dt_xml_template": "Template", + "dt_xml_field": "Campo", + "dt_xml_name": "Nome", + "dt_xml_title": "Titolo", + "dt_xml_id": "ID", + "dt_xml_freetext": "Testo libero", + "importxml": "Importa XML", + "dt_import_selectfile": "Seleziona il file $1 da importare:", + "dt_import_encodingtype": "Tipo di codifica", + "dt_import_forexisting": "Per le pagine già esistenti:", + "dt_import_overwriteexisting": "Sovrascrivi il contenuto esistente", + "dt_import_mergeintoexisting": "Sovrascrivi solo i campi contenuti nel file", + "dt_import_skipexisting": "Salta", + "dt_import_appendtoexisting": "Aggiungi al contenuto esistente", + "dt_import_summarydesc": "Oggetto dell'importazione:", + "dt_import_editsummary": "Importazione {{ucfirst:$1}}", + "dt_import_importing": "Sto importando...", + "dt_import_success": "$1 {{PLURAL:$1|pagina|pagine}} saranno create dal file $2.", + "importcsv": "Importa CSV", + "importspreadsheet": "Importa foglio di calcolo", + "dt_importcsv_badheader": "Errore: l'intestazione della colonna $1, \"$2\", deve avere uno dei seguenti valori: '$3', '$4' o il formato 'nome_template[nome_campo]'", + "right-datatransferimport": "Importa dati", + "dt_filetype_spreadsheet": "foglio di calcolo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ja.json b/www/wiki/extensions/DataTransfer/i18n/ja.json new file mode 100644 index 00000000..9cbf0c9b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ja.json @@ -0,0 +1,47 @@ +{ + "@metadata": { + "authors": [ + "Aotake", + "Fryed-peach", + "JtFuruhata", + "Ohgi", + "Shirayuki", + "青子守歌", + "Shield-9", + "Otokoume", + "2nd-player" + ] + }, + "datatransfer-desc": "テンプレート呼び出しに含まれるデータの取り込みおよび書き出しができるようにする", + "viewxml": "XMLを表示", + "dt_viewxml_docu": "XML 形式で表示するカテゴリや名前空間を以下から選択してください。", + "dt_viewxml_categories": "カテゴリ", + "dt_viewxml_namespaces": "名前空間", + "dt_viewxml_simplifiedformat": "簡易形式", + "dt_xml_namespace": "名前空間", + "dt_xml_pages": "ページ群", + "dt_xml_page": "ページ", + "dt_xml_template": "テンプレート", + "dt_xml_field": "フィールド", + "dt_xml_name": "名前", + "dt_xml_title": "タイトル", + "dt_xml_id": "ID", + "dt_xml_freetext": "自由形式テキスト", + "importxml": "XMLを取り込む", + "dt_import_selectfile": "取り込む $1 ファイルを選択してください:", + "dt_import_encodingtype": "エンコーディング方式:", + "dt_import_forexisting": "既存のページの場合:", + "dt_import_overwriteexisting": "既存の内容に上書き", + "dt_import_mergeintoexisting": "ファイルに含まれるフィールドのみを上書き", + "dt_import_skipexisting": "スキップ", + "dt_import_appendtoexisting": "既存の内容に追加", + "dt_import_summarydesc": "取り込みの要約:", + "dt_import_editsummary": "{{ucfirst:$1}} の取り込み", + "dt_import_importing": "取り込み中...", + "dt_import_success": "$2 ファイルから $1 {{PLURAL:$1|ページ}}が作成されます。", + "importcsv": "CSVの取り込み", + "importspreadsheet": "スプレッドシートの取り込み", + "dt_importcsv_badheader": "エラー: 列 $1 のヘッダー「$2」は、「$3」または「$4」であるか、「テンプレート名[フィールド名]」の形式である必要があります", + "right-datatransferimport": "データを取り込む", + "dt_filetype_spreadsheet": "スプレッドシート" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/jv.json b/www/wiki/extensions/DataTransfer/i18n/jv.json new file mode 100644 index 00000000..c2c30ecc --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/jv.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Meursault2004", + "NoiX180" + ] + }, + "viewxml": "Deleng XML", + "dt_viewxml_categories": "Kategori", + "dt_viewxml_simplifiedformat": "Format prasaja", + "dt_xml_namespace": "Bilik nama", + "dt_xml_page": "Kaca", + "dt_xml_name": "Jeneng", + "dt_xml_title": "Sesirah", + "dt_xml_id": "ID", + "dt_xml_freetext": "Tèks Bébas" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ka.json b/www/wiki/extensions/DataTransfer/i18n/ka.json new file mode 100644 index 00000000..69a979ec --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ka.json @@ -0,0 +1,30 @@ +{ + "@metadata": { + "authors": [ + "David1010" + ] + }, + "viewxml": "XML-ის ხილვა", + "dt_viewxml_categories": "კატეგორიები", + "dt_viewxml_namespaces": "სახელთა სივრცეები", + "dt_viewxml_simplifiedformat": "გამარტივებული ფორმატი", + "dt_xml_namespace": "სახელთა სივრცე", + "dt_xml_pages": "გვერდები", + "dt_xml_page": "გვერდი", + "dt_xml_template": "თარგი", + "dt_xml_field": "ველი", + "dt_xml_name": "სახელი", + "dt_xml_title": "სათაური", + "dt_xml_id": "ID", + "dt_xml_freetext": "თავისუფალი ტექსტი", + "importxml": "XML-ის იმპორტი", + "dt_import_selectfile": "გთხოვთ, აირჩიეთ $1 ფაილი იმპორტისათვის:", + "dt_import_encodingtype": "კოდირების ტიპი:", + "dt_import_forexisting": "გვერდებისათვის რომლებიც უკვე არსებობენ:", + "dt_import_skipexisting": "გამოტოვება", + "dt_import_summarydesc": "იმპორტის აღწერა:", + "dt_import_editsummary": "{{ucfirst:$1}} იმპორტი", + "dt_import_importing": "იმპორტირება...", + "importcsv": "CSV-ის იმპორტი", + "right-datatransferimport": "მონაცემების იმპორტირება" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/km.json b/www/wiki/extensions/DataTransfer/i18n/km.json new file mode 100644 index 00000000..5c2c8d15 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/km.json @@ -0,0 +1,38 @@ +{ + "@metadata": { + "authors": [ + "Chhorran", + "Lovekhmer", + "Thearith", + "គីមស៊្រុន", + "វ័ណថារិទ្ធ" + ] + }, + "viewxml": "មើល XML", + "dt_viewxml_docu": "ជ្រើសយកក្នុងចំណោមចំណាត់ថ្នាក់ក្រុមនិងលំហឈ្មោះដើម្បីមើលជាទម្រង់ XML ។", + "dt_viewxml_categories": "ចំណាត់ថ្នាក់ក្រុម", + "dt_viewxml_namespaces": "ប្រភេទ", + "dt_viewxml_simplifiedformat": "ទម្រង់សាមញ្ញ", + "dt_xml_namespace": "លំហឈ្មោះ", + "dt_xml_pages": "ទំព័រ", + "dt_xml_page": "ទំព័រ", + "dt_xml_template": "ទំព័រគំរូ", + "dt_xml_field": "ផ្នែក", + "dt_xml_name": "ឈ្មោះ", + "dt_xml_title": "ចំណងជើង", + "dt_xml_id": "អត្តសញ្ញាណ", + "dt_xml_freetext": "អត្ថបទសេរី", + "importxml": "នាំចូល XML", + "dt_import_selectfile": "សូមជ្រើសរើសឯកសារ $1 ដើម្បីនាំចូល៖", + "dt_import_encodingtype": "ប្រភេទនៃការធ្វើកូដ៖", + "dt_import_forexisting": "សំរាប់ទំព័រដែលមានរួចហើយ៖", + "dt_import_overwriteexisting": "សរសេរជាន់ពីលើខ្លឹមសារដែលមានហើយ", + "dt_import_skipexisting": "រំលង", + "dt_import_appendtoexisting": "សរសេរបន្ថែមទៅលើខ្លឹមសារដែលមានហើយ", + "dt_import_summarydesc": "ចំណារពន្យល់ស្ដីពីការនាំចូល៖", + "dt_import_editsummary": "$1 នាំចូល", + "dt_import_importing": "កំពុងនាំចូល...", + "dt_import_success": "ទំព័រចំនួន $1 នឹងត្រូវបានបង្កើតពីឯកសារ $2 នេះ។", + "importcsv": "នាំចូល CSV", + "right-datatransferimport": "នាំចូលទិន្នន័យ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/kn.json b/www/wiki/extensions/DataTransfer/i18n/kn.json new file mode 100644 index 00000000..5bd3c398 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/kn.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "Nayvik", + "VASANTH S.N." + ] + }, + "dt_viewxml_categories": "ವರ್ಗಗಳು", + "dt_viewxml_namespaces": "ನಾಮವರ್ಗಗಳು", + "dt_xml_namespace": "ನಾಮವರ್ಗ", + "dt_xml_pages": "ಪುಟಗಳು", + "dt_xml_page": "ಪುಟ", + "dt_xml_template": "ಟೆಂಪ್ಲೇಟು", + "dt_xml_name": "ಹೆಸರು", + "dt_xml_title": "ಶೀರ್ಷಿಕೆ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ko.json b/www/wiki/extensions/DataTransfer/i18n/ko.json new file mode 100644 index 00000000..bfdaecc7 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ko.json @@ -0,0 +1,44 @@ +{ + "@metadata": { + "authors": [ + "Daisy2002", + "Yjs5497", + "아라", + "Hwangjy9", + "Revi", + "Ykhwong" + ] + }, + "datatransfer-desc": "틀 호출에 포함된 데이터를 가져오기와 내보내기를 할 수 있게 합니다", + "viewxml": "XML 보기", + "dt_viewxml_docu": "XML 형식으로 보려면 다음 분류와 이름공간 중에서 선택하세요.", + "dt_viewxml_categories": "분류", + "dt_viewxml_namespaces": "이름공간", + "dt_viewxml_simplifiedformat": "단순화된 형식", + "dt_xml_namespace": "이름공간", + "dt_xml_pages": "문서", + "dt_xml_page": "문서", + "dt_xml_template": "틀", + "dt_xml_field": "필드", + "dt_xml_name": "이름", + "dt_xml_title": "제목", + "dt_xml_id": "ID", + "dt_xml_freetext": "자유 텍스트", + "importxml": "XML 가져오기", + "dt_import_selectfile": "가져오려면 $1 파일을 선택하세요:", + "dt_import_encodingtype": "인코딩 유형:", + "dt_import_forexisting": "이미 존재하는 문서이면:", + "dt_import_overwriteexisting": "기존 내용을 덮어쓰기", + "dt_import_mergeintoexisting": "파일에 포함된 필드만 덮어쓰기", + "dt_import_skipexisting": "건너뛰기", + "dt_import_appendtoexisting": "기존 내용에 추가", + "dt_import_summarydesc": "가져오기의 요약:", + "dt_import_editsummary": "{{ucfirst:$1}} 가져오기", + "dt_import_importing": "가져오는 중...", + "dt_import_success": "{{PLURAL:$1|문서}} $1개가 $2 파일에서 만들어집니다.", + "importcsv": "CSV 가져오기", + "importspreadsheet": "스프레드시트 들여오기", + "dt_importcsv_badheader": "오류: $1열의 머리인, '$2'은(는) '$3', '$4'나 '틀_이름[필드_이름]' 형식 중 하나여야 합니다", + "right-datatransferimport": "데이터 가져오기", + "dt_filetype_spreadsheet": "스프레드시트" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/krj.json b/www/wiki/extensions/DataTransfer/i18n/krj.json new file mode 100644 index 00000000..37d7525c --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/krj.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Jose77" + ] + }, + "dt_viewxml_categories": "Manga Kategorya", + "dt_xml_page": "Pahina" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ksh.json b/www/wiki/extensions/DataTransfer/i18n/ksh.json new file mode 100644 index 00000000..a6e1300d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ksh.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Purodha" + ] + }, + "datatransfer-desc": "Määt et müjjelesch, Date uß Schabloone ier Oproofe ze emporteere un ze exporteere.", + "viewxml": "<i lang=\"en\">XML</i> beloore", + "dt_viewxml_docu": "Don ußsöhke, wat fö_n Saachjroppe un Appachtemangs De em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd aanlohre wells.", + "dt_viewxml_categories": "Saachjroppe", + "dt_viewxml_namespaces": "Appachtemangs", + "dt_viewxml_simplifiedformat": "Em eijfachere Fommaat", + "dt_xml_namespace": "Appachtemang", + "dt_xml_pages": "Sigge", + "dt_xml_page": "Sigg", + "dt_xml_template": "Schablohn", + "dt_xml_field": "Felldt", + "dt_xml_name": "Nahme", + "dt_xml_title": "Tėttel", + "dt_xml_id": "Kännong", + "dt_xml_freetext": "Freije Täx", + "importxml": "<i lang=\"en\">XML</i> Empotteere", + "dt_import_selectfile": "Söhk de <i lang=\"en\">$1</i>-Dattei för zem Empotteere uß:", + "dt_import_encodingtype": "Zoot Kodeerung för de Bohchshtahbe un Zeishe:", + "dt_import_forexisting": "För Sigge, di et ald jitt:", + "dt_import_overwriteexisting": "Övverschrieve, wat ald doh es", + "dt_import_mergeintoexisting": "Donn bloß Fälder övverschriive, di ald en dä Dattei schtonn", + "dt_import_skipexisting": "Övverjonn", + "dt_import_appendtoexisting": "An dat aanhange, wat ald doh es", + "dt_import_summarydesc": "Zesammefassung vun däm Empoot:", + "dt_import_editsummary": "uss ene $1-Datei empotteet <!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Dt_import_editsummary/ksh https://phabricator.wikimedia.org/T130188 -->", + "dt_import_importing": "Ben aam Empotteere{{int:Ellipsis}}", + "dt_import_success": "{{PLURAL:$1|Ein Sigg weed_uß|$1 Sigge weede uß|Kein einzelne Sigg weed_uß}} dä <i lang=\"en\">$2</i>-Dattei empotteet.", + "importcsv": "<i lang=\"en\">CSV</i>-Dattei empoteere", + "importspreadsheet": "Räscheblatt Empottehre", + "dt_importcsv_badheader": "Fähler: De Shpallde-Övverschreff för $1 es „$2“, mööt ävver „$3“ udder „$4“ sin, udder dat Fommaat „<code>Name_vun_ene_Schablohn[Name_vun_enem_Felldt]</code>“ han.", + "right-datatransferimport": "Daate empoteere", + "dt_filetype_spreadsheet": "Räscheblatt" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ku-latn.json b/www/wiki/extensions/DataTransfer/i18n/ku-latn.json new file mode 100644 index 00000000..cb558120 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ku-latn.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "George Animal" + ] + }, + "dt_viewxml_categories": "Kategorî", + "dt_xml_pages": "Rûpel", + "dt_xml_page": "Rûpel", + "dt_xml_template": "Şablon", + "dt_xml_name": "Nav", + "dt_xml_title": "Sernav", + "dt_import_summarydesc": "Kurteya împortê:" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/kw.json b/www/wiki/extensions/DataTransfer/i18n/kw.json new file mode 100644 index 00000000..6a9f2ab2 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/kw.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Kernoweger", + "Kw-Moon", + "Nrowe" + ] + }, + "dt_viewxml_categories": "Klassys", + "dt_xml_page": "Folen" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/lb.json b/www/wiki/extensions/DataTransfer/i18n/lb.json new file mode 100644 index 00000000..77cc8910 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/lb.json @@ -0,0 +1,40 @@ +{ + "@metadata": { + "authors": [ + "Robby", + "Soued031" + ] + }, + "datatransfer-desc": "Erlaabt et Daten déi an Opruffer vu Schabloune benotzt ginn z'importéieren an z'exportéieren", + "viewxml": "XML weisen", + "dt_viewxml_docu": "Wielt w.e.g. ënner dëse Kategorien an Nimmraim fir am XML-Format unzeweisen.", + "dt_viewxml_categories": "Kategorien", + "dt_viewxml_namespaces": "Nummraim", + "dt_viewxml_simplifiedformat": "Vereinfachte Format", + "dt_xml_namespace": "Nummraum", + "dt_xml_pages": "Säiten", + "dt_xml_page": "Säit", + "dt_xml_template": "Schabloun", + "dt_xml_field": "Feld", + "dt_xml_name": "Numm", + "dt_xml_title": "Titel", + "dt_xml_id": "Nummer", + "dt_xml_freetext": "Fräien Text", + "importxml": "XML importéieren", + "dt_import_selectfile": "Sicht de(n) $1-Fichier eraus fir z'importéieren:", + "dt_import_encodingtype": "Encoding-Typ:", + "dt_import_forexisting": "Fir Säiten déi et scho gëtt:", + "dt_import_overwriteexisting": "Den Inhalt den et gëtt iwwerschreiwen", + "dt_import_mergeintoexisting": "Nëmme Felder iwwerschreiwen déi am Fichier dra sinn", + "dt_import_skipexisting": "Iwwersprangen", + "dt_import_appendtoexisting": "Bei den Inhalt deen et gëtt dobäisetzen", + "dt_import_summarydesc": "Resumé vum Import:", + "dt_import_editsummary": "{{ucfirst:$1}}-Import", + "dt_import_importing": "Import am gaang ...", + "dt_import_success": "$1 {{PLURAL:$1|Säit gëtt|Säite ginn}} aus dem $2-Fichier ugeluecht.", + "importcsv": "CSV importéieren", + "importspreadsheet": "Tabelleberechnungsblad importéieren", + "dt_importcsv_badheader": "Feeler: D'Iwwerschrëft vun der Kolonn $1, '$2', muss entweder '$3', '$4' oder am Format 'Numm_vun_der_Schabloun(Numm_vum_Feld)' sinn", + "right-datatransferimport": "Donnéeën importéieren", + "dt_filetype_spreadsheet": "Tabelleberechnungsblad" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/li.json b/www/wiki/extensions/DataTransfer/i18n/li.json new file mode 100644 index 00000000..6d024cfe --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/li.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Aelske", + "Remember the dot" + ] + }, + "dt_xml_page": "Pagina" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/lki.json b/www/wiki/extensions/DataTransfer/i18n/lki.json new file mode 100644 index 00000000..9f64ae35 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/lki.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Lakzon" + ] + }, + "dt_xml_pages": "وةڵگةل" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/lt.json b/www/wiki/extensions/DataTransfer/i18n/lt.json new file mode 100644 index 00000000..b69395bb --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/lt.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Eitvys200", + "Tomasdd" + ] + }, + "viewxml": "Žiūrėti XML", + "dt_viewxml_categories": "Kategorijos", + "dt_viewxml_simplifiedformat": "Supaprastintas formatas", + "dt_xml_namespace": "Vardų sritis", + "dt_xml_pages": "Puslapiai", + "dt_xml_page": "Puslapis", + "dt_xml_template": "Šablonas", + "dt_xml_field": "Laukas", + "dt_xml_name": "Vardas", + "dt_xml_title": "Pavadinimas", + "dt_xml_id": "ID", + "dt_xml_freetext": "Laisvas tekstas", + "importxml": "Importuoti XML", + "dt_import_selectfile": "Prašome pasirinkti $1 failą importavimui:", + "dt_import_encodingtype": "Kodavimo tipas:", + "dt_import_forexisting": "Puslapiams kurie jau egzistuoja:", + "dt_import_overwriteexisting": "Perrašyti egzistuojantį turinį", + "dt_import_skipexisting": "Praleisti", + "dt_import_summarydesc": "Importo santrauka:", + "dt_import_editsummary": "{{ucfirst:$1}} importas", + "dt_import_importing": "Importuojama...", + "dt_import_success": "$1 {{PLURAL:$1|puslapis bus sukurtas|puslapiai bus sukurti}} iš $2 failo.", + "importcsv": "Importuoti CSV", + "importspreadsheet": "Importuoti skaičiuoklę", + "right-datatransferimport": "Importuoti duomenis", + "dt_filetype_spreadsheet": "skaičiuoklė" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ltg.json b/www/wiki/extensions/DataTransfer/i18n/ltg.json new file mode 100644 index 00000000..0521eb85 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ltg.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Dark Eagle" + ] + }, + "dt_viewxml_namespaces": "Vuordu pluoti", + "dt_xml_namespace": "Vuordu pluots", + "dt_xml_pages": "Puslopys" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/lv.json b/www/wiki/extensions/DataTransfer/i18n/lv.json new file mode 100644 index 00000000..2bb45272 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/lv.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "GreenZeb" + ] + }, + "dt_viewxml_categories": "Kategorijas", + "dt_viewxml_namespaces": "Vārdtelpas", + "dt_viewxml_simplifiedformat": "Vienkāršots formāts", + "dt_xml_namespace": "Vārdtelpa", + "dt_xml_pages": "Lapas", + "dt_xml_page": "Lapa", + "dt_xml_template": "Veidne", + "dt_xml_field": "Lauks", + "dt_xml_name": "Vārds", + "dt_xml_title": "Nosaukums", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mhr.json b/www/wiki/extensions/DataTransfer/i18n/mhr.json new file mode 100644 index 00000000..999356b4 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mhr.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Сай" + ] + }, + "dt_xml_namespace": "Лӱм-влакын кумдыкышт", + "dt_xml_page": "Лаштык" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/min.json b/www/wiki/extensions/DataTransfer/i18n/min.json new file mode 100644 index 00000000..eb11585f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/min.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Iwan Novirion" + ] + }, + "dt_import_importing": "Mangimpor..." +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mk.json b/www/wiki/extensions/DataTransfer/i18n/mk.json new file mode 100644 index 00000000..7c32f0c6 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mk.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Bjankuloski06" + ] + }, + "datatransfer-desc": "Овозможува увоз и извоз на податоци содржани во повикувањата на шаблоните", + "viewxml": "Преглед на XML", + "dt_viewxml_docu": "Одберете од следиве категории и именски простори за преглед во XML формат.", + "dt_viewxml_categories": "Категории", + "dt_viewxml_namespaces": "Именски простори", + "dt_viewxml_simplifiedformat": "Упростен формат", + "dt_xml_namespace": "Именски простор", + "dt_xml_pages": "Страници", + "dt_xml_page": "Страница", + "dt_xml_template": "Шаблон", + "dt_xml_field": "Поле", + "dt_xml_name": "Име", + "dt_xml_title": "Наслов", + "dt_xml_id": "Назнака", + "dt_xml_freetext": "Слободен текст", + "importxml": "Увоз на XML", + "dt_import_selectfile": "Одберете ја $1 податотеката за увоз:", + "dt_import_encodingtype": "Тип на кодирање:", + "dt_import_forexisting": "За страници што веќе постојат:", + "dt_import_overwriteexisting": "Презапиши врз постоечките содржини", + "dt_import_mergeintoexisting": "Презапиши само врз полињата што се содржат во податотеката", + "dt_import_skipexisting": "Прескокни", + "dt_import_appendtoexisting": "Додај во постоечката содржина", + "dt_import_summarydesc": "Опис на увозот:", + "dt_import_editsummary": "Увоз на {{ucfirst:$1}}", + "dt_import_importing": "Увезувам...", + "dt_import_success": "$1 {{PLURAL:$1|страница ќе биде создадена|страници ќе бидат создадени}} од $2 податотеката.", + "importcsv": "Увоз на CSV", + "importspreadsheet": "Увези табеларна пресметка", + "dt_importcsv_badheader": "Грешка: насловот на столбот бр. $1, „$2“, мора да биде или „$3“, или „$4“, или пак од обликот „template_name[field_name]“", + "right-datatransferimport": "Увезување податоци", + "dt_filetype_spreadsheet": "табеларна пресметка" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ml.json b/www/wiki/extensions/DataTransfer/i18n/ml.json new file mode 100644 index 00000000..9ab03774 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ml.json @@ -0,0 +1,31 @@ +{ + "@metadata": { + "authors": [ + "Junaidpv", + "Praveenp", + "Shijualex" + ] + }, + "viewxml": "XML കാണുക", + "dt_viewxml_categories": "വർഗ്ഗങ്ങൾ", + "dt_viewxml_namespaces": "നാമമേഖലകൾ", + "dt_viewxml_simplifiedformat": "ലളിതവത്ക്കരിക്കപ്പെട്ട ഫോർമാറ്റ്", + "dt_xml_namespace": "നാമമേഖല", + "dt_xml_pages": "താളുകൾ", + "dt_xml_page": "താൾ", + "dt_xml_template": "ഫലകം", + "dt_xml_field": "ഫീൽഡ്", + "dt_xml_name": "പേര്", + "dt_xml_title": "ശീർഷകം", + "dt_xml_id": "ഐ.ഡി.", + "dt_xml_freetext": "സ്വതന്ത്ര എഴുത്ത്", + "importxml": "എക്സ്.എം.എൽ. ഇറക്കുമതി", + "dt_import_selectfile": "ദയവായി ഇറക്കുമതിക്കായി $1 പ്രമാണം തിരഞ്ഞെടുക്കുക:", + "dt_import_encodingtype": "എൻകോഡിങ് തരം:", + "dt_import_forexisting": "നിലവിലുള്ള താളുകൾക്ക് വേണ്ടി:", + "dt_import_appendtoexisting": "നിലവിലുള്ള ഉള്ളടക്കത്തോട് കൂട്ടിച്ചേർക്കുക", + "dt_import_summarydesc": "ഇറക്കുമതിയുടെ സംഗ്രഹം:", + "dt_import_editsummary": "$1 ഇറക്കുമതി", + "dt_import_importing": "ഇറക്കുമതി ചെയ്യുന്നു...", + "importcsv": "സി.എസ്.വി. ഇറക്കുമതി" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mn.json b/www/wiki/extensions/DataTransfer/i18n/mn.json new file mode 100644 index 00000000..0bb686e8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mn.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Chinneeb" + ] + }, + "dt_viewxml_categories": "Ангиллууд", + "dt_viewxml_namespaces": "Нэрний зайнууд", + "dt_xml_namespace": "Нэрний зай", + "dt_xml_page": "Хуудас" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mr.json b/www/wiki/extensions/DataTransfer/i18n/mr.json new file mode 100644 index 00000000..047978d9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mr.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Kaustubh", + "V.narsikar" + ] + }, + "datatransfer-desc": "साचा कॉल मध्ये असणार्या डाटाची आयात निर्यात करण्याची परवानगी देतो", + "viewxml": "XML पहा", + "dt_viewxml_docu": "कॄपया XML मध्ये पाहण्यासाठी खालीलपैकी वर्ग व नामविश्वे निवडा.", + "dt_viewxml_categories": "वर्ग", + "dt_viewxml_namespaces": "नामविश्वे", + "dt_viewxml_simplifiedformat": "सोपे प्रारुप", + "dt_xml_namespace": "नामविश्व", + "dt_xml_pages": "पाने", + "dt_xml_page": "पान", + "dt_xml_template": "साचा", + "dt_xml_field": "रकाना", + "dt_xml_name": "नाव", + "dt_xml_title": "शीर्षक", + "dt_xml_id": "आयडी", + "dt_xml_freetext": "मुक्त मजकूर", + "importxml": "एक्सएमएल आयात करा", + "dt_import_selectfile": "आयात करावयाची $1 संचिका निवडा:" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ms.json b/www/wiki/extensions/DataTransfer/i18n/ms.json new file mode 100644 index 00000000..0532f373 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ms.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Anakmalaysia" + ] + }, + "datatransfer-desc": "Membolehkan pengimportan dan pengeksportan data yang terkandung dalam panggilan tempat", + "viewxml": "Paparkan XML", + "dt_viewxml_docu": "Sila pilih antara kategori-kategori dan ruang-ruang nama yang berikut untuk dipaparkan dalam format XML.", + "dt_viewxml_categories": "Kategori", + "dt_viewxml_namespaces": "Ruang nama", + "dt_viewxml_simplifiedformat": "Format ringkas", + "dt_xml_namespace": "Ruang nama", + "dt_xml_pages": "Halaman", + "dt_xml_page": "Laman", + "dt_xml_template": "Templat", + "dt_xml_field": "Medan", + "dt_xml_name": "Nama", + "dt_xml_title": "Tajuk", + "dt_xml_id": "ID", + "dt_xml_freetext": "Teks Bebas", + "importxml": "Import XML", + "dt_import_selectfile": "Sila pilih fail $1 yang hendak diimport:", + "dt_import_encodingtype": "Jenis pengekodan:", + "dt_import_forexisting": "Untuk halaman-halaman yang sedia ada:", + "dt_import_overwriteexisting": "Tulis ganti kandungan sedia ada", + "dt_import_mergeintoexisting": "Hanya tulis ganti medan-medan yang terkandung dalam fail", + "dt_import_skipexisting": "Langkau", + "dt_import_appendtoexisting": "Tambah kandungan sedia ada", + "dt_import_summarydesc": "Ringkasan pengimportan:", + "dt_import_editsummary": "Pengimportan $1", + "dt_import_importing": "Sedang mengimport...", + "dt_import_success": "$1 halaman akan dibuat dari fail $2.", + "importcsv": "Import CSV", + "dt_importcsv_badheader": "Ralat: pengatas lajur $1, '$2', mestilah sama ada '$3', '$4' atau dalam bentuk 'nama_templat[nama_medan]'", + "right-datatransferimport": "Mengimport data" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mt.json b/www/wiki/extensions/DataTransfer/i18n/mt.json new file mode 100644 index 00000000..05df02c9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mt.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Chrisportelli", + "Leli Forte" + ] + }, + "datatransfer-desc": "Tippermetti l-importazzjoni u l-esportazzjoni ta' dejta li tinsab f'sejħiet ta' mudelli", + "viewxml": "Ara XML", + "dt_viewxml_docu": "Jekk jogħġbok agħżel fost il-kategoriji u l-ispazji tal-isem segwenti sabiex tarahom f'format XML.", + "dt_viewxml_categories": "Kategoriji", + "dt_viewxml_namespaces": "Spazji tal-isem", + "dt_viewxml_simplifiedformat": "Format simplifikat", + "dt_xml_namespace": "Spazju tal-ismijiet", + "dt_xml_pages": "Paġni", + "dt_xml_page": "Paġna", + "dt_xml_template": "Mudell", + "dt_xml_field": "Qasam", + "dt_xml_name": "Isem", + "dt_xml_title": "Titlu", + "dt_xml_id": "ID", + "dt_xml_freetext": "Test ħieles", + "importxml": "Importa XML", + "dt_import_selectfile": "Jekk jogħġbok agħżel il-fajl $1 li tixtieq timporta:", + "dt_import_encodingtype": "Tip ta' kodifikar:", + "dt_import_forexisting": "Għal paġni li diġà jeżistu:", + "dt_import_overwriteexisting": "Erġa' ikteb fuq kontenut eżistenti", + "dt_import_skipexisting": "Aqbeż", + "dt_import_appendtoexisting": "Żid mal-kontenut eżistenti", + "dt_import_summarydesc": "Sommarju tal-importazzjoni:", + "dt_import_editsummary": "Importazzjoni $1", + "dt_import_importing": "Qiegħed timporta...", + "dt_import_success": "$1 {{PLURAL:$1|paġna|paġni}} se jinħolqu mill-fajl $2.", + "importcsv": "Importa CSV", + "dt_importcsv_badheader": "Żball: l-intestazzjoni tal-kolonna $1, \"$2\", trid tkun waħda minn dawn il-valuri: '$3', '$4' jew fil-format ta' 'isem_mudell[isem_qasam]'", + "right-datatransferimport": "Jimporta d-dejta" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mwl.json b/www/wiki/extensions/DataTransfer/i18n/mwl.json new file mode 100644 index 00000000..9b4bdca8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mwl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Malafaya" + ] + }, + "dt_xml_page": "Páigina" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/my.json b/www/wiki/extensions/DataTransfer/i18n/my.json new file mode 100644 index 00000000..10242fe8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/my.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "Ninjastrikers", + "Dr Lotus Black" + ] + }, + "dt_viewxml_categories": "ကဏ္ဍများ", + "dt_viewxml_namespaces": "အမည်ညွှန်းများ", + "dt_xml_namespace": "အမည်ညွှန်း", + "dt_xml_pages": "စာမျက်နှာများ", + "dt_xml_page": "စာမျက်နှာ", + "dt_xml_template": "တမ်းပလိတ်", + "dt_xml_name": "အမည်", + "dt_import_skipexisting": "ကျော်ရန်" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/myv.json b/www/wiki/extensions/DataTransfer/i18n/myv.json new file mode 100644 index 00000000..c52a91d7 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/myv.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Botuzhaleny-sodamo" + ] + }, + "dt_viewxml_categories": "Категорият", + "dt_viewxml_namespaces": "Лем потмот", + "dt_xml_namespace": "Лемпотмо", + "dt_xml_page": "Лопа", + "dt_xml_template": "Лопа парцун", + "dt_xml_field": "Пакся", + "dt_xml_name": "Лемезэ", + "dt_xml_title": "Конякс" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/mzn.json b/www/wiki/extensions/DataTransfer/i18n/mzn.json new file mode 100644 index 00000000..7783988e --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/mzn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "dt_viewxml_categories": "رجئون" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/nah.json b/www/wiki/extensions/DataTransfer/i18n/nah.json new file mode 100644 index 00000000..e5290ccc --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/nah.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "Fluence", + "Teòtlalili", + "Akapochtli" + ] + }, + "dt_viewxml_categories": "Neneuhcayomeh", + "dt_viewxml_namespaces": "Tōcātzin", + "dt_xml_namespace": "Tōcātzin", + "dt_xml_page": "Tlahcuilolamatl", + "dt_xml_name": "Tocaitl", + "dt_xml_title": "Tocaitl", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/nb.json b/www/wiki/extensions/DataTransfer/i18n/nb.json new file mode 100644 index 00000000..621ec94d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/nb.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Event", + "Nghtwlkr", + "Emilbk", + "Jon Harald Søby" + ] + }, + "datatransfer-desc": "Gjør det mulig å importere og eksportere data som finnes i maloppkallinger", + "viewxml": "Se XML", + "dt_viewxml_docu": "Velg blant følgende kategorier og navnerom for å se dem i XML-format.", + "dt_viewxml_categories": "Kategorier", + "dt_viewxml_namespaces": "Navnerom", + "dt_viewxml_simplifiedformat": "Forenklet format", + "dt_xml_namespace": "Navnerom", + "dt_xml_pages": "Sider", + "dt_xml_page": "Side", + "dt_xml_template": "Mal", + "dt_xml_field": "Felt", + "dt_xml_name": "Navn", + "dt_xml_title": "Tittel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Fritekst", + "importxml": "Importer XML", + "dt_import_selectfile": "Vennligst velg $1-filen som skal importeres:", + "dt_import_encodingtype": "Tegnkodingstype:", + "dt_import_forexisting": "For sider som allerede finnes:", + "dt_import_overwriteexisting": "Skriv over eksisterende innhold", + "dt_import_mergeintoexisting": "Overskriv bare felter som inngår i filen", + "dt_import_skipexisting": "Hopp over", + "dt_import_appendtoexisting": "Tilføy til eksisterende innhold", + "dt_import_summarydesc": "Importsammendrag:", + "dt_import_editsummary": "{{ucfirst:$1}}-importering", + "dt_import_importing": "Importerer...", + "dt_import_success": "{{PLURAL:$1|Én side|$1 sider}} vil bli importert fra $2-filen.", + "importcsv": "Importer CSV", + "importspreadsheet": "Importer regneark", + "dt_importcsv_badheader": "Feil: kolonneoverskriften $1, '$2', må være enten '$3', '$4' eller på formen 'malnavn[feltnavn]'", + "right-datatransferimport": "Importer data", + "dt_filetype_spreadsheet": "regneark" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/nds.json b/www/wiki/extensions/DataTransfer/i18n/nds.json new file mode 100644 index 00000000..dc503d91 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/nds.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Joachim Mos", + "Slomox" + ] + }, + "dt_viewxml_categories": "Kategorien", + "dt_viewxml_namespaces": "Naamrüüm", + "dt_xml_namespace": "Naamruum", + "dt_xml_pages": "Sieden", + "dt_xml_page": "Sied", + "dt_xml_template": "Vörlaag", + "dt_xml_name": "Naam", + "dt_xml_title": "Titel", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/nl.json b/www/wiki/extensions/DataTransfer/i18n/nl.json new file mode 100644 index 00000000..0a92d68d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/nl.json @@ -0,0 +1,42 @@ +{ + "@metadata": { + "authors": [ + "Siebrand", + "Tvdm", + "Sjoerddebruin", + "Esketti" + ] + }, + "datatransfer-desc": "Maakt het importeren en exporteren van gestructureerde gegevens in sjabloonaanroepen mogelijk", + "viewxml": "XML bekijken", + "dt_viewxml_docu": "Selecteer uit de volgende categorieën en naamruimten om in XML-formaat te bekijken.", + "dt_viewxml_categories": "Categorieën", + "dt_viewxml_namespaces": "Naamruimten", + "dt_viewxml_simplifiedformat": "Vereenvoudigd formaat", + "dt_xml_namespace": "Naamruimte", + "dt_xml_pages": "Pagina's", + "dt_xml_page": "Pagina", + "dt_xml_template": "Sjabloon", + "dt_xml_field": "Veld", + "dt_xml_name": "Naam", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Vrije tekst", + "importxml": "XML importeren", + "dt_import_selectfile": "Selecteer het te importeren bestand van het type $1:", + "dt_import_encodingtype": "Coderingstype:", + "dt_import_forexisting": "Voor pagina's die al bestaan:", + "dt_import_overwriteexisting": "Bestaande inhoud overschrijven", + "dt_import_mergeintoexisting": "Alleen velden uit het bestand overschrijven", + "dt_import_skipexisting": "Overslaan", + "dt_import_appendtoexisting": "Toevoegen aan bestaande inhoud", + "dt_import_summarydesc": "Samenvatting van de import:", + "dt_import_editsummary": "{{ucfirst:$1}}-import", + "dt_import_importing": "Bezig met importeren…", + "dt_import_success": "Uit het $2-bestand {{PLURAL:$1|wordt één pagina|worden $1 pagina's}} geïmporteerd.", + "importcsv": "CSV importeren", + "importspreadsheet": "Werkblad importeren", + "dt_importcsv_badheader": "Fout: De kop van kolom $1, \"$2\", moet \"$3\" of \"$4\" zijn, of in de vorm \"sjabloonnaam[veldnaam]\" genoteerd worden.", + "right-datatransferimport": "Gegevens importeren", + "dt_filetype_spreadsheet": "spreadsheet" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/nn.json b/www/wiki/extensions/DataTransfer/i18n/nn.json new file mode 100644 index 00000000..bf1eb95c --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/nn.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Gunnernett", + "Harald Khan", + "Jon Harald Søby", + "Njardarlogar" + ] + }, + "datatransfer-desc": "Gjer det mogleg å importera og eksportera data i maloppkallingar", + "viewxml": "Syn XML", + "dt_viewxml_docu": "Vel mellom følgjande kategoriar og namnerom for å syna dei i XML-format.", + "dt_viewxml_categories": "Kategoriar", + "dt_viewxml_namespaces": "Namnerom", + "dt_viewxml_simplifiedformat": "Forenkla format", + "dt_xml_namespace": "Namnerom", + "dt_xml_pages": "Sider", + "dt_xml_page": "Side", + "dt_xml_template": "Mal", + "dt_xml_field": "Felt", + "dt_xml_name": "Namn", + "dt_xml_title": "Tittel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Fritekst", + "importxml": "Importer XML", + "dt_import_selectfile": "Ver venleg og vel $1-fila som skal verta importert:", + "dt_import_encodingtype": "Teiknkodingstype:", + "dt_import_editsummary": "$1-importering", + "dt_import_importing": "Importerer...", + "dt_import_success": "$1 {{PLURAL:$1|Éi side vil verta importert|$1 sider vil verta importerte}} frå $2-fila.", + "importcsv": "Importer CSV", + "dt_importcsv_badheader": "Feil: kolonneoverskrifta $1, '$2', må vera anten '$3', '$4' eller på forma 'malnamn[feltnamn]'", + "right-datatransferimport": "Importer data" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/oc.json b/www/wiki/extensions/DataTransfer/i18n/oc.json new file mode 100644 index 00000000..2c37c065 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/oc.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Cedric31" + ] + }, + "datatransfer-desc": "Permet l’impòrt e l’expòrt de donadas contengudas dins d'apèls de modèls", + "viewxml": "Veire XML", + "dt_viewxml_docu": "Seleccionatz demest las categorias e los espacis de nomenatges per visionar en format XML.", + "dt_viewxml_categories": "Categorias", + "dt_viewxml_namespaces": "Espacis de nomenatge", + "dt_viewxml_simplifiedformat": "Format simplificat", + "dt_xml_namespace": "Espaci de nom", + "dt_xml_pages": "Paginas", + "dt_xml_page": "Pagina", + "dt_xml_template": "Modèl", + "dt_xml_field": "Camp", + "dt_xml_name": "Nom", + "dt_xml_title": "Títol", + "dt_xml_id": "ID", + "dt_xml_freetext": "Tèxte Liure", + "importxml": "Impòrt en XML", + "dt_import_selectfile": "Seleccionatz lo fichièr $1 d'importar :", + "dt_import_encodingtype": "Tipe d’encodatge:", + "dt_import_forexisting": "Per las paginas qu'existisson ja :", + "dt_import_skipexisting": "Passar", + "dt_import_summarydesc": "Resumit de l’impòrt :", + "dt_import_editsummary": "importar en {{ucfirst:$1}}", + "dt_import_importing": "Impòrt en cors...", + "dt_import_success": "$1 {{PLURAL:$1|pagina serà creada|paginas seràn creadas}} dempuèi lo fichièr $2.", + "importcsv": "Impòrt CSV", + "dt_importcsv_badheader": "Error : lo títol de colomna $1, « $2 », deu èsser siá « $3 », « $4 » o de la forma « nom_del_modèl[nom_del_camp] »", + "right-datatransferimport": "Importar de donadas" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/or.json b/www/wiki/extensions/DataTransfer/i18n/or.json new file mode 100644 index 00000000..d3b36281 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/or.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Odisha1", + "Psubhashish" + ] + }, + "dt_viewxml_categories": "ଶ୍ରେଣୀସମୂହ", + "dt_xml_pages": "ପୃଷ୍ଠା", + "dt_xml_page": "ପୃଷ୍ଠା", + "dt_xml_template": "ଛାଞ୍ଚ", + "dt_xml_field": "କ୍ଷେତ୍ର", + "dt_xml_name": "ନାମ", + "dt_xml_title": "ଶିରୋନାମା", + "dt_xml_id": "ପରିଚୟ", + "dt_import_editsummary": "$1 ଆମଦାନୀ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/os.json b/www/wiki/extensions/DataTransfer/i18n/os.json new file mode 100644 index 00000000..4a9453e5 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/os.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Amikeco" + ] + }, + "dt_xml_page": "Фарс", + "dt_xml_template": "Шаблон", + "dt_xml_title": "Сæргонд" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/pdc.json b/www/wiki/extensions/DataTransfer/i18n/pdc.json new file mode 100644 index 00000000..d9b19a32 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/pdc.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "Xqt", + "Purodha" + ] + }, + "dt_viewxml_categories": "Abdeelinge", + "dt_viewxml_namespaces": "Blatznaame", + "dt_xml_namespace": "Blatznaame", + "dt_xml_pages": "Bledder", + "dt_xml_page": "Blatt", + "dt_xml_template": "Moddel", + "dt_xml_name": "Naame", + "dt_xml_title": "Titel" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/pl.json b/www/wiki/extensions/DataTransfer/i18n/pl.json new file mode 100644 index 00000000..aaf785b7 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/pl.json @@ -0,0 +1,41 @@ +{ + "@metadata": { + "authors": [ + "McMonster", + "Sp5uhe", + "Wpedzich", + "Chrumps" + ] + }, + "datatransfer-desc": "Pozwala na importowanie i eksportowanie danych zawartych w wywołaniach szablonu", + "viewxml": "Podgląd XML", + "dt_viewxml_docu": "Wybierz, które spośród następujących kategorii i przestrzeni nazw chcesz podejrzeć w formacie XML.", + "dt_viewxml_categories": "Kategorie", + "dt_viewxml_namespaces": "Przestrzenie nazw", + "dt_viewxml_simplifiedformat": "Format uproszczony", + "dt_xml_namespace": "Przestrzeń nazw", + "dt_xml_pages": "Strony", + "dt_xml_page": "Strona", + "dt_xml_template": "Szablon", + "dt_xml_field": "Pole", + "dt_xml_name": "Nazwa", + "dt_xml_title": "Tytuł", + "dt_xml_id": "ID", + "dt_xml_freetext": "Dowolny tekst", + "importxml": "Import XML", + "dt_import_selectfile": "Wybierz plik $1 do zaimportowania", + "dt_import_encodingtype": "Typ kodowania", + "dt_import_forexisting": "Dla stron, które już istnieją:", + "dt_import_overwriteexisting": "Zastąp istniejącą zawartość", + "dt_import_skipexisting": "Pomiń", + "dt_import_appendtoexisting": "Dołącz do istniejącej zawartości", + "dt_import_summarydesc": "Podsumowanie importu", + "dt_import_editsummary": "Import {{ucfirst:$1}}", + "dt_import_importing": "Importowanie...", + "dt_import_success": "$1 {{PLURAL:$1|strona zostanie utworzona|strony zostaną utworzone|stron zostanie utworzonych}} z pliku $2.", + "importcsv": "Import CSV", + "importspreadsheet": "Import arkusza kalkulacyjnego", + "dt_importcsv_badheader": "Błąd – w kolumnie $1 nagłówka jest „$2”, a powinno być: „$3”, „$4” lub „nazwa_szablonu[nazwa_pola]”", + "right-datatransferimport": "Importowanie danych", + "dt_filetype_spreadsheet": "arkusz kalkulacyjny" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/pms.json b/www/wiki/extensions/DataTransfer/i18n/pms.json new file mode 100644 index 00000000..a5f3e081 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/pms.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Borichèt", + "Dragonòt" + ] + }, + "datatransfer-desc": "A përmëtt d'amporté e esporté ij dat contnù ant le ciamà a stamp", + "viewxml": "Varda XML", + "dt_viewxml_docu": "Për piasì selession-a an tra le categorìe sota e jë spassi nominaj për vëdde an formà XLM.", + "dt_viewxml_categories": "Categorìe", + "dt_viewxml_namespaces": "Spassi nominaj", + "dt_viewxml_simplifiedformat": "Formà semplificà", + "dt_xml_namespace": "Spassi nominal", + "dt_xml_pages": "Pàgine", + "dt_xml_page": "Pàgina", + "dt_xml_template": "Stamp", + "dt_xml_field": "Camp", + "dt_xml_name": "Nòm", + "dt_xml_title": "Tìtol", + "dt_xml_id": "ID", + "dt_xml_freetext": "Test lìber", + "importxml": "Ampòrta XML", + "dt_import_selectfile": "Për piasì selession-a ël file $1 da amporté:", + "dt_import_encodingtype": "Tipo ëd codìfica:", + "dt_import_forexisting": "Për pàgine ch'a esisto già:", + "dt_import_overwriteexisting": "Coaté ël contnù esistent", + "dt_import_skipexisting": "Saoté", + "dt_import_appendtoexisting": "Gionté al contnù esistent", + "dt_import_summarydesc": "Somari dj'amportassion:", + "dt_import_editsummary": "$1 ampòrta", + "dt_import_importing": "An camin ch'as ampòrta...", + "dt_import_success": "$1 {{PLURAL:$1|pàgina|pàgine}} a saran creà da l'archivi $2.", + "importcsv": "Ampòrta CSV", + "dt_importcsv_badheader": "Eror: l'antestassion ëd la colòna $1, '$2', a deuv esse '$3', '$4' o ëd la forma 'template_name[field_name]'", + "right-datatransferimport": "Ampòrta dat" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ps.json b/www/wiki/extensions/DataTransfer/i18n/ps.json new file mode 100644 index 00000000..92e7aac6 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ps.json @@ -0,0 +1,20 @@ +{ + "@metadata": { + "authors": [ + "Ahmed-Najib-Biabani-Ibrahimkhel" + ] + }, + "viewxml": "XML کتل", + "dt_viewxml_categories": "وېشنيزې", + "dt_viewxml_namespaces": "نوم-تشيالونه", + "dt_viewxml_simplifiedformat": "ساده بڼه", + "dt_xml_namespace": "نوم-تشيال", + "dt_xml_pages": "مخونه", + "dt_xml_page": "مخ", + "dt_xml_template": "کينډۍ", + "dt_xml_name": "نوم", + "dt_xml_title": "سرليک", + "dt_xml_id": "پېژند", + "dt_xml_freetext": "خپلواکه متن", + "dt_import_skipexisting": "تېرېدل" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/pt-br.json b/www/wiki/extensions/DataTransfer/i18n/pt-br.json new file mode 100644 index 00000000..49425cdd --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/pt-br.json @@ -0,0 +1,46 @@ +{ + "@metadata": { + "authors": [ + "Eduardo.mps", + "Giro720", + "Jaideraf", + "555", + "Fabsouza1", + "Smmvinicius", + "V6rg", + "C.R." + ] + }, + "datatransfer-desc": "Permite a importação e exportação de dados contidos em chamadas de predefinições", + "viewxml": "Ver XML", + "dt_viewxml_docu": "Selecione entre as categorias e espaços nominais a seguir para ver em formato XML.", + "dt_viewxml_categories": "Categorias", + "dt_viewxml_namespaces": "Namespaces", + "dt_viewxml_simplifiedformat": "Formato simplificado", + "dt_xml_namespace": "Namespace", + "dt_xml_pages": "Páginas", + "dt_xml_page": "Página", + "dt_xml_template": "Modelo", + "dt_xml_field": "Campo", + "dt_xml_name": "Nome", + "dt_xml_title": "Titulo", + "dt_xml_id": "ID", + "dt_xml_freetext": "Free Text", + "importxml": "Importar XML", + "dt_import_selectfile": "Selecione o arquivo $1 para importar:", + "dt_import_encodingtype": "Codificação:", + "dt_import_forexisting": "Para páginas que já existem:", + "dt_import_overwriteexisting": "Sobrescrever o conteúdo existente", + "dt_import_mergeintoexisting": "Sobrescreva apenas campos contidos no arquivo", + "dt_import_skipexisting": "Pular", + "dt_import_appendtoexisting": "Adicionar ao conteúdo existente", + "dt_import_summarydesc": "Resumo da importação:", + "dt_import_editsummary": "Importação de {{ucfirst:$1}}", + "dt_import_importing": "Importando...", + "dt_import_success": "$1 {{PLURAL:$1|página será importada|páginas serão importadas}} do arquivo $2.", + "importcsv": "Importar CSV", + "importspreadsheet": "Importar planilha", + "dt_importcsv_badheader": "Erro: o cabeçalho da coluna $1, '$2', deve ser '$3', ou '$4' ou da forma 'nome_da_predefinição[nome_do_campo]'", + "right-datatransferimport": "Importar dados", + "dt_filetype_spreadsheet": "planilha" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/pt.json b/www/wiki/extensions/DataTransfer/i18n/pt.json new file mode 100644 index 00000000..dfdd41e6 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/pt.json @@ -0,0 +1,44 @@ +{ + "@metadata": { + "authors": [ + "Hamilton Abreu", + "Lijealso", + "Luckas", + "Malafaya", + "Fúlvio", + "Vitorvicentevalente" + ] + }, + "datatransfer-desc": "Permite importação e exportação de dados contidos em chamadas de predefinições", + "viewxml": "Ver XML", + "dt_viewxml_docu": "Por favor, selecione de entre as categorias e espaços nominais seguintes para ver em formato XML.", + "dt_viewxml_categories": "Categorias", + "dt_viewxml_namespaces": "Espaços nominais", + "dt_viewxml_simplifiedformat": "Formato simplificado", + "dt_xml_namespace": "Espaço nominal", + "dt_xml_pages": "Páginas", + "dt_xml_page": "Página", + "dt_xml_template": "Predefinição", + "dt_xml_field": "Campo", + "dt_xml_name": "Nome", + "dt_xml_title": "Título", + "dt_xml_id": "ID", + "dt_xml_freetext": "Texto Livre", + "importxml": "Importar XML", + "dt_import_selectfile": "Por favor, selecione o ficheiro $1 a importar:", + "dt_import_encodingtype": "Tipo de codificação:", + "dt_import_forexisting": "Para páginas que já existem:", + "dt_import_overwriteexisting": "Sobrescrever o conteúdo existente", + "dt_import_mergeintoexisting": "Sobrescrever apenas os campos contidos no ficheiro", + "dt_import_skipexisting": "Saltar", + "dt_import_appendtoexisting": "Acrescentar ao conteúdo existente", + "dt_import_summarydesc": "Resumo da importação:", + "dt_import_editsummary": "Importação de {{ucfirst:$1}}", + "dt_import_importing": "Importando...", + "dt_import_success": "{{PLURAL:$1|A página será importada|As páginas serão importadas}} a partir do ficheiro $2.", + "importcsv": "Importar CSV", + "importspreadsheet": "Importar folha de cálculo", + "dt_importcsv_badheader": "Erro: o cabeçalho da coluna $1, '$2', deve ser '$3', '$4' ou ter a forma 'nome_da_predefinição[nome_do_campo]'", + "right-datatransferimport": "Importar dados", + "dt_filetype_spreadsheet": "folha de cálculo" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/qqq.json b/www/wiki/extensions/DataTransfer/i18n/qqq.json new file mode 100644 index 00000000..a6a60b7b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/qqq.json @@ -0,0 +1,49 @@ +{ + "@metadata": { + "authors": [ + "EugeneZelenko", + "Fryed-peach", + "Jon Harald Søby", + "Kghbln", + "Purodha", + "Raymond", + "Shirayuki", + "Siebrand", + "Umherirrender" + ] + }, + "datatransfer-desc": "{{Desc|name=Data Transfer|url=https://www.mediawiki.org/wiki/Extension:Data_Transfer}}", + "viewxml": "{{doc-special|ViewXML|unlisted=1}}", + "dt_viewxml_docu": "Used as heading of the form.\n\nThis message is followed by HTML <code><nowiki><h2></nowiki></code> heading {{msg-mw|Dt viewxml categories}}.", + "dt_viewxml_categories": "{{Identical|Category}}", + "dt_viewxml_namespaces": "{{Identical|Namespace}}", + "dt_viewxml_simplifiedformat": "Used as checkbox label in the \"View XML\" form.\n\nIf enabled, the extension generates simplified XML.", + "dt_xml_namespace": "Used as XML tag name.\n{{Identical|Namespace}}", + "dt_xml_pages": "Used as XML tag name.\n{{Identical|Page}}", + "dt_xml_page": "Used as XML tag name.\n{{Identical|Page}}", + "dt_xml_template": "Used as XML tag name.\n{{Identical|Template}}", + "dt_xml_field": "Used as XML tag name.\n{{Identical|Field}}", + "dt_xml_name": "Used as XML tag name.\n{{Identical|Name}}", + "dt_xml_title": "Used as XML tag name.\n{{Identical|Title}}", + "dt_xml_id": "Used as XML tag name.\n{{Identical|ID}}", + "dt_xml_freetext": "Used as XML tag name.\n{{Identical|Free text}}", + "importxml": "{{doc-special|ImportXML|unlisted=1}}", + "dt_import_selectfile": "Used as label for the File selector. Parameters:\n* $1 - the file format: CSV, XML or spreadsheet", + "dt_import_encodingtype": "The type of encoding for the file: either UTF-8 or UTF-16", + "dt_import_forexisting": "This message is followed by the following radio boxes:\n* {{msg-mw|Dt import overwriteexisting}}\n* {{msg-mw|Dt import mergeintoexisting}}\n* {{msg-mw|Dt import skipexisting}}\n* {{msg-mw|Dt import appendtoexisting}}", + "dt_import_overwriteexisting": "Used as label for the radiobutton.\n{{Related|Dt import forexisting}}", + "dt_import_mergeintoexisting": "Used as label for the radiobutton.\n{{Related|Dt import forexisting}}", + "dt_import_skipexisting": "Used as label for the radiobutton.\n{{Related|Dt import forexisting}}\n{{Identical|Skip}}", + "dt_import_appendtoexisting": "Used as label for the radiobutton.\n{{Related|Dt import forexisting}}", + "dt_import_summarydesc": "Used as label for the \"Summary text of import\" input box.\n\nThe default value of the input box is {{msg-mw|Dt import editsummary}}.", + "dt_import_editsummary": "This message is part of the editsummary. It prints the result of the import in the version history of the respective page content was imported to.\n\nParameters:\n* $1 - the file format: CSV, XML or spreadsheet\n{{Identical|Import}}", + "dt_import_importing": "This message indicates the extension is currently importing a CSV file (or an XML file).\n{{Identical|Importing}}", + "dt_import_success": "Parameters:\n* $1 - the number of pages\n* $2 - the file format: CSV, XML or spreadsheet", + "importcsv": "{{doc-special|ImportCSV|unlisted=1}}\nCSV (comma separated value)", + "importspreadsheet": "{{doc-special|ImportSpreadsheet|unlisted=1}}", + "dt_importcsv_badheader": "The text \"template_name[field_name]\" can be translated. Parameters:\n* $1 - a column number in the first row of the CVS file\n* $2 - the value found for the $1th column in the first line of the CSV file\n* $3 - the title label\n* $4 - a free text label", + "right-datatransferimport": "{{doc-right|datatransferimport}}", + "dt_filetype_xml": "The type of the file that is to be imported. This is a descriptive name, NOT a file extension.", + "dt_filetype_csv": "The type of the file that is to be imported. This is a descriptive name, NOT a file extension.", + "dt_filetype_spreadsheet": "The type of the file that is to be imported. This is a descriptive name, NOT a file extension. Patchwork message with {{msg-mw|Dt import editsummary}} as suffix." +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ro.json b/www/wiki/extensions/DataTransfer/i18n/ro.json new file mode 100644 index 00000000..7e3d924b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ro.json @@ -0,0 +1,31 @@ +{ + "@metadata": { + "authors": [ + "KlaudiuMihaila", + "Minisarm", + "Stelistcristi" + ] + }, + "viewxml": "Vizualizează XML", + "dt_viewxml_categories": "Categorii", + "dt_viewxml_namespaces": "Spații de nume", + "dt_viewxml_simplifiedformat": "Format simplificat", + "dt_xml_namespace": "Spațiu de nume", + "dt_xml_pages": "Pagini", + "dt_xml_page": "Pagină", + "dt_xml_template": "Format", + "dt_xml_field": "Câmp", + "dt_xml_name": "Nume", + "dt_xml_title": "Titlu", + "dt_xml_id": "ID", + "dt_xml_freetext": "Text liber", + "importxml": "Importă XML", + "dt_import_encodingtype": "Tipul de codificare:", + "dt_import_forexisting": "Pentru pagini care există deja:", + "dt_import_skipexisting": "Omite", + "dt_import_summarydesc": "Descrierea importului:", + "dt_import_editsummary": "Importare {{ucfirst:$1}}", + "dt_import_importing": "Importare...", + "importcsv": "Importă CSV", + "right-datatransferimport": "Importă date" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/roa-tara.json b/www/wiki/extensions/DataTransfer/i18n/roa-tara.json new file mode 100644 index 00000000..8ecd0140 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/roa-tara.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Joetaras" + ] + }, + "datatransfer-desc": "Permètte de 'mbortà e esportà date strutturate ca stonne jndr'à le chiamate a le template", + "viewxml": "Vide l'XML", + "dt_viewxml_docu": "Pe piacere scacchie ìmbrà le categorije seguende e le namespace seguende pe vedè 'u formate XML.", + "dt_viewxml_categories": "Categorije", + "dt_viewxml_namespaces": "Namespace", + "dt_viewxml_simplifiedformat": "Formate semblifichete", + "dt_xml_namespace": "Namespace", + "dt_xml_pages": "Pàggene", + "dt_xml_page": "Pàgene", + "dt_xml_template": "Template", + "dt_xml_field": "Cambe", + "dt_xml_name": "Nome", + "dt_xml_title": "Titele", + "dt_xml_id": "Codece (ID)", + "dt_xml_freetext": "Teste libbere", + "importxml": "'Mborte XML", + "dt_import_selectfile": "Pe piacere scacchia 'u file $1 da 'mbortà:", + "dt_import_encodingtype": "Tipe de codifeche:", + "dt_import_forexisting": "Pe le pàggene ca ggià esistene:", + "dt_import_overwriteexisting": "Sovrascrive 'u condenute ca esiste", + "dt_import_mergeintoexisting": "Sovrascrive sulamende le cambe ca stonne jndr'à 'u file", + "dt_import_skipexisting": "Zumbe", + "dt_import_appendtoexisting": "'Nzicche a 'u condenute ca esiste", + "dt_import_summarydesc": "Ripeloghe de l'imbortazione:", + "dt_import_editsummary": "'Mborte {{ucfirst:$1}}", + "dt_import_importing": "Stoche a 'mborte...", + "dt_import_success": "$1 {{PLURAL:$1|pàgene|pàggene}} ca onna essere ccrejate da 'u file $2.", + "importcsv": "'Mborte CSV", + "importspreadsheet": "'Mborte 'u foglie de calcole", + "dt_importcsv_badheader": "Errore: 'a testate d'a colonne $1, '$2', adda essere o '$3' o '$4' o une de le module 'template_name[field_name]'", + "right-datatransferimport": "'Mborte date", + "dt_filetype_spreadsheet": "foglie de calcole" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/rtm.json b/www/wiki/extensions/DataTransfer/i18n/rtm.json new file mode 100644 index 00000000..7e0847d2 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/rtm.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Jose77" + ] + }, + "dt_viewxml_categories": "Katekori" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ru.json b/www/wiki/extensions/DataTransfer/i18n/ru.json new file mode 100644 index 00000000..80f1d0d2 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ru.json @@ -0,0 +1,43 @@ +{ + "@metadata": { + "authors": [ + "Ferrer", + "Innv", + "Lockal", + "Okras", + "Александр Сигачёв" + ] + }, + "datatransfer-desc": "Позволяет импортировать и экспортировать данные, содержащиеся в вызовах шаблонов", + "viewxml": "Просмотр XML", + "dt_viewxml_docu": "Пожалуйста, выберите категории и пространства имён для просмотра в формате XML.", + "dt_viewxml_categories": "Категории", + "dt_viewxml_namespaces": "Пространства имён", + "dt_viewxml_simplifiedformat": "Упрощённый формат", + "dt_xml_namespace": "Пространство имён", + "dt_xml_pages": "Страницы", + "dt_xml_page": "Страница", + "dt_xml_template": "Шаблон", + "dt_xml_field": "Поле", + "dt_xml_name": "Имя", + "dt_xml_title": "Заголовок", + "dt_xml_id": "ID", + "dt_xml_freetext": "Свободный текст", + "importxml": "Импорт XML", + "dt_import_selectfile": "Пожалуйста, выберите файл $1 для импорта:", + "dt_import_encodingtype": "Тип кодировки:", + "dt_import_forexisting": "Для страниц, которые уже существуют:", + "dt_import_overwriteexisting": "Переписать существующие данные", + "dt_import_mergeintoexisting": "Перезаписывать только поля, содержащиеся в файле", + "dt_import_skipexisting": "Пропустить", + "dt_import_appendtoexisting": "Добавить к существующим данным", + "dt_import_summarydesc": "Описание импорта:", + "dt_import_editsummary": "импорт из {{ucfirst:$1}}", + "dt_import_importing": "Импортирование...", + "dt_import_success": "$1 {{PLURAL:$1|страница была|страницы были|страниц были}} созданы из файла $2.", + "importcsv": "Импорт CSV", + "importspreadsheet": "Импорт таблицы", + "dt_importcsv_badheader": "Ошибка. Заголовок колонки №$1 «$2» должен быть или «$3», или «$4», или в форме «template_name[field_name]»", + "right-datatransferimport": "Импорт данных", + "dt_filetype_spreadsheet": "таблица" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/rue.json b/www/wiki/extensions/DataTransfer/i18n/rue.json new file mode 100644 index 00000000..18d78896 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/rue.json @@ -0,0 +1,20 @@ +{ + "@metadata": { + "authors": [ + "Gazeb" + ] + }, + "dt_viewxml_categories": "Катеґорії", + "dt_viewxml_namespaces": "Просторы назв", + "dt_viewxml_simplifiedformat": "Простый формат", + "dt_xml_namespace": "Простор назв", + "dt_xml_pages": "Сторінкы", + "dt_xml_page": "Сторінка", + "dt_xml_template": "Шаблона", + "dt_xml_field": "Поле", + "dt_xml_name": "Назва", + "dt_xml_title": "Надпис", + "dt_xml_id": "ID", + "dt_xml_freetext": "Вольный текст", + "importxml": "Імпортовати XML" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/scn.json b/www/wiki/extensions/DataTransfer/i18n/scn.json new file mode 100644 index 00000000..43903ccf --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/scn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Aushulz" + ] + }, + "dt_xml_name": "Nomu", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sd.json b/www/wiki/extensions/DataTransfer/i18n/sd.json new file mode 100644 index 00000000..6dc63ac3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sd.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Mehtab ahmed" + ] + }, + "dt_xml_pages": "صفحا" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/si.json b/www/wiki/extensions/DataTransfer/i18n/si.json new file mode 100644 index 00000000..7c1bf082 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/si.json @@ -0,0 +1,32 @@ +{ + "@metadata": { + "authors": [ + "පසිඳු කාවින්ද" + ] + }, + "viewxml": "XML නරඹන්න", + "dt_viewxml_categories": "ප්රවර්ගයන්", + "dt_viewxml_namespaces": "නාමඅවකාශයන්", + "dt_viewxml_simplifiedformat": "සුළු කළ ආකෘතිය", + "dt_xml_namespace": "නාමඅවකාශය", + "dt_xml_pages": "පිටු", + "dt_xml_page": "පිටුව", + "dt_xml_template": "සැකිල්ල", + "dt_xml_field": "ක්ෂේත්රය", + "dt_xml_name": "නම", + "dt_xml_title": "ශීර්ෂය", + "dt_xml_id": "හැඳුනුම", + "dt_xml_freetext": "නිදහස් පාඨය", + "importxml": "XML ආයාත කරන්න", + "dt_import_selectfile": "ආයාත කිරීම සඳහා කරුණාකර $1 ගොනුව තෝරන්න:", + "dt_import_encodingtype": "කේතීකරණ වර්ගය:", + "dt_import_forexisting": "දැනටමත් පවතින පිටු සඳහා:", + "dt_import_overwriteexisting": "පවතින අන්තර්ගතය අධිලිවීමකට ලක්කරන්න", + "dt_import_skipexisting": "මඟ හරින්න", + "dt_import_appendtoexisting": "පවත්නා අන්තර්ගතයට අමුණන්න", + "dt_import_summarydesc": "ආයාත කිරීමේ සාරාංශය:", + "dt_import_editsummary": "$1 ආයාත කරන්න", + "dt_import_importing": "ආයාත කරමින්...", + "importcsv": "CSV ආයාත කරන්න", + "right-datatransferimport": "දත්ත ආයාත කරන්න" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sk.json b/www/wiki/extensions/DataTransfer/i18n/sk.json new file mode 100644 index 00000000..494f1d1a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sk.json @@ -0,0 +1,31 @@ +{ + "@metadata": { + "authors": [ + "Helix84" + ] + }, + "datatransfer-desc": "Umožňuje import a export údajov obsiahnutých v bunkách šablón", + "viewxml": "Zobraziť XML", + "dt_viewxml_docu": "Prosím, vyberte ktorý spomedzi nasledovných kategórií a menných priestorov zobraziť vo formáte XML.", + "dt_viewxml_categories": "Kategórie", + "dt_viewxml_namespaces": "Menné priestory", + "dt_viewxml_simplifiedformat": "Zjednodušený formát", + "dt_xml_namespace": "Menný priestor", + "dt_xml_pages": "Stránky", + "dt_xml_page": "Stránka", + "dt_xml_template": "Šablóna", + "dt_xml_field": "Pole", + "dt_xml_name": "Názov", + "dt_xml_title": "Nadpis", + "dt_xml_id": "ID", + "dt_xml_freetext": "Voľný text", + "importxml": "Importovať XML", + "dt_import_selectfile": "Prosím, vyberte $1 súbor, ktorý chcete importovať:", + "dt_import_encodingtype": "Typ kódovania:", + "dt_import_editsummary": "Import $1", + "dt_import_importing": "Prebieha import...", + "dt_import_success": "Z $2 súboru sa {{PLURAL:$1|importuje $1 stránka|importujú $1 stránky|importuje $1 stránok}}.", + "importcsv": "Import CSV", + "dt_importcsv_badheader": "Chyba: stĺpec $1 hlavičky, „$2“ musí mať hodnotu buď „$3“, „$4“ alebo byť v tvare „názov_šablóny[názov_poľa]“", + "right-datatransferimport": "Importovať údaje" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sl.json b/www/wiki/extensions/DataTransfer/i18n/sl.json new file mode 100644 index 00000000..3fe235e0 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sl.json @@ -0,0 +1,39 @@ +{ + "@metadata": { + "authors": [ + "Dbc334" + ] + }, + "datatransfer-desc": "Omogoča uvažanje in izvažanje podatkov iz klicev predlog", + "viewxml": "Ogled XML", + "dt_viewxml_docu": "Prosimo, izberite med naslednjimi kategorijami in imenskimi prostori za ogled v obliki XML.", + "dt_viewxml_categories": "Kategorije", + "dt_viewxml_namespaces": "Imenski prostori", + "dt_viewxml_simplifiedformat": "Poenostavljena oblika", + "dt_xml_namespace": "Imenski prostor", + "dt_xml_pages": "Strani", + "dt_xml_page": "Stran", + "dt_xml_template": "Predloga", + "dt_xml_field": "Polje", + "dt_xml_name": "Ime", + "dt_xml_title": "Naslov", + "dt_xml_id": "ID", + "dt_xml_freetext": "Prosto besedilo", + "importxml": "Uvozi XML", + "dt_import_selectfile": "Prosimo, izberite datoteko $1 za uvoz:", + "dt_import_encodingtype": "Vrsta kodiranja:", + "dt_import_forexisting": "Za že obstoječe strani:", + "dt_import_overwriteexisting": "Prepiši obstoječo vsebino", + "dt_import_mergeintoexisting": "Prepiši samo polja iz datoteke", + "dt_import_skipexisting": "Preskoči", + "dt_import_appendtoexisting": "Dodaj obstoječi vsebini", + "dt_import_summarydesc": "Povzetek uvoza:", + "dt_import_editsummary": "uvoz $1", + "dt_import_importing": "Uvažanje ...", + "dt_import_success": "Iz datoteke $2 bom ustvaril $1 {{PLURAL:$1|stran|strani}}.", + "importcsv": "Uvozi CSV", + "importspreadsheet": "Uvoz preglednice", + "dt_importcsv_badheader": "Napaka: glava stolpca $1, '$2', mora biti '$3', '$4' ali oblike 'template_name[field_name]'", + "right-datatransferimport": "Uvoz podatkov", + "dt_filetype_spreadsheet": "preglednice" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sr-ec.json b/www/wiki/extensions/DataTransfer/i18n/sr-ec.json new file mode 100644 index 00000000..8d05f0ab --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sr-ec.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Rancher", + "Sasa Stefanovic", + "Жељко Тодоровић", + "Михајло Анђелковић", + "Milicevic01", + "Acamicamacaraca", + "BadDog" + ] + }, + "viewxml": "Приказ XML-а", + "dt_viewxml_categories": "Категорије", + "dt_viewxml_namespaces": "Именски простори", + "dt_viewxml_simplifiedformat": "Поједностављени формат", + "dt_xml_namespace": "Именски простор", + "dt_xml_pages": "Странице", + "dt_xml_page": "Страница", + "dt_xml_template": "Шаблон", + "dt_xml_field": "Поље", + "dt_xml_name": "Име", + "dt_xml_title": "Наслов", + "dt_xml_id": "Назнака", + "dt_xml_freetext": "Слободан текст", + "importxml": "Увези XML", + "dt_import_encodingtype": "Врста кодирања:", + "dt_import_forexisting": "За странице које већ постоје:", + "dt_import_overwriteexisting": "Замени постојећи садржај", + "dt_import_skipexisting": "Прескочи", + "dt_import_appendtoexisting": "Додај у постојећи садржај", + "dt_import_summarydesc": "Опис увоза:", + "dt_import_editsummary": "{{ucfirst:$1}} увоз", + "dt_import_importing": "Увоз у току...", + "importcsv": "Увези CSV", + "right-datatransferimport": "Увези податке" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sr-el.json b/www/wiki/extensions/DataTransfer/i18n/sr-el.json new file mode 100644 index 00000000..f7c388b8 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sr-el.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "Michaello", + "Жељко Тодоровић", + "Milicevic01" + ] + }, + "viewxml": "Vidi XML", + "dt_viewxml_categories": "Kategorije", + "dt_viewxml_namespaces": "Imenski prostori", + "dt_viewxml_simplifiedformat": "Pojednostavljeni format", + "dt_xml_namespace": "Imenski prostor", + "dt_xml_pages": "Članci", + "dt_xml_page": "Stranica", + "dt_xml_template": "Šablon", + "dt_xml_field": "Polje", + "dt_xml_name": "Ime", + "dt_xml_title": "Naslov", + "dt_xml_id": "ID", + "dt_xml_freetext": "Slobodan tekst", + "importxml": "Uvezi XML", + "dt_import_editsummary": "{{ucfirst:$1}} uvoz", + "dt_import_importing": "Uvoz u toku...", + "importcsv": "Uvezi CSV", + "right-datatransferimport": "Uvezi podatke" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/stq.json b/www/wiki/extensions/DataTransfer/i18n/stq.json new file mode 100644 index 00000000..0f8b4ae3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/stq.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Pyt" + ] + }, + "datatransfer-desc": "Ferlööwet dän Import un Export fon strukturierde Doaten, do der in Aproupen un Foarloagen ferwoand wäide.", + "viewxml": "XML ankiekje", + "dt_viewxml_docu": "Wääl uut, wäkke Kategorien in dät XML-Formoat anwiesd wäide skällen.", + "dt_viewxml_categories": "Kategorien", + "dt_viewxml_namespaces": "Noomensruume", + "dt_viewxml_simplifiedformat": "Fereenfacht Formoat", + "dt_xml_namespace": "Noomensruum", + "dt_xml_page": "Siede", + "dt_xml_field": "Fäild", + "dt_xml_name": "Noome", + "dt_xml_title": "Tittel" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/su.json b/www/wiki/extensions/DataTransfer/i18n/su.json new file mode 100644 index 00000000..78f90b4d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/su.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Irwangatot" + ] + }, + "dt_viewxml_namespaces": "Ngaranspasi" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/sv.json b/www/wiki/extensions/DataTransfer/i18n/sv.json new file mode 100644 index 00000000..4c216e61 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/sv.json @@ -0,0 +1,46 @@ +{ + "@metadata": { + "authors": [ + "Fluff", + "Gabbe.g", + "Jopparn", + "Lejonel", + "M.M.S.", + "Per", + "Rotsee", + "WikiPhoenix" + ] + }, + "datatransfer-desc": "Tillåter import och export av data som finns i mallanrop", + "viewxml": "Visa XML", + "dt_viewxml_docu": "Välj vilka av följande kategorier och namnrymder som ska visas i XML-format.", + "dt_viewxml_categories": "Kategorier", + "dt_viewxml_namespaces": "Namnrymder", + "dt_viewxml_simplifiedformat": "Förenklat format", + "dt_xml_namespace": "Namnrymd", + "dt_xml_pages": "Sidor", + "dt_xml_page": "Sida", + "dt_xml_template": "Mall", + "dt_xml_field": "Fält", + "dt_xml_name": "Namn", + "dt_xml_title": "Titel", + "dt_xml_id": "ID", + "dt_xml_freetext": "Fritext", + "importxml": "Importera XML", + "dt_import_selectfile": "Vänligen välj $1-filen som skall importeras:", + "dt_import_encodingtype": "Teckenkodningstyp:", + "dt_import_forexisting": "För sidor som redan finns:", + "dt_import_overwriteexisting": "Skriv över existerande innehåll", + "dt_import_mergeintoexisting": "Skriv endast över fält som finns i filen", + "dt_import_skipexisting": "Hoppa över", + "dt_import_appendtoexisting": "Lägg till efter befintligt innehåll", + "dt_import_summarydesc": "Sammanfattning av importen:", + "dt_import_editsummary": "importera {{ucfirst:$1}}", + "dt_import_importing": "Importerar...", + "dt_import_success": "$1 {{PLURAL:$1|sida|sidor}} kommer skapas från $2-filen.", + "importcsv": "Importera CSV", + "importspreadsheet": "Importera kalkylblad", + "dt_importcsv_badheader": "Fel: Titeln $2 för kolumnen $1 måste vara antingen $3, $4 eller på formen 'mallnamn[fältnamn]'", + "right-datatransferimport": "Importera data", + "dt_filetype_spreadsheet": "kalkylblad" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/szl.json b/www/wiki/extensions/DataTransfer/i18n/szl.json new file mode 100644 index 00000000..1b968c70 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/szl.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Herr Kriss" + ] + }, + "dt_xml_page": "Zajta", + "dt_xml_name": "Mjano" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ta.json b/www/wiki/extensions/DataTransfer/i18n/ta.json new file mode 100644 index 00000000..45310bf7 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ta.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Karthi.dr", + "Shanmugamp7", + "TRYPPN", + "Trengarasu", + "Ulmo", + "மதனாஹரன்", + "ElangoRamanujam" + ] + }, + "viewxml": "XML ஐப் பார்", + "dt_viewxml_categories": "பகுப்புகள்", + "dt_viewxml_namespaces": "பெயர்வெளிகள்", + "dt_viewxml_simplifiedformat": "எளிதாக்கப்பட்ட வடிவம்", + "dt_xml_namespace": "பெயர்வெளி", + "dt_xml_pages": "பக்கங்கள்", + "dt_xml_page": "பக்கம்", + "dt_xml_template": "வார்ப்புரு", + "dt_xml_field": "புலம்", + "dt_xml_name": "பெயர்", + "dt_xml_title": "தலைப்பு", + "dt_xml_id": "அடையாளம்", + "dt_xml_freetext": "எந்த கட்டுப்பாடும் இல்லா சொற்றொடர்", + "importxml": "XML இறக்குமதி செய்", + "dt_import_selectfile": "தயவுசெய்து $1 கோப்பை இறக்குமதிக்காக தேர்வுசெய்யவும்:", + "dt_import_forexisting": "ஏற்கனவே உள்ள பக்கங்களுக்கு:", + "dt_import_overwriteexisting": "தற்போதுள்ள உள்ளடக்கத்தை அழித்தெழுது", + "dt_import_skipexisting": "தவிர்", + "dt_import_appendtoexisting": "ஏற்கனவே உள்ள உள்ளடக்கத்துடன் இணை", + "dt_import_summarydesc": "இறக்குமதிச் சுருக்கம்:", + "dt_import_editsummary": "{{ucfirst:$1}} இறக்குமதி", + "dt_import_importing": "இறக்குமதியாகிறது...", + "dt_import_success": "$2 கோப்பிலிருந்து $1 {{PLURAL:$1|பக்கம்|பக்கங்கள்}} உருவாக்கப்படும்.", + "right-datatransferimport": "தரவுகளை ஏற்றுமதி செய்யவும்" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/te.json b/www/wiki/extensions/DataTransfer/i18n/te.json new file mode 100644 index 00000000..28783b71 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/te.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "Chaduvari", + "Veeven" + ] + }, + "viewxml": "XMLని చూడండి", + "dt_viewxml_categories": "వర్గాలు", + "dt_viewxml_namespaces": "పేరుబరులు", + "dt_xml_namespace": "పేరుబరి", + "dt_xml_pages": "పేజీలు", + "dt_xml_page": "పేజీ", + "dt_xml_template": "మూస", + "dt_xml_name": "పేరు", + "dt_xml_title": "శీర్షిక", + "dt_xml_id": "ఐడీ", + "dt_xml_freetext": "స్వేచ్ఛా పాఠ్యం", + "dt_import_appendtoexisting": "ఈసరికే ఉన్న కంటెంటు వెనుక చేర్చు", + "dt_import_summarydesc": "దిగుమతి సారాంశం:", + "dt_import_editsummary": "$1 దిగుమతి", + "dt_import_importing": "దిగుమతి చేస్తున్నాం...", + "dt_import_success": "ఫైలు $2 నుండి $1 {{PLURAL:$1|పేజీ|పేజీలు}} సృష్టించబడతాయి.", + "importcsv": "CSV ని దిగుమతి చెయ్యి", + "dt_importcsv_badheader": "లోపం: నిలువు వరుస $1 శీర్షం, '$2', '$3' అయినా లేక '$4' అయినా ఉండాలి. లేదా 'template_name[field_name]' రూపంలో అయినా ఉండాలి", + "right-datatransferimport": "డేటాను దిగుమతి చెయ్యి" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tet.json b/www/wiki/extensions/DataTransfer/i18n/tet.json new file mode 100644 index 00000000..8c5b348f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tet.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "MF-Warburg" + ] + }, + "dt_viewxml_categories": "Kategoria sira", + "dt_xml_namespace": "Espasu pájina nian", + "dt_xml_pages": "Pájina sira", + "dt_xml_page": "Pájina", + "dt_xml_name": "Naran", + "dt_xml_title": "Títulu:", + "dt_xml_id": "ID" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tg-cyrl.json b/www/wiki/extensions/DataTransfer/i18n/tg-cyrl.json new file mode 100644 index 00000000..8eafde42 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tg-cyrl.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Ibrahim" + ] + }, + "dt_viewxml_categories": "Гурӯҳҳо", + "dt_viewxml_namespaces": "Фазоҳои ном", + "dt_xml_namespace": "Фазоином", + "dt_xml_page": "Саҳифа", + "dt_xml_name": "Ном", + "dt_xml_title": "Унвон", + "dt_xml_freetext": "Матни дилхоҳ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tg-latn.json b/www/wiki/extensions/DataTransfer/i18n/tg-latn.json new file mode 100644 index 00000000..1763bdb5 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tg-latn.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Liangent" + ] + }, + "dt_viewxml_categories": "Gurūhho", + "dt_viewxml_namespaces": "Fazohoi nom", + "dt_xml_namespace": "Fazoinom", + "dt_xml_page": "Sahifa", + "dt_xml_name": "Nom", + "dt_xml_title": "Unvon", + "dt_xml_freetext": "Matni dilxoh" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/th.json b/www/wiki/extensions/DataTransfer/i18n/th.json new file mode 100644 index 00000000..e9c26545 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/th.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Octahedron80" + ] + }, + "dt_viewxml_categories": "หมวดหมู่", + "dt_viewxml_namespaces": "เนมสเปซ", + "dt_xml_namespace": "เนมสเปซ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tk.json b/www/wiki/extensions/DataTransfer/i18n/tk.json new file mode 100644 index 00000000..c73200d3 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tk.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Hanberke" + ] + }, + "dt_xml_page": "Sahypa", + "dt_xml_name": "At" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tl.json b/www/wiki/extensions/DataTransfer/i18n/tl.json new file mode 100644 index 00000000..3bc4d120 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tl.json @@ -0,0 +1,36 @@ +{ + "@metadata": { + "authors": [ + "AnakngAraw" + ] + }, + "datatransfer-desc": "Nagpapahintulot sa pag-aangkat at pagluluwas ng mga datong nasa loob ng mga pagtawag sa suleras", + "viewxml": "Tingnan ang XML", + "dt_viewxml_docu": "Pumili po lamang mula sa sumusunod na mga kaurian at mga espasyo ng pangalan upang makita ang anyong XML.", + "dt_viewxml_categories": "Mga kaurian", + "dt_viewxml_namespaces": "Mga espasyo ng pangalan", + "dt_viewxml_simplifiedformat": "Pinapayak na anyo", + "dt_xml_namespace": "Espasyo ng pangalan", + "dt_xml_pages": "Mga pahina", + "dt_xml_page": "Pahina", + "dt_xml_template": "Suleras", + "dt_xml_field": "Hanay", + "dt_xml_name": "Pangalan", + "dt_xml_title": "Pamagat", + "dt_xml_id": "ID", + "dt_xml_freetext": "Malayang Teksto", + "importxml": "Angkatin ang XML", + "dt_import_selectfile": "Pakipili ang talaksang $1 na aangkatin:", + "dt_import_encodingtype": "Uri ng pagkokodigo:", + "dt_import_forexisting": "Para sa mga pahinang umiiral na:", + "dt_import_overwriteexisting": "Patungan ang umiiral na nilalaman", + "dt_import_skipexisting": "Laktawan", + "dt_import_appendtoexisting": "Isugpong sa umiiral na nilalaman", + "dt_import_summarydesc": "Buod ng pag-angkat:", + "dt_import_editsummary": "Pag-angkat ng $1", + "dt_import_importing": "Inaangkat...", + "dt_import_success": "$1 {{PLURAL:$1|pahina|mga pahina}} ang lilikhain mula sa talaksang $2.", + "importcsv": "Angkatin ang CSV", + "dt_importcsv_badheader": "Kamalian: ang patayong hanay ng paulong $1, '$2', ay dapat na '$3', '$4' o nasa pormang 'template_name[field_name]'", + "right-datatransferimport": "Angkatin ang dato" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tly.json b/www/wiki/extensions/DataTransfer/i18n/tly.json new file mode 100644 index 00000000..2390b306 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tly.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Erdemaslancan" + ] + }, + "dt_xml_page": "Сәһифә" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tr.json b/www/wiki/extensions/DataTransfer/i18n/tr.json new file mode 100644 index 00000000..d6acb5e1 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tr.json @@ -0,0 +1,37 @@ +{ + "@metadata": { + "authors": [ + "Joseph", + "Karduelis", + "Mach", + "Manco Capac", + "Srhat", + "Vito Genovese" + ] + }, + "datatransfer-desc": "Şablon çağrılarında içerilen verilerin içe ve dışa aktarımına izin verir", + "viewxml": "XML'i gör", + "dt_viewxml_docu": "Lütfen, XML formatında görüntülemek için aşağıdaki kategori ve ad alanları arasından seçin.", + "dt_viewxml_categories": "Kategoriler", + "dt_viewxml_namespaces": "İsim alanları", + "dt_viewxml_simplifiedformat": "Basitleştirilmiş format", + "dt_xml_namespace": "Ad alanı", + "dt_xml_pages": "Sayfalar", + "dt_xml_page": "Sayfa", + "dt_xml_template": "Şablon", + "dt_xml_field": "Alan", + "dt_xml_name": "İsim", + "dt_xml_title": "Başlık", + "dt_xml_id": "ID", + "dt_xml_freetext": "Özgür Metin", + "importxml": "XML içe aktar", + "dt_import_selectfile": "Lütfen içe aktarmak için $1 dosyasını seçin:", + "dt_import_encodingtype": "Kodlama türü:", + "dt_import_summarydesc": "İçe aktarma özeti:", + "dt_import_editsummary": "$1 içe aktarımı", + "dt_import_importing": "İçe aktarıyor...", + "dt_import_success": "$2 dosyasından $1 {{PLURAL:$1|sayfa|sayfa}} oluşturulacak.", + "importcsv": "CSV'yi içe aktar", + "dt_importcsv_badheader": "Hata: $1 kolonunun başlığı olan '$2', '$3', '$4' ya da 'şablon_adı[alan_adı]' şeklinde olmalıdır", + "right-datatransferimport": "Verileri içe aktarır" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tt-cyrl.json b/www/wiki/extensions/DataTransfer/i18n/tt-cyrl.json new file mode 100644 index 00000000..f2389914 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tt-cyrl.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Ильнар" + ] + }, + "dt_viewxml_categories": "Төркемнәр", + "dt_viewxml_namespaces": "Исемнәр мәйданы", + "dt_viewxml_simplifiedformat": "Гадиләштерелгән формат", + "dt_xml_namespace": "Исемнәр мәйданы", + "dt_xml_pages": "Битләр", + "dt_xml_page": "Бит", + "dt_xml_template": "Калып", + "dt_xml_field": "Мәйдан", + "dt_xml_name": "Исем", + "dt_xml_title": "Башлам", + "dt_xml_id": "ID", + "dt_xml_freetext": "Ирекле текст", + "importxml": "XML импорты", + "dt_import_selectfile": "Зинһар, импорт өчен $1 файлын сайлагыз:", + "dt_import_encodingtype": "Кодлау төре" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/tzm.json b/www/wiki/extensions/DataTransfer/i18n/tzm.json new file mode 100644 index 00000000..84eb2071 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/tzm.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Tifinaghes" + ] + }, + "viewxml": "ⵥⵕ XML", + "dt_xml_name": "ⴰⵙⵙⴰⵖ", + "dt_xml_freetext": "ⴰⴹⵔⵉⵙ ⴰⴷⵔⴼ" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ug-latn.json b/www/wiki/extensions/DataTransfer/i18n/ug-latn.json new file mode 100644 index 00000000..afb7dd15 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ug-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Jose77" + ] + }, + "dt_xml_page": "Bet" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/uk.json b/www/wiki/extensions/DataTransfer/i18n/uk.json new file mode 100644 index 00000000..af7d019d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/uk.json @@ -0,0 +1,43 @@ +{ + "@metadata": { + "authors": [ + "AS", + "Arturyatsko", + "Prima klasy4na", + "Ата", + "Тест" + ] + }, + "datatransfer-desc": "Дозволяє імпортувати та експортувати дані, які містяться в викликах шаблонів", + "viewxml": "Перегляд XML", + "dt_viewxml_docu": "Будь ласка, виберіть одну з наступних категорій та імен для перегляду в форматі XML.", + "dt_viewxml_categories": "Категорії", + "dt_viewxml_namespaces": "Простори назв", + "dt_viewxml_simplifiedformat": "Спрощений формат", + "dt_xml_namespace": "Простір назв", + "dt_xml_pages": "Сторінки", + "dt_xml_page": "Сторінка", + "dt_xml_template": "Шаблон", + "dt_xml_field": "Поле", + "dt_xml_name": "Назва", + "dt_xml_title": "Заголовок", + "dt_xml_id": "ID", + "dt_xml_freetext": "Вільний текст", + "importxml": "Імпорт XML", + "dt_import_selectfile": "Будь ласка, виберіть файл $1 для імпорту:", + "dt_import_encodingtype": "Тип кодування:", + "dt_import_forexisting": "Для сторінок, які вже існують:", + "dt_import_overwriteexisting": "Перезаписати існуючий вміст", + "dt_import_mergeintoexisting": "Перезаписати лише поля, що містяться у файлі", + "dt_import_skipexisting": "Пропустити", + "dt_import_appendtoexisting": "Додати до існуючого вмісту", + "dt_import_summarydesc": "Опис імпорту:", + "dt_import_editsummary": "імпорт {{ucfirst:$1}}", + "dt_import_importing": "Імпорт ...", + "dt_import_success": "$1 {{PLURAL:$1|сторінка була|сторінки було|сторінок було}} створено з файлу $2.", + "importcsv": "Імпорт CSV", + "importspreadsheet": "Імпорт таблиці", + "dt_importcsv_badheader": "Помилка. Заголовок колонки №$1 «$2» повинен бути або «$3», або «$4», або у формі «template_name[field_name]»", + "right-datatransferimport": "Імпорт даних", + "dt_filetype_spreadsheet": "таблиця" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/ur.json b/www/wiki/extensions/DataTransfer/i18n/ur.json new file mode 100644 index 00000000..dc0cd98d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/ur.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "පසිඳු කාවින්ද" + ] + }, + "dt_viewxml_categories": "زمرہ جات", + "dt_viewxml_namespaces": "فضاہائےنام", + "dt_xml_namespace": "نیم سپیس", + "dt_xml_pages": "صفحات", + "dt_xml_page": "صفحہ", + "dt_xml_template": "سانچے", + "dt_xml_field": "میدان", + "dt_xml_name": "نام", + "dt_xml_title": "عنوان", + "dt_import_skipexisting": "پر", + "right-datatransferimport": "درآمد کے اعداد و شمار" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/vi.json b/www/wiki/extensions/DataTransfer/i18n/vi.json new file mode 100644 index 00000000..4abfef6f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/vi.json @@ -0,0 +1,34 @@ +{ + "@metadata": { + "authors": [ + "Minh Nguyen", + "Vinhtantran", + "පසිඳු කාවින්ද" + ] + }, + "datatransfer-desc": "Cho phép nhập xuất dữ liệu có cấu trúc được chứa trong lời gọi bản mẫu", + "viewxml": "Xem XML", + "dt_viewxml_docu": "Xin hãy chọn trong những thể loại và không gian tên dưới đây để xem ở dạng XML.", + "dt_viewxml_categories": "Thể loại", + "dt_viewxml_namespaces": "Không gian tên", + "dt_viewxml_simplifiedformat": "Định dạng đơn giản hóa", + "dt_xml_namespace": "Không gian tên", + "dt_xml_pages": "Trang", + "dt_xml_page": "Trang", + "dt_xml_template": "Bản mẫu", + "dt_xml_field": "Trường", + "dt_xml_name": "Tên", + "dt_xml_title": "Tựa đề", + "dt_xml_id": "ID", + "dt_xml_freetext": "Văn bản Tự do", + "importxml": "Nhập XML", + "dt_import_selectfile": "Xin hãy chọn tập tin $1 để nhập:", + "dt_import_encodingtype": "Bảng mã:", + "dt_import_skipexisting": "Bỏ qua", + "dt_import_editsummary": "Nhập $1", + "dt_import_importing": "Đang nhập…", + "dt_import_success": "{{PLURAL:$1|Trang|$1 trang}} sẽ được nhập từ tập tin $2.", + "importcsv": "Nhập CSV", + "dt_importcsv_badheader": "Lỗi: tên của cột $1, “$2”, phải là “$3” hay “$4”, hoặc phải theo định dạng “tên_tiêu_bản[tên_trường]”", + "right-datatransferimport": "Nhập dữ liệu" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/vo.json b/www/wiki/extensions/DataTransfer/i18n/vo.json new file mode 100644 index 00000000..43c83976 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/vo.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Malafaya", + "Smeira" + ] + }, + "datatransfer-desc": "Dälon nüveigi e seveigi nünodas peleodüköl in samafomotilüvoks paninädöls", + "viewxml": "Logön eli XML", + "dt_viewxml_docu": "Välolös bevü klads e nemaspads foviks utosi, kelosi vilol logön fomätü XML.", + "dt_viewxml_categories": "Klads", + "dt_viewxml_namespaces": "Nemaspads", + "dt_viewxml_simplifiedformat": "Fomät pebalugüköl", + "dt_xml_namespace": "Nemaspad", + "dt_xml_page": "Pad", + "dt_xml_field": "Fel", + "dt_xml_name": "Nem", + "dt_xml_title": "Tiäd", + "dt_xml_id": "Dientifanüm", + "dt_xml_freetext": "Vödem libik" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/yi.json b/www/wiki/extensions/DataTransfer/i18n/yi.json new file mode 100644 index 00000000..22205eeb --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/yi.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "פוילישער" + ] + }, + "dt_xml_name": "נאָמען", + "dt_xml_title": "טיטל" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/zh-hans.json b/www/wiki/extensions/DataTransfer/i18n/zh-hans.json new file mode 100644 index 00000000..0ee649e0 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/zh-hans.json @@ -0,0 +1,45 @@ +{ + "@metadata": { + "authors": [ + "Gaoxuewei", + "Hydra", + "Linforest", + "PhiLiP", + "Qiyue2001", + "Shirayuki", + "Liuxinyu970226" + ] + }, + "datatransfer-desc": "允许根据模板的要求导入导出结构化的数据", + "viewxml": "查看XML", + "dt_viewxml_docu": "请选择要使用XML格式查看的分类和名字空间。", + "dt_viewxml_categories": "分类", + "dt_viewxml_namespaces": "名字空间", + "dt_viewxml_simplifiedformat": "简化格式", + "dt_xml_namespace": "名字空间", + "dt_xml_pages": "页面", + "dt_xml_page": "页面", + "dt_xml_template": "模板", + "dt_xml_field": "事件", + "dt_xml_name": "名称", + "dt_xml_title": "标题", + "dt_xml_id": "ID", + "dt_xml_freetext": "自由文本", + "importxml": "导入 XML", + "dt_import_selectfile": "请选择 $1 要导入的文件:", + "dt_import_encodingtype": "编码类型:", + "dt_import_forexisting": "对于已经存在的页面:", + "dt_import_overwriteexisting": "覆盖现有内容", + "dt_import_mergeintoexisting": "覆盖只包含在文件中的字段", + "dt_import_skipexisting": "跳过", + "dt_import_appendtoexisting": "追加到现有内容", + "dt_import_summarydesc": "导入摘要:", + "dt_import_editsummary": "{{ucfirst:$1}}导入", + "dt_import_importing": "正在导入...", + "dt_import_success": "将依据此$2文件创建$1个{{PLURAL:$1|个页面}}。", + "importcsv": "导入 CSV", + "importspreadsheet": "导入电子表格", + "dt_importcsv_badheader": "错误:第$1列的标题'$2'必须为'$3'、或者'$4'、或者采取'模板名称[字段名称]'的形式", + "right-datatransferimport": "导入数据", + "dt_filetype_spreadsheet": "电子表格" +} diff --git a/www/wiki/extensions/DataTransfer/i18n/zh-hant.json b/www/wiki/extensions/DataTransfer/i18n/zh-hant.json new file mode 100644 index 00000000..ced8a87d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/i18n/zh-hant.json @@ -0,0 +1,43 @@ +{ + "@metadata": { + "authors": [ + "Liangent", + "Mark85296341", + "LNDDYL", + "Kly", + "Liuxinyu970226" + ] + }, + "datatransfer-desc": "允許根據模板的要求匯入匯出結構化的資料", + "viewxml": "檢視XML", + "dt_viewxml_docu": "請在下列分類、名稱空間中選擇,以使用XML格式查看。", + "dt_viewxml_categories": "分類", + "dt_viewxml_namespaces": "命名空間", + "dt_viewxml_simplifiedformat": "簡化格式", + "dt_xml_namespace": "命名空間", + "dt_xml_pages": "頁面", + "dt_xml_page": "頁面", + "dt_xml_template": "模板", + "dt_xml_field": "事件", + "dt_xml_name": "名稱", + "dt_xml_title": "標題", + "dt_xml_id": "ID", + "dt_xml_freetext": "自由文字", + "importxml": "匯入 XML", + "dt_import_selectfile": "請選擇 $1 要匯入的檔案:", + "dt_import_encodingtype": "編碼類型:", + "dt_import_forexisting": "對於已經存在的頁面:", + "dt_import_overwriteexisting": "覆蓋現有內容", + "dt_import_mergeintoexisting": "僅覆蓋包含在檔案裡的欄位", + "dt_import_skipexisting": "跳過", + "dt_import_appendtoexisting": "追加到現有內容", + "dt_import_summarydesc": "匯入摘要:", + "dt_import_editsummary": "{{ucfirst:$1}} 匯入", + "dt_import_importing": "正在匯入…", + "dt_import_success": "將依據此$2檔案建立$1個{{PLURAL:$1|個頁面|個頁面}}。", + "importcsv": "匯入 CSV", + "importspreadsheet": "匯入試算表", + "dt_importcsv_badheader": "錯誤:第$1列的標題'$2'必須為'$3'、或者'$4'、或者採取'模板名稱[字段名稱]'的形式", + "right-datatransferimport": "匯入資料", + "dt_filetype_spreadsheet": "試算表" +} diff --git a/www/wiki/extensions/DataTransfer/includes/DT_Hooks.php b/www/wiki/extensions/DataTransfer/includes/DT_Hooks.php new file mode 100644 index 00000000..95999339 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_Hooks.php @@ -0,0 +1,26 @@ +<?php +/** + * Static functions called by various outside hooks. + * + * @author Yaron Koren + * @ingroup DataTransfer + */ +class DTHooks { + + /** + * Add links to the 'AdminLinks' special page, defined by the Admin Links + * extension + */ + public static function addToAdminLinks( $admin_links_tree ) { + $import_export_section = $admin_links_tree->getSection( wfMessage( 'adminlinks_importexport' )->text() ); + $main_row = $import_export_section->getRow( 'main' ); + $main_row->addItem( ALItem::newFromSpecialPage( 'ViewXML' ) ); + $main_row->addItem( ALItem::newFromSpecialPage( 'ImportXML' ) ); + $main_row->addItem( ALItem::newFromSpecialPage( 'ImportCSV' ) ); + if ( class_exists( 'PHPExcel' )) { + $main_row->addItem( ALItem::newFromSpecialPage( 'ImportSpreadsheet' ) ); + } + return true; + } + +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/includes/DT_ImportJob.php b/www/wiki/extensions/DataTransfer/includes/DT_ImportJob.php new file mode 100644 index 00000000..67a31489 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_ImportJob.php @@ -0,0 +1,69 @@ +<?php + +/** + * Background job to import a page into the wiki, for use by Data Transfer + * + * @author Yaron Koren + */ +class DTImportJob extends Job { + + function __construct( $title, $params = '', $id = 0 ) { + parent::__construct( 'dtImport', $title, $params, $id ); + } + + /** + * Run a dtImport job + * @return boolean success + */ + function run() { + if ( is_null( $this->title ) ) { + $this->error = "dtImport: Invalid title"; + return false; + } + + $wikiPage = WikiPage::factory( $this->title ); + if ( !$wikiPage ) { + $this->error = 'dtImport: Wiki page not found "' . $this->title->getPrefixedDBkey() . '"'; + return false; + } + + $for_pages_that_exist = $this->params['for_pages_that_exist']; + if ( $for_pages_that_exist == 'skip' && $this->title->exists() ) { + return true; + } + + // Change global $wgUser variable to the one specified by + // the job only for the extent of this import. + global $wgUser; + $actual_user = $wgUser; + $wgUser = User::newFromId( $this->params['user_id'] ); + $text = $this->params['text']; + if ( $this->title->exists() ) { + if ( $for_pages_that_exist == 'append' ) { + $existingText = ContentHandler::getContentText( $wikiPage->getContent() ); + $text = $existingText . "\n" . $text; + } elseif ( $for_pages_that_exist == 'merge' ) { + $existingPageStructure = DTPageStructure::newFromTitle( $this->title ); + $newPageStructure = new DTPageStructure; + $newPageStructure->parsePageContents( $text ); + $existingPageStructure->mergeInPageStructure( $newPageStructure ); + $text = $existingPageStructure->toWikitext(); + } + // otherwise, $for_pages_that_exist == 'overwrite' + } + $edit_summary = $this->params['edit_summary']; + $new_content = new WikitextContent( $text ); + // It's strange that doEditContent() doesn't + // automatically attach the 'bot' flag when the user + // is a bot... + if ( $wgUser->isAllowed( 'bot' ) ) { + $flags = EDIT_FORCE_BOT; + } else { + $flags = 0; + } + $wikiPage->doEditContent( $new_content, $edit_summary, $flags ); + + $wgUser = $actual_user; + return true; + } +} diff --git a/www/wiki/extensions/DataTransfer/includes/DT_Page.php b/www/wiki/extensions/DataTransfer/includes/DT_Page.php new file mode 100644 index 00000000..eb3c92fc --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_Page.php @@ -0,0 +1,56 @@ +<?php +/** + * Class holding the data of a page to be imported + * + * @author Yaron Koren + */ + +class DTPage { + var $mName; + var $mTemplates; + var $mFreeText; + + public function __construct() { + $this->mTemplates = array(); + } + + function setName( $name ) { + $this->mName = $name; + } + + function getName() { + return $this->mName; + } + + function addTemplateField( $template_name, $field_name, $value ) { + + if ( !array_key_exists( $template_name, $this->mTemplates ) ) { + $this->mTemplates[$template_name] = array(); + } + $this->mTemplates[$template_name][$field_name] = $value; + } + + function setFreeText( $free_text ) { + $this->mFreeText = $free_text; + } + + function createText() { + $text = ""; + foreach ( $this->mTemplates as $template_name => $fields ) { + $fieldsAdded = false; + $text .= '{{' . $template_name; + foreach ( $fields as $field_name => $val ) { + if ( $val != '' ) { + $text .= "\n|$field_name=$val"; + $fieldsAdded = true; + } + } + if ( $fieldsAdded ) { + $text .= "\n"; + } + $text .= '}}' . "\n"; + } + $text .= $this->mFreeText; + return $text; + } +} diff --git a/www/wiki/extensions/DataTransfer/includes/DT_PageComponent.php b/www/wiki/extensions/DataTransfer/includes/DT_PageComponent.php new file mode 100644 index 00000000..24c91719 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_PageComponent.php @@ -0,0 +1,131 @@ +<?php +/** + * Class that represents a single "component" of a page - either a template + * or a piece of free text. + * + * @author Yaron Koren + * @author DataTransfer + */ +class DTPageComponent { + var $mIsTemplate = false; + var $mTemplateName; + static $mUnnamedFieldCounter; + var $mFields; + var $mFreeText; + static $mFreeTextIDCounter = 1; + var $mFreeTextID; + + public static function newTemplate( $templateName ) { + $dtPageComponent = new DTPageComponent(); + $dtPageComponent->mTemplateName = trim( $templateName ); + $dtPageComponent->mIsTemplate = true; + $dtPageComponent->mFields = array(); + self::$mUnnamedFieldCounter = 1; + return $dtPageComponent; + } + public static function newFreeText( $freeText ) { + $dtPageComponent = new DTPageComponent(); + $dtPageComponent->mIsTemplate = false; + $dtPageComponent->mFreeText = $freeText; + $dtPageComponent->mFreeTextID = self::$mFreeTextIDCounter++; + return $dtPageComponent; + } + + public function addNamedField( $fieldName, $fieldValue ) { + $this->mFields[trim( $fieldName )] = trim( $fieldValue ); + } + + public function addUnnamedField( $fieldValue ) { + $fieldName = self::$mUnnamedFieldCounter++; + $this->mFields[$fieldName] = trim( $fieldValue ); + } + + public function toWikitext() { + if ( $this->mIsTemplate ) { + $wikitext = '{{' . $this->mTemplateName; + foreach ( $this->mFields as $fieldName => $fieldValue ) { + if ( is_numeric( $fieldName ) ) { + $wikitext .= '|' . $fieldValue; + } else { + $wikitext .= "\n|$fieldName=$fieldValue"; + } + } + $wikitext .= "\n}}"; + return $wikitext; + } else { + return $this->mFreeText; + } + } + + public function toXML( $isSimplified ) { + global $wgDataTransferViewXMLParseFields; + global $wgDataTransferViewXMLParseFreeText; + global $wgParser, $wgTitle; + + if ( $this->mIsTemplate ) { + global $wgContLang; + $namespace_labels = $wgContLang->getNamespaces(); + $template_label = $namespace_labels[NS_TEMPLATE]; + $field_str = str_replace( ' ', '_', wfMessage( 'dt_xml_field' )->inContentLanguage()->text() ); + $name_str = str_replace( ' ', '_', wfMessage( 'dt_xml_name' )->inContentLanguage()->text() ); + + $bodyXML = ''; + foreach ( $this->mFields as $fieldName => $fieldValue ) { + // If this field itself holds template calls, + // get the XML for those calls. + if ( is_array( $fieldValue ) ) { + $fieldValueXML = ''; + foreach ( $fieldValue as $subComponent ) { + $fieldValueXML .= $subComponent->toXML( $isSimplified ); + } + } elseif ( $wgDataTransferViewXMLParseFields ) { + // Avoid table of contents and "edit" links + $fieldValue = $wgParser->parse( "__NOTOC__ __NOEDITSECTION__\n" . $fieldValue, $wgTitle, new ParserOptions() )->getText(); + } + + if ( $isSimplified ) { + if ( is_numeric( $fieldName ) ) { + // add "Field" to the beginning of the file name, since + // XML tags that are simply numbers aren't allowed + $fieldTag = $field_str . '_' . $fieldName; + } else { + $fieldTag = str_replace( ' ', '_', trim( $fieldName ) ); + } + $attrs = null; + } else { + $fieldTag = $field_str; + $attrs = array( $name_str => $fieldName ); + } + if ( is_array( $fieldValue ) ) { + $bodyXML .= Xml::tags( $fieldTag, $attrs, $fieldValueXML ); + } else { + $bodyXML .= Xml::element( $fieldTag, $attrs, $fieldValue ); + } + } + + if ( $isSimplified ) { + $templateName = str_replace( ' ', '_', $this->mTemplateName ); + return Xml::tags( $templateName, null, $bodyXML ); + } else { + return Xml::tags( $template_label, array( $name_str => $this->mTemplateName ), $bodyXML ); + } + } else { + $free_text_str = str_replace( ' ', '_', wfMessage( 'dt_xml_freetext' )->inContentLanguage()->text() ); + if ( $wgDataTransferViewXMLParseFreeText ) { + $freeText = $this->mFreeText; + // Undo the escaping that happened before. + $freeText = str_replace( array( '{', '}' ), array( '{', '}' ), $freeText ); + // Get rid of table of contents. + $mw = MagicWord::get( 'toc' ); + if ( $mw->match( $freeText ) ) { + $freeText = $mw->replace( '', $freeText ); + } + // Avoid "edit" links. + $freeText = $wgParser->parse( "__NOTOC__ __NOEDITSECTION__\n" . $freeText, $wgTitle, new ParserOptions() )->getText(); + } else { + $freeText = $this->mFreeText; + } + return XML::element( $free_text_str, array( 'id' => $this->mFreeTextID ), $freeText ); + } + } +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/includes/DT_PageStructure.php b/www/wiki/extensions/DataTransfer/includes/DT_PageStructure.php new file mode 100644 index 00000000..253cd99e --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_PageStructure.php @@ -0,0 +1,243 @@ +<?php + +/** + * Class that holds the structure of a single wiki page. It is used for both + * turning wikitext into XML, and vice versa. + * + * @author Yaron Koren + * @ingroup DataTransfer + */ +class DTPageStructure { + var $mPageTitle; + var $mComponents = array(); + + function addComponent( $dtPageComponent ) { + $this->mComponents[] = $dtPageComponent; + DTPageComponent::$mFreeTextIDCounter = 1; + } + + public static function newFromTitle( $pageTitle ) { + $pageStructure = new DTPageStructure(); + $pageStructure->mPageTitle = $pageTitle; + + $wiki_page = WikiPage::factory( $pageTitle ); + $page_contents = ContentHandler::getContentText( $wiki_page->getContent() ); + + $pageStructure->parsePageContents( $page_contents ); + + // Now, go through the field values and see if any of them + // hold template calls - if any of them do, parse the value + // as if it's the full contents of a page, and add the + // resulting "components" to that field. + foreach ( $pageStructure->mComponents as $pageComponent ) { + if ( $pageComponent->mIsTemplate ) { + foreach ( $pageComponent->mFields as $fieldName => $fieldValue ) { + if ( strpos( $fieldValue, '{{' ) !== false ) { + $dummyPageStructure = new DTPageStructure(); + $dummyPageStructure->parsePageContents( $fieldValue ); + $pageComponent->mFields[$fieldName] = $dummyPageStructure->mComponents; + } + } + } + } + return $pageStructure; + } + + /** + * Parses the contents of a wiki page, turning template calls into + * an arracy of DTPageComponent objects. + */ + public function parsePageContents( $page_contents ) { + // escape out variables like "{{PAGENAME}}" + $page_contents = str_replace( '{{PAGENAME}}', '{{PAGENAME}}', $page_contents ); + // escape out parser functions + $page_contents = preg_replace( '/{{(#.+)}}/', '{{$1}}', $page_contents ); + // escape out transclusions, and calls like "DEFAULTSORT" + $page_contents = preg_replace( '/{{(.*:.+)}}/', '{{$1}}', $page_contents ); + // escape out variable names + $page_contents = str_replace( '{{{', '{{{', $page_contents ); + $page_contents = str_replace( '}}}', '}}}', $page_contents ); + // escape out tables + $page_contents = str_replace( '{|', '{|', $page_contents ); + $page_contents = str_replace( '|}', '|}', $page_contents ); + + // traverse the page contents, one character at a time + $uncompleted_curly_brackets = 0; + $free_text = ""; + $template_name = ""; + $field_name = ""; + $field_value = ""; + $field_has_name = false; + for ( $i = 0; $i < strlen( $page_contents ); $i++ ) { + $c = $page_contents[$i]; + if ( $uncompleted_curly_brackets == 0 ) { + if ( $c == "{" || $i == strlen( $page_contents ) - 1 ) { + if ( $i == strlen( $page_contents ) - 1 ) + $free_text .= $c; + $uncompleted_curly_brackets++; + $free_text = trim( $free_text ); + if ( $free_text != "" ) { + $freeTextComponent = DTPageComponent::newFreeText( $free_text ); + $this->addComponent( $freeTextComponent ); + $free_text = ""; + } + } elseif ( $c == "{" ) { + // do nothing + } else { + $free_text .= $c; + } + } elseif ( $uncompleted_curly_brackets == 1 ) { + if ( $c == "{" ) { + $uncompleted_curly_brackets++; + $creating_template_name = true; + } elseif ( $c == "}" ) { + $uncompleted_curly_brackets--; + // is this needed? + // if ($field_name != "") { + // $field_name = ""; + // } + if ( $page_contents[$i - 1] == '}' ) { + $this->addComponent( $curTemplate ); + } + $template_name = ""; + } + } elseif ( $uncompleted_curly_brackets == 2 ) { + if ( $c == "}" ) { + $uncompleted_curly_brackets--; + } + if ( $c == "{" ) { + $uncompleted_curly_brackets++; + $field_value .= $c; + } else { + if ( $creating_template_name ) { + if ( $c == "|" || $c == "}" ) { + $curTemplate = DTPageComponent::newTemplate( $template_name ); + $template_name = str_replace( ' ', '_', trim( $template_name ) ); + $template_name = str_replace( '&', '&', $template_name ); + $creating_template_name = false; + $creating_field_name = true; + $field_id = 1; + } else { + $template_name .= $c; + } + } else { + if ( $c == "|" || $c == "}" ) { + if ( $field_has_name ) { + $curTemplate->addNamedField( $field_name, $field_value ); + $field_value = ""; + $field_has_name = false; + } else { + // "field_name" is actually the value + $curTemplate->addUnnamedField( $field_name ); + } + $creating_field_name = true; + $field_name = ""; + } elseif ( $c == "=" ) { + // handle case of = in value + if ( ! $creating_field_name ) { + $field_value .= $c; + } else { + $creating_field_name = false; + $field_has_name = true; + } + } elseif ( $creating_field_name ) { + $field_name .= $c; + } else { + $field_value .= $c; + } + } + } + } else { // greater than 2 + if ( $c == "}" ) { + $uncompleted_curly_brackets--; + } elseif ( $c == "{" ) { + $uncompleted_curly_brackets++; + } + $field_value .= $c; + } + } + } + + /** + * Helper function for mergeInPageStructure(). + */ + private function getSingleInstanceTemplates() { + $instancesPerTemplate = array(); + foreach ( $this->mComponents as $pageComponent ) { + if ( $pageComponent->mIsTemplate ) { + $templateName = $pageComponent->mTemplateName; + if ( array_key_exists( $templateName, $instancesPerTemplate ) ) { + $instancesPerTemplate[$templateName]++; + } else { + $instancesPerTemplate[$templateName] = 1; + } + } + } + + $singleInstanceTemplates = array(); + foreach ( $instancesPerTemplate as $templateName => $instances ) { + if ( $instances == 1 ) { + $singleInstanceTemplates[] = $templateName; + } + } + return $singleInstanceTemplates; + } + + private function getIndexOfTemplateName( $templateName ) { + foreach ( $this->mComponents as $i => $pageComponent ) { + if ( $pageComponent->mTemplateName == $templateName ) { + return $i; + } + } + return null; + } + + /** + * Used when doing a "merge" in an XML or CSV import. + */ + public function mergeInPageStructure( $secondPageStructure ) { + // If there are any templates that have one instance in both + // pages, replace values for their fields with values from + // the second page. + $singleInstanceTemplatesHere = $this->getSingleInstanceTemplates(); + $singleInstanceTemplatesThere = $secondPageStructure->getSingleInstanceTemplates(); + $singleInstanceTemplatesInBoth = array_intersect( $singleInstanceTemplatesHere, $singleInstanceTemplatesThere ); + foreach ( $secondPageStructure->mComponents as $pageComponent ) { + if ( in_array( $pageComponent->mTemplateName, $singleInstanceTemplatesInBoth ) ) { + $indexOfThisTemplate = $this->getIndexOfTemplateName( $pageComponent->mTemplateName ); + foreach ( $pageComponent->mFields as $fieldName => $fieldValue ) { + $this->mComponents[$indexOfThisTemplate]->mFields[$fieldName] = $fieldValue; + } + } else { + $this->mComponents[] = $pageComponent; + } + } + } + + public function toWikitext() { + $wikitext = ''; + foreach ( $this->mComponents as $pageComponent ) { + $wikitext .= $pageComponent->toWikitext() . "\n"; + } + return trim( $wikitext ); + } + + public function toXML( $isSimplified ) { + $page_str = str_replace( ' ', '_', wfMessage( 'dt_xml_page' )->inContentLanguage()->text() ); + $id_str = str_replace( ' ', '_', wfMessage( 'dt_xml_id' )->inContentLanguage()->text() ); + $title_str = str_replace( ' ', '_', wfMessage( 'dt_xml_title' )->inContentLanguage()->text() ); + + $bodyXML = ''; + foreach ( $this->mComponents as $pageComponent ) { + $bodyXML .= $pageComponent->toXML( $isSimplified ); + } + $articleID = $this->mPageTitle->getArticleID(); + $pageName = $this->mPageTitle->getText(); + if ( $isSimplified ) { + return Xml::tags( $page_str, null, Xml::tags( $id_str, null, $articleID ) . Xml::tags( $title_str, null, $pageName ) . $bodyXML ); + } else { + return Xml::tags( $page_str, array( $id_str => $articleID, $title_str => $pageName ), $bodyXML ); + } + } + +} diff --git a/www/wiki/extensions/DataTransfer/includes/DT_Utils.php b/www/wiki/extensions/DataTransfer/includes/DT_Utils.php new file mode 100644 index 00000000..03af8e6a --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_Utils.php @@ -0,0 +1,86 @@ +<?php + +/** + * Utility functions for the Data Transfer extension. + * + * @author Yaron Koren + */ +class DTUtils { + + static function printImportingMessage() { + return "\t" . Xml::element( 'p', null, wfMessage( 'dt_import_importing' )->text() ) . "\n"; + } + + static function printFileSelector( $fileType ) { + $text = "\n\t" . Xml::element( 'p', null, wfMessage( 'dt_import_selectfile', $fileType )->text() ) . "\n"; + $text .= <<<END + <p><input type="file" name="file_name" size="25" /></p> + +END; + $text .= "\t" . '<hr style="margin: 10px 0 10px 0" />' . "\n"; + return $text; + } + + static function printExistingPagesHandling() { + $text = "\t" . Xml::element( 'p', null, wfMessage( 'dt_import_forexisting' )->text() ) . "\n"; + $existingPagesText = "\n\t" . + Xml::element( 'input', + array( + 'type' => 'radio', + 'name' => 'pagesThatExist', + 'value' => 'overwrite', + 'checked' => 'checked' + ) ) . "\n" . + "\t" . wfMessage( 'dt_import_overwriteexisting' )->text() . "<br />" . "\n" . + "\t" . Xml::element( 'input', + array( + 'type' => 'radio', + 'name' => 'pagesThatExist', + 'value' => 'merge', + ) ) . "\n" . + "\t" . wfMessage( 'dt_import_mergeintoexisting' )->text() . "<br />" . "\n\t" . + "\t" . Xml::element( 'input', + array( + 'type' => 'radio', + 'name' => 'pagesThatExist', + 'value' => 'skip', + ) ) . "\n" . + "\t" . wfMessage( 'dt_import_skipexisting' )->text() . "<br />" . "\n" . + "\t" . Xml::element( 'input', + array( + 'type' => 'radio', + 'name' => 'pagesThatExist', + 'value' => 'append', + ) ) . "\n" . + "\t" . wfMessage( 'dt_import_appendtoexisting' )->text() . "<br />" . "\n\t"; + $text .= "\t" . Xml::tags( 'p', null, $existingPagesText ) . "\n"; + $text .= "\t" . '<hr style="margin: 10px 0 10px 0" />' . "\n"; + return $text; + } + + static function printImportSummaryInput( $fileType ) { + $importSummaryText = "\t" . Xml::element( 'input', + array( + 'type' => 'text', + 'id' => 'wpSummary', // ID is necessary for CSS formatting + 'class' => 'mw-summary', + 'name' => 'import_summary', + 'value' => wfMessage( 'dt_import_editsummary', $fileType )->inContentLanguage()->text() + ) + ) . "\n"; + return "\t" . Xml::tags( 'p', null, + wfMessage( 'dt_import_summarydesc' )->text() . "\n" . + $importSummaryText ) . "\n"; + } + + static function printSubmitButton() { + $formSubmitText = Xml::element( 'input', + array( + 'type' => 'submit', + 'name' => 'import_file', + 'value' => wfMessage( 'import-interwiki-submit' )->text() + ) + ); + return "\t" . Xml::tags( 'p', null, $formSubmitText ) . "\n"; + } +} diff --git a/www/wiki/extensions/DataTransfer/includes/DT_WikiPage.php b/www/wiki/extensions/DataTransfer/includes/DT_WikiPage.php new file mode 100644 index 00000000..1bfc848f --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_WikiPage.php @@ -0,0 +1,40 @@ +<?php +/** + * Class for representing a wiki page. + * + * @author Yaron Koren + * @ingroup DataTransfer + */ + +class DTWikiPage { + private $mPageName = null; + private $mElements = array(); + + public function __construct( $name ) { + $this->mPageName = $name; + } + + function getName() { + return $this->mPageName; + } + + function addTemplate( $template ) { + $this->mElements[] = $template; + } + + function addFreeText( $free_text ) { + $this->mElements[] = $free_text; + } + + function createText() { + $text = ""; + foreach ( $this->mElements as $elem ) { + if ( $elem instanceof DTWikiTemplate ) { + $text .= $elem->createText(); + } else { + $text .= $elem; + } + } + return $text; + } +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/includes/DT_WikiTemplate.php b/www/wiki/extensions/DataTransfer/includes/DT_WikiTemplate.php new file mode 100644 index 00000000..9ab2864e --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_WikiTemplate.php @@ -0,0 +1,37 @@ +<?php +/** + * Class for representing a template call within a wiki page. + * + * @author Yaron Koren + * @ingroup DataTransfer + */ + +class DTWikiTemplate { + private $mName = null; + private $mFields = array(); + + public function __construct( $name ) { + $this->mName = $name; + } + + function addField( $name, $value ) { + $this->mFields[$name] = $value; + } + + function createText() { + $multi_line_template = false; + $text = '{{' . $this->mName; + foreach ( $this->mFields as $field_name => $field_val ) { + if ( is_numeric( $field_name ) ) { + $text .= "|$field_val"; + } else { + $text .= "\n|$field_name=$field_val"; + $multi_line_template = true; + } + } + if ( $multi_line_template ) + $text .= "\n"; + $text .= '}}' . "\n"; + return $text; + } +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/includes/DT_XMLParser.php b/www/wiki/extensions/DataTransfer/includes/DT_XMLParser.php new file mode 100644 index 00000000..259e6f5b --- /dev/null +++ b/www/wiki/extensions/DataTransfer/includes/DT_XMLParser.php @@ -0,0 +1,215 @@ +<?php +/** + * Class for parsing XML representing wiki pages and their template calls + * + * @author Yaron Koren + * @ingroup DataTransfer + */ + +class DTXMLParser { + var $mDebug = false; + var $mSource = null; + var $mCurFieldName = null; + var $mCurFieldValue = ''; + var $mCurTemplate = null; + var $mCurPage = null; // new DTWikiPage(); + var $mPages = array(); + + function __construct( $source ) { + $this->mSource = $source; + } + + function debug( $text ) { + // print "$text. "; + } + + function throwXMLerror( $text ) { + print htmlspecialchars( $text ); + } + + function doParse() { + $parser = xml_parser_create( "UTF-8" ); + + # case folding violates XML standard, turn it off + xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); + + xml_set_object( $parser, $this ); + xml_set_element_handler( $parser, "in_start", "" ); + + $offset = 0; // for context extraction on error reporting + do { + $chunk = $this->mSource->readChunk(); + if ( !xml_parse( $parser, $chunk, $this->mSource->atEnd() ) ) { + wfDebug( "WikiImporter::doImport encountered XML parsing error\n" ); + // return new WikiXmlError( $parser, wfMessage( 'import-parse-failure' )->escaped(), $chunk, $offset ); + } + $offset += strlen( $chunk ); + } while ( $chunk !== false && !$this->mSource->atEnd() ); + xml_parser_free( $parser ); + } + + function donothing( $parser, $x, $y = "" ) { + # $this->debug( "donothing" ); + } + + + function in_start( $parser, $name, $attribs ) { + // $this->debug( "in_start $name" ); + $pages_str = str_replace( ' ', '_', wfMessage( 'dt_xml_pages' )->inContentLanguage()->text() ); + if ( $name != $pages_str ) { + print( "Expected '$pages_str', got '$name'" ); + } + xml_set_element_handler( $parser, "in_pages", "out_pages" ); + } + + function in_pages( $parser, $name, $attribs ) { + $this->debug( "in_pages $name" ); + $page_str = str_replace( ' ', '_', wfMessage( 'dt_xml_page' )->inContentLanguage()->text() ); + if ( $name == $page_str ) { + $title_str = str_replace( ' ', '_', wfMessage( 'dt_xml_title' )->inContentLanguage()->text() ); + if ( array_key_exists( $title_str, $attribs ) ) { + $this->mCurPage = new DTWikiPage( $attribs[$title_str] ); + xml_set_element_handler( $parser, "in_page", "out_page" ); + } else { + $this->throwXMLerror( "'$title_str' attribute missing for page" ); + return; + } + } else { + $this->throwXMLerror( "Expected <$page_str>, got <$name>" ); + } + + return; + } + + function out_pages( $parser, $name ) { + $this->debug( "out_pages $name" ); + xml_set_element_handler( $parser, "donothing", "donothing" ); + } + + function in_category( $parser, $name, $attribs ) { + $this->debug( "in_category $name" ); + $page_str = str_replace( ' ', '_', wfMessage( 'dt_xml_page' )->inContentLanguage()->text() ); + if ( $name == $page_str ) { + if ( array_key_exists( $title_str, $attribs ) ) { + $this->mCurPage = new DTWikiPage( $attribs[$title_str] ); + xml_set_element_handler( $parser, "in_page", "out_page" ); + } else { + $this->throwXMLerror( "'$title_str' attribute missing for page" ); + return; + } + } else { + $this->throwXMLerror( "Expected <$page_str>, got <$name>" ); + return; + } + } + + function out_category( $parser, $name ) { + $this->debug( "out_category $name" ); + if ( $name != "category" ) { + $this->throwXMLerror( "Expected </category>, got </$name>" ); + return; + } + xml_set_element_handler( $parser, "donothing", "donothing" ); + } + + function in_page( $parser, $name, $attribs ) { + $this->debug( "in_page $name" ); + $template_str = str_replace( ' ', '_', wfMessage( 'dt_xml_template' )->inContentLanguage()->text() ); + $name_str = str_replace( ' ', '_', wfMessage( 'dt_xml_name' )->inContentLanguage()->text() ); + $free_text_str = str_replace( ' ', '_', wfMessage( 'dt_xml_freetext' )->inContentLanguage()->text() ); + if ( $name == $template_str ) { + if ( array_key_exists( $name_str, $attribs ) ) { + $this->mCurTemplate = new DTWikiTemplate( $attribs[$name_str] ); + xml_set_element_handler( $parser, "in_template", "out_template" ); + } else { + $this->throwXMLerror( "'$name_str' attribute missing for template" ); + return; + } + } elseif ( $name == $free_text_str ) { + xml_set_element_handler( $parser, "in_freetext", "out_freetext" ); + xml_set_character_data_handler( $parser, "freetext_value" ); + } else { + $this->throwXMLerror( "Expected <$template_str>, got <$name>" ); + return; + } + } + + function out_page( $parser, $name ) { + $this->debug( "out_page $name" ); + $page_str = str_replace( ' ', '_', wfMessage( 'dt_xml_page' )->inContentLanguage()->text() ); + if ( $name != $page_str ) { + $this->throwXMLerror( "Expected </$page_str>, got </$name>" ); + return; + } + $this->mPages[] = $this->mCurPage; + xml_set_element_handler( $parser, "in_pages", "out_pages" ); + } + + function in_template( $parser, $name, $attribs ) { + $this->debug( "in_template $name" ); + $field_str = str_replace( ' ', '_', wfMessage( 'dt_xml_field' )->inContentLanguage()->text() ); + if ( $name == $field_str ) { + $name_str = str_replace( ' ', '_', wfMessage( 'dt_xml_name' )->inContentLanguage()->text() ); + if ( array_key_exists( $name_str, $attribs ) ) { + $this->mCurFieldName = $attribs[$name_str]; + // $this->push( $name ); + $this->workRevisionCount = 0; + $this->workSuccessCount = 0; + $this->uploadCount = 0; + $this->uploadSuccessCount = 0; + xml_set_element_handler( $parser, "in_field", "out_field" ); + xml_set_character_data_handler( $parser, "field_value" ); + } else { + $this->throwXMLerror( "'$name_str' attribute missing for field" ); + return; + } + } else { + $this->throwXMLerror( "Expected <$field_str>, got <$name>" ); + return; + } + } + + function out_template( $parser, $name ) { + $this->debug( "out_template $name" ); + $template_str = str_replace( ' ', '_', wfMessage( 'dt_xml_template' )->inContentLanguage()->text() ); + if ( $name != $template_str ) { + $this->throwXMLerror( "Expected </$template_str>, got </$name>" ); + return; + } + $this->mCurPage->addTemplate( $this->mCurTemplate ); + xml_set_element_handler( $parser, "in_page", "out_page" ); + } + + function in_field( $parser, $name, $attribs ) { + // xml_set_element_handler( $parser, "donothing", "donothing" ); + } + + function out_field( $parser, $name ) { + $this->debug( "out_field $name" ); + $field_str = str_replace( ' ', '_', wfMessage( 'dt_xml_field' )->inContentLanguage()->text() ); + if ( $name == $field_str ) { + $this->mCurTemplate->addField( $this->mCurFieldName, $this->mCurFieldValue ); + $this->mCurFieldValue = ''; + } else { + $this->throwXMLerror( "Expected </$field_str>, got </$name>" ); + return; + } + xml_set_element_handler( $parser, "in_template", "out_template" ); + } + + function field_value( $parser, $data ) { + $this->mCurFieldValue .= $data; + } + + function in_freetext( $parser, $name, $attribs ) { + // xml_set_element_handler( $parser, "donothing", "donothing" ); + } + + function out_freetext( $parser, $name ) { + xml_set_element_handler( $parser, "in_page", "out_page" ); + } + + function freetext_value( $parser, $data ) { + $this->mCurPage->addFreeText( $data ); + } +} diff --git a/www/wiki/extensions/DataTransfer/package.json b/www/wiki/extensions/DataTransfer/package.json new file mode 100644 index 00000000..ea62e434 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/package.json @@ -0,0 +1,11 @@ +{ + "private": true, + "scripts": { + "test": "grunt test" + }, + "devDependencies": { + "grunt": "1.0.3", + "grunt-banana-checker": "0.4.0", + "grunt-jsonlint": "1.0.7" + } +} diff --git a/www/wiki/extensions/DataTransfer/specials/DT_ImportCSV.php b/www/wiki/extensions/DataTransfer/specials/DT_ImportCSV.php new file mode 100644 index 00000000..ec8c4d41 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/specials/DT_ImportCSV.php @@ -0,0 +1,217 @@ +<?php +/** + * Lets the user import a CSV file to turn into wiki pages + * + * @author Yaron Koren + */ + +class DTImportCSV extends SpecialPage { + + /** + * Constructor + */ + public function __construct( $name='ImportCSV' ) { + parent::__construct( $name ); + } + + public function doesWrites() { + return true; + } + + function execute( $query ) { + $this->setHeaders(); + + if ( ! $this->getUser()->isAllowed( 'datatransferimport' ) ) { + throw new PermissionsError( 'datatransferimport' ); + } + + if ( $this->getRequest()->getCheck( 'import_file' ) ) { + $text = $this->importFromUploadAndModifyPages(); + } else { + $text = $this->printForm(); + } + + $this->getOutput()->addModuleStyles( 'ext.datatransfer'); + $this->getOutput()->addHTML( $text ); + } + + protected function importFromUploadAndModifyPages () { + + $text = DTUtils::printImportingMessage(); + $uploadResult = ImportStreamSource::newFromUpload( "file_name" ); + + if ( !$uploadResult->isOK() ) { + $uploadError = $this->getOutput()->parse( $uploadResult->getWikiText() ); + $text .= $uploadError; + return $text; + } + + $source = $uploadResult->value; + + $encoding = $this->getRequest()->getVal( 'encoding' ); + $pages = array(); + + $error_msg = $this->importFromFile( $source->mHandle, $encoding, $pages ); + + if ( ! is_null( $error_msg ) ) { + $text .= $error_msg; + return $text; + } + + $importSummary = $this->getRequest()->getVal( 'import_summary' ); + $forPagesThatExist = $this->getRequest()->getVal( 'pagesThatExist' ); + + $text .= self::modifyPages( $pages, $importSummary, $forPagesThatExist ); + + return $text; + } + + protected function printForm() { + $formText = DTUtils::printFileSelector( $this->getFiletype() ); + $utf8OptionText = "\t" . Xml::element( 'option', + array( + 'selected' => 'selected', + 'value' => 'utf8' + ), 'UTF-8' ) . "\n"; + $utf16OptionText = "\t" . Xml::element( 'option', + array( + 'value' => 'utf16' + ), 'UTF-16' ) . "\n"; + $encodingSelectText = Xml::tags( 'select', + array( 'name' => 'encoding' ), + "\n" . $utf8OptionText . $utf16OptionText. "\t" ) . "\n\t"; + $formText .= "\t" . Xml::tags( 'p', null, $this->msg( 'dt_import_encodingtype', 'CSV' )->text() . " " . $encodingSelectText ) . "\n"; + $formText .= "\t" . '<hr style="margin: 10px 0 10px 0" />' . "\n"; + $formText .= DTUtils::printExistingPagesHandling(); + $formText .= DTUtils::printImportSummaryInput( $this->getFiletype() ); + $formText .= DTUtils::printSubmitButton(); + $text = "\t" . Xml::tags( 'form', + array( + 'enctype' => 'multipart/form-data', + 'action' => '', + 'method' => 'post' + ), $formText ) . "\n"; + return $text; + } + + protected function importFromFile( $csv_file, $encoding, &$pages ) { + if ( is_null( $csv_file ) ) { + return wfMessage( 'emptyfile' )->text(); + } + + $table = array(); + if ( $encoding == 'utf16' ) { + // Change encoding to UTF-8. + // Starting with PHP 5.3 we could use str_getcsv(), + // which would save the tempfile hassle. + $tempfile = tmpfile(); + $csv_string = ''; + while ( !feof( $csv_file ) ) { + $csv_string .= fgets( $csv_file, 65535 ); + } + fwrite( $tempfile, iconv( 'UTF-16', 'UTF-8', $csv_string ) ); + fseek( $tempfile, 0 ); + while ( $line = fgetcsv( $tempfile ) ) { + array_push( $table, $line ); + } + fclose( $tempfile ); + } else { + while ( $line = fgetcsv( $csv_file ) ) { + // Convert from UTF-8 to ASCII - htmlentities() + // fails for UTF-8 if there are non-ASCII + // characters. + $convertedLine = array(); + foreach ( $line as $value ) { + $convertedLine[] = mb_convert_encoding( $value, 'UTF-8', 'ASCII' ); + } + array_push( $table, $convertedLine ); + } + } + fclose( $csv_file ); + + // Get rid of the "byte order mark", if it's there - this is + // a three-character string sometimes put at the beginning + // of files to indicate its encoding. + // Code copied from: + // http://www.dotvoid.com/2010/04/detecting-utf-bom-byte-order-mark/ + $byteOrderMark = pack( "CCC", 0xef, 0xbb, 0xbf ); + if ( 0 == strncmp( $table[0][0], $byteOrderMark, 3 ) ) { + $table[0][0] = substr( $table[0][0], 3 ); + // If there were quotation marks around this value, + // they didn't get removed, so remove them now. + $table[0][0] = trim( $table[0][0], '"' ); + } + + return $this->importFromArray( $table, $pages ); + + } + + protected function importFromArray( $table, &$pages ) { + // Check header line to make sure every term is in the + // correct format. + $titleLabels = array( wfMessage( 'dt_xml_title' )->inContentLanguage()->text() ); + $freeTextLabels = array( wfMessage( 'dt_xml_freetext' )->inContentLanguage()->text() ); + // Add the English-language values as well, if this isn't an + // English-language wiki. + if ( $this->getLanguage()->getCode() !== 'en' ) { + $titleLabels[] = wfMessage( 'dt_xml_title' )->inLanguage( 'en' )->text(); + $freeTextLabels[] = wfMessage( 'dt_xml_freetext' )->inLanguage( 'en' )->text(); + } + foreach ( $table[0] as $i => $headerVal ) { + if ( !in_array( $headerVal, $titleLabels ) + && !in_array( $headerVal, $freeTextLabels ) + && $headerVal !== '' + && !preg_match( '/^[^\[\]]+\[[^\[\]]+]$/', $headerVal ) ) { + $errorMsg = wfMessage( 'dt_importcsv_badheader', $i, $headerVal, $titleLabels[0], $freeTextLabels[0] )->text(); + return $errorMsg; + } + } + foreach ( $table as $i => $line ) { + if ( $i == 0 ) continue; + $page = new DTPage(); + foreach ( $line as $j => $val ) { + if ( $table[0][$j] === '' ) { + continue; + } + if ( in_array( $table[0][$j], $titleLabels ) ) { + $page->setName( $val ); + } elseif ( in_array( $table[0][$j], $freeTextLabels ) ) { + $page->setFreeText( $val ); + } else { + list( $templateName, $fieldName ) = explode( '[', str_replace( ']', '', $table[0][$j] ) ); + $page->addTemplateField( $templateName, $fieldName, $val ); + } + } + $pages[] = $page; + } + + return null; + } + + protected function modifyPages( $pages, $editSummary, $forPagesThatExist ) { + $text = ""; + $jobs = array(); + $jobParams = array(); + $jobParams['user_id'] = $this->getUser()->getId(); + $jobParams['edit_summary'] = $editSummary; + $jobParams['for_pages_that_exist'] = $forPagesThatExist; + foreach ( $pages as $page ) { + $title = Title::newFromText( $page->getName() ); + if ( is_null( $title ) ) { + $text .= '<p>' . $this->msg( 'img-auth-badtitle', $page->getName() )->text() . "</p>\n"; + continue; + } + $jobParams['text'] = $page->createText(); + $jobs[] = new DTImportJob( $title, $jobParams ); + } + JobQueueGroup::singleton()->push( $jobs ); + + $text .= $this->msg( 'dt_import_success' )->numParams( count( $jobs ) )->params( $this->getFiletype() )->parseAsBlock(); + + return $text; + } + + protected function getFiletype() { + return wfMessage( 'dt_filetype_csv' )->text(); + } +} diff --git a/www/wiki/extensions/DataTransfer/specials/DT_ImportSpreadsheet.php b/www/wiki/extensions/DataTransfer/specials/DT_ImportSpreadsheet.php new file mode 100644 index 00000000..c1da80aa --- /dev/null +++ b/www/wiki/extensions/DataTransfer/specials/DT_ImportSpreadsheet.php @@ -0,0 +1,53 @@ +<?php +/** + * Lets the user import a spreadsheet file to turn into wiki pages + * + * @author Stephan Gambke + * @ingroup DataTransfer + */ + +class DTImportSpreadsheet extends DTImportCSV { + + public function __construct( $name='ImportSpreadsheet' ) { + parent::__construct( $name ); + } + + protected function printForm() { + if ( !class_exists( 'PHPExcel' ) ) { + return '<div class="error">You must have the PHPExcel library installed to run this page.</div>'; + } + + $formText = DTUtils::printFileSelector( $this->getFiletype() ); + $formText .= DTUtils::printExistingPagesHandling(); + $formText .= DTUtils::printImportSummaryInput( $this->getFiletype() ); + $formText .= DTUtils::printSubmitButton(); + $text = "\t" . Xml::tags( 'form', + array( + 'enctype' => 'multipart/form-data', + 'action' => '', + 'method' => 'post' + ), $formText ) . "\n"; + return $text; + } + + protected function importFromFile( $file, $encoding, &$pages ) { + + if ( is_null( $file ) ) { + return wfMessage( 'emptyfile' )->text(); + } + + $metadata = stream_get_meta_data( $file ); + $filename = $metadata['uri']; + + @$objPHPExcel = PHPExcel_IOFactory::load( $filename ); + + $table = $objPHPExcel->getSheet(0)->toArray( '', true, true, false ); + + return $this->importFromArray( $table, $pages ); + + } + + protected function getFiletype() { + return wfMessage( 'dt_filetype_spreadsheet' )->text(); + } +}
\ No newline at end of file diff --git a/www/wiki/extensions/DataTransfer/specials/DT_ImportXML.php b/www/wiki/extensions/DataTransfer/specials/DT_ImportXML.php new file mode 100644 index 00000000..42f7d14d --- /dev/null +++ b/www/wiki/extensions/DataTransfer/specials/DT_ImportXML.php @@ -0,0 +1,73 @@ +<?php +/** + * Lets the user import an XML file to turn into wiki pages + * + * @author Yaron Koren + */ + +class DTImportXML extends SpecialPage { + + /** + * Constructor + */ + public function __construct( $name = 'ImportXML' ) { + parent::__construct( $name ); + } + + public function doesWrites() { + return true; + } + + function execute( $query ) { + $this->setHeaders(); + + if ( ! $this->getUser()->isAllowed( 'datatransferimport' ) ) { + throw new PermissionsError( 'datatransferimport' ); + } + + $request = $this->getRequest(); + if ( $request->getCheck( 'import_file' ) ) { + $text = DTUtils::printImportingMessage(); + $uploadResult = ImportStreamSource::newFromUpload( "file_name" ); + $source = $uploadResult->value; + $importSummary = $request->getVal( 'import_summary' ); + $forPagesThatExist = $request->getVal( 'pagesThatExist' ); + $text .= self::modifyPages( $source, $importSummary, $forPagesThatExist ); + } else { + $formText = DTUtils::printFileSelector( wfMessage( 'dt_filetype_xml' )->text() ); + $formText .= DTUtils::printExistingPagesHandling(); + $formText .= DTUtils::printImportSummaryInput( wfMessage( 'dt_filetype_xml' )->text() ); + $formText .= DTUtils::printSubmitButton(); + $text = "\t" . Xml::tags( 'form', + array( + 'enctype' => 'multipart/form-data', + 'action' => '', + 'method' => 'post' + ), $formText ) . "\n"; + } + + $this->getOutput()->addHTML( $text ); + } + + function modifyPages( $source, $editSummary, $forPagesThatExist ) { + $text = ""; + $xml_parser = new DTXMLParser( $source ); + $xml_parser->doParse(); + $jobs = array(); + $job_params = array(); + $job_params['user_id'] = $this->getUser()->getId(); + $job_params['edit_summary'] = $editSummary; + $job_params['for_pages_that_exist'] = $forPagesThatExist; + + foreach ( $xml_parser->mPages as $page ) { + $title = Title::newFromText( $page->getName() ); + $job_params['text'] = $page->createText(); + $jobs[] = new DTImportJob( $title, $job_params ); + } + JobQueueGroup::singleton()->push( $jobs ); + + $text .= $this->msg( 'dt_import_success' )->numParams( count( $jobs ) )->params( 'XML' ) + ->parseAsBlock(); + return $text; + } +} diff --git a/www/wiki/extensions/DataTransfer/specials/DT_ViewXML.php b/www/wiki/extensions/DataTransfer/specials/DT_ViewXML.php new file mode 100644 index 00000000..797aa8f9 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/specials/DT_ViewXML.php @@ -0,0 +1,269 @@ +<?php +/** + * Displays an interface to let the user export pages from the wiki in XML form + * + * @author Yaron Koren + */ + +class DTViewXML extends SpecialPage { + + /** + * Constructor + */ + public function __construct( $name = 'ViewXML' ) { + parent::__construct( $name ); + } + + function execute( $query ) { + $this->setHeaders(); + $this->doSpecialViewXML( $query ); + } + + static function getCategoriesList() { + $dbr = wfGetDB( DB_SLAVE ); + $categorylinks = $dbr->tableName( 'categorylinks' ); + $res = $dbr->query( "SELECT DISTINCT cl_to FROM $categorylinks" ); + $categories = array(); + while ( $row = $dbr->fetchRow( $res ) ) { + $categories[] = $row[0]; + } + $dbr->freeResult( $res ); + sort( $categories ); + return $categories; + } + + static function getNamespacesList() { + $dbr = wfGetDB( DB_SLAVE ); + $page = $dbr->tableName( 'page' ); + $res = $dbr->query( "SELECT DISTINCT page_namespace FROM $page" ); + $namespaces = array(); + while ( $row = $dbr->fetchRow( $res ) ) { + $namespaces[] = $row[0]; + } + $dbr->freeResult( $res ); + return $namespaces; + } + + /* + * Get all the pages that belong to a category and all its + * subcategories, down a certain number of levels - heavily based + * on SMW's SMWInlineQuery::includeSubcategories() + */ + static function getPagesForCategory( $top_category, $num_levels ) { + if ( 0 == $num_levels ) return $top_category; + + $db = wfGetDB( DB_SLAVE ); + $fname = "getPagesForCategory"; + $categories = array( $top_category ); + $checkcategories = array( $top_category ); + $titles = array(); + for ( $level = $num_levels; $level > 0; $level-- ) { + $newcategories = array(); + foreach ( $checkcategories as $category ) { + $res = $db->select( // make the query + array( 'categorylinks', 'page' ), + array( 'page_id', 'page_title', 'page_namespace' ), + array( 'cl_from = page_id', + 'cl_to = ' . $db->addQuotes( $category ) + ), + $fname + ); + if ( $res ) { + while ( $row = $db->fetchRow( $res ) ) { + if ( array_key_exists( 'page_title', $row ) ) { + $page_namespace = $row['page_namespace']; + if ( $page_namespace == NS_CATEGORY ) { + $new_category = $row[ 'page_title' ]; + if ( !in_array( $new_category, $categories ) ) { + $newcategories[] = $new_category; + } + } else { + $titles[] = Title::newFromID( $row['page_id'] ); + } + } + } + $db->freeResult( $res ); + } + } + if ( count( $newcategories ) == 0 ) { + return $titles; + } else { + $categories = array_merge( $categories, $newcategories ); + } + $checkcategories = array_diff( $newcategories, array() ); + } + return $titles; + } + + static function getPagesForNamespace( $namespace ) { + $dbr = wfGetDB( DB_SLAVE ); + $page = $dbr->tableName( 'page' ); + $res = $dbr->query( "SELECT page_id FROM $page WHERE page_namespace = '$namespace'" ); + $titles = array(); + while ( $row = $dbr->fetchRow( $res ) ) { + $titles[] = Title::newFromID( $row[0] ); + } + $dbr->freeResult( $res ); + return $titles; + } + + /** + * Helper function for getXMLForPage() + */ + static function treeContainsElement( $tree, $element ) { + // escape out if there's no tree (i.e., category) + if ( $tree == null ) { + return false; + } + + foreach ( $tree as $node => $child_tree ) { + if ( $node === $element ) { + return true; + } elseif ( count( $child_tree ) > 0 ) { + if ( self::treeContainsElement( $child_tree, $element ) ) { + return true; + } + } + } + // no match found + return false; + } + + + static function getXMLForPage( $title, $simplified_format, $depth = 0 ) { + if ( $depth > 5 ) { return ""; } + + $pageStructure = DTPageStructure::newFromTitle( $title ); + $text = $pageStructure->toXML( $simplified_format ); + + // escape back the curly brackets that were escaped out at the beginning + $text = str_replace( '&#123;', '{', $text ); + $text = str_replace( '&#125;', '}', $text ); + return $text; + } + + function doSpecialViewXML() { + global $wgContLang; + + $out = $this->getOutput(); + $request = $this->getRequest(); + + $namespace_labels = $wgContLang->getNamespaces(); + $category_label = $namespace_labels[NS_CATEGORY]; + $name_str = str_replace( ' ', '_', wfMessage( 'dt_xml_name' )->inContentLanguage()->text() ); + $namespace_str = str_replace( ' ', '_', wfMessage( 'dt_xml_namespace' )->text() ); + $pages_str = str_replace( ' ', '_', wfMessage( 'dt_xml_pages' )->inContentLanguage()->text() ); + + $form_submitted = false; + $cats = $request->getArray( 'categories' ); + $nses = $request->getArray( 'namespaces' ); + $requestedTitles = $request->getVal( 'titles' ); + if ( ! empty( $cats ) || ! empty( $nses ) || $requestedTitles != null ) { + $form_submitted = true; + } + + if ( $form_submitted ) { + $out->disable(); + + // Cancel output buffering and gzipping if set + // This should provide safer streaming for pages with history + wfResetOutputBuffers(); + header( "Content-type: application/xml; charset=utf-8" ); + + $simplified_format = $request->getVal( 'simplified_format' ); + $text = "<$pages_str>"; + if ( $cats ) { + foreach ( $cats as $cat => $val ) { + if ( $simplified_format ) + $text .= '<' . str_replace( ' ', '_', $cat ) . ">\n"; + else + $text .= "<$category_label $name_str=\"$cat\">\n"; + $titles = self::getPagesForCategory( $cat, 10 ); + foreach ( $titles as $title ) { + $text .= self::getXMLForPage( $title, $simplified_format ); + } + if ( $simplified_format ) { + $text .= '</' . str_replace( ' ', '_', $cat ) . ">\n"; + } else { + $text .= "</$category_label>\n"; + } + } + } + + if ( $nses ) { + foreach ( $nses as $ns => $val ) { + if ( $ns == 0 ) { + $ns_name = "Main"; + } else { + $ns_name = MWNamespace::getCanonicalName( $ns ); + } + if ( $simplified_format ) { + $text .= '<' . str_replace( ' ', '_', $ns_name ) . ">\n"; + } else { + $text .= "<$namespace_str $name_str=\"$ns_name\">\n"; + } + $titles = self::getPagesForNamespace( $ns ); + foreach ( $titles as $title ) { + $text .= self::getXMLForPage( $title, $simplified_format ); + } + if ( $simplified_format ) + $text .= '</' . str_replace( ' ', '_', $ns_name ) . ">\n"; + else + $text .= "</$namespace_str>\n"; + } + } + + // The user can specify a set of page names to view + // the XML of, using a "titles=" parameter, separated + // by "|", in the manner of the MediaWiki API. + // Hm... perhaps all of Special:ViewXML should just + // be replaced by an API action? + if ( $requestedTitles ) { + $pageNames = explode( '|', $requestedTitles ); + foreach ( $pageNames as $pageName ) { + $title = Title::newFromText( $pageName ); + $text .= self::getXMLForPage( $title, $simplified_format ); + } + } + + $text .= "</$pages_str>"; + print $text; + } else { + // set 'title' as hidden field, in case there's no URL niceness + global $wgContLang; + $mw_namespace_labels = $wgContLang->getNamespaces(); + $special_namespace = $mw_namespace_labels[NS_SPECIAL]; + $text = <<<END + <form action="" method="get"> + <input type="hidden" name="title" value="$special_namespace:ViewXML"> + +END; + $text .= "<p>" . wfMessage( 'dt_viewxml_docu' )->text() . "</p>\n"; + $text .= "<h2>" . wfMessage( 'dt_viewxml_categories' )->text() . "</h2>\n"; + $categories = self::getCategoriesList(); + foreach ( $categories as $category ) { + $text .= Html::input( "categories[$category]", null, 'checkbox' ); + $title = Title::makeTitle( NS_CATEGORY, $category ); + $link = Linker::link( $title, htmlspecialchars( $title->getText() ) ); + $text .= " $link<br />\n"; + } + $text .= "<h2>" . wfMessage( 'dt_viewxml_namespaces' )->text() . "</h2>\n"; + $namespaces = self::getNamespacesList(); + foreach ( $namespaces as $nsCode ) { + if ( $nsCode === '0' ) { + $nsName = wfMessage( 'blanknamespace' )->escaped(); + } else { + $nsName = htmlspecialchars( $wgContLang->getFormattedNsText( $nsCode ) ); + if ( $nsName === '' ) continue; + } + $text .= Html::input( "namespaces[$nsCode]", null, 'checkbox' ); + $text .= ' ' . str_replace( '_', ' ', $nsName ) . "<br />\n"; + } + $text .= "<br /><p><label><input type=\"checkbox\" name=\"simplified_format\" /> " . wfMessage( 'dt_viewxml_simplifiedformat' )->text() . "</label></p>\n"; + $text .= "<input type=\"submit\" value=\"" . wfMessage( 'viewxml' )->text() . "\">\n"; + $text .= "</form>\n"; + + $out->addHTML( $text ); + } + } +} diff --git a/www/wiki/extensions/DataTransfer/styles/DataTransfer.css b/www/wiki/extensions/DataTransfer/styles/DataTransfer.css new file mode 100644 index 00000000..b634ed86 --- /dev/null +++ b/www/wiki/extensions/DataTransfer/styles/DataTransfer.css @@ -0,0 +1,4 @@ +input.mw-summary { + width: 400px; + max-width: 100%; +}
\ No newline at end of file diff --git a/www/wiki/extensions/ExternalData/COPYING b/www/wiki/extensions/ExternalData/COPYING new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/www/wiki/extensions/ExternalData/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +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 Program or any portion +of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +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 Program, 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 Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) 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; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, 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 executable. However, as a +special exception, the source code 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. + +If distribution of executable or 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 counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program 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. + + 5. 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 Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program 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 to +this License. + + 7. 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 Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program 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 Program. + +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. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program 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. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies 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 Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, 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 + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +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 program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, 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. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/www/wiki/extensions/ExternalData/ExternalData.hooks.php b/www/wiki/extensions/ExternalData/ExternalData.hooks.php new file mode 100644 index 00000000..7bd254b7 --- /dev/null +++ b/www/wiki/extensions/ExternalData/ExternalData.hooks.php @@ -0,0 +1,27 @@ +<?php + +/** + * Hook functions for the External Data extension. + * + * @file + * @ingroup ExternalData + * @author Yaron Koren + */ +class ExternalDataHooks { + + public static function registerParser( &$parser ) { + $parser->setFunctionHook( 'get_web_data', array( 'EDParserFunctions', 'doGetWebData' ) ); + $parser->setFunctionHook( 'get_file_data', array( 'EDParserFunctions', 'doGetFileData' ) ); + $parser->setFunctionHook( 'get_soap_data', array( 'EDParserFunctions', 'doGetSOAPData' ) ); + $parser->setFunctionHook( 'get_ldap_data', array( 'EDParserFunctions', 'doGetLDAPData' ) ); + $parser->setFunctionHook( 'get_db_data', array( 'EDParserFunctions', 'doGetDBData' ) ); + $parser->setFunctionHook( 'external_value', array( 'EDParserFunctions', 'doExternalValue' ) ); + $parser->setFunctionHook( 'for_external_table', array( 'EDParserFunctions', 'doForExternalTable' ) ); + $parser->setFunctionHook( 'display_external_table', array( 'EDParserFunctions', 'doDisplayExternalTable' ) ); + $parser->setFunctionHook( 'store_external_table', array( 'EDParserFunctions', 'doStoreExternalTable' ) ); + $parser->setFunctionHook( 'clear_external_data', array( 'EDParserFunctions', 'doClearExternalData' ) ); + + return true; // always return true, in order not to stop MW's hook processing! + } + +} diff --git a/www/wiki/extensions/ExternalData/ExternalData.i18n.alias.php b/www/wiki/extensions/ExternalData/ExternalData.i18n.alias.php new file mode 100644 index 00000000..c440c345 --- /dev/null +++ b/www/wiki/extensions/ExternalData/ExternalData.i18n.alias.php @@ -0,0 +1,14 @@ +<?php +/** + * Aliases for special pages + * + * @file + * @ingroup Extensions + */ + +$specialPageAliases = array(); + +/** English (English) */ +$specialPageAliases['en'] = array( + 'GetData' => array( 'GetData' ), +); diff --git a/www/wiki/extensions/ExternalData/ExternalData.i18n.magic.php b/www/wiki/extensions/ExternalData/ExternalData.i18n.magic.php new file mode 100644 index 00000000..ddca6441 --- /dev/null +++ b/www/wiki/extensions/ExternalData/ExternalData.i18n.magic.php @@ -0,0 +1,233 @@ +<?php +/** + * + */ + +$magicWords = array(); + +/** English (English) */ +$magicWords['en'] = array( + 'get_web_data' => array( 0, 'get_web_data' ), + 'get_file_data' => array( 0, 'get_file_data' ), + 'get_soap_data' => array( 0, 'get_soap_data' ), + 'get_ldap_data' => array( 0, 'get_ldap_data' ), + 'get_db_data' => array( 0, 'get_db_data' ), + 'external_value' => array( 0, 'external_value' ), + 'for_external_table' => array( 0, 'for_external_table' ), + 'display_external_table' => array( 0, 'display_external_table' ), + 'store_external_table' => array( 0, 'store_external_table' ), + 'clear_external_data' => array( 0, 'clear_external_data' ), +); + +/** Arabic (العربية) */ +$magicWords['ar'] = array( + 'get_web_data' => array( 0, 'عرض_بيانات_الويب' ), + 'get_file_data' => array( 0, 'عرض_بيانات_الملف' ), + 'get_soap_data' => array( 0, 'عرض_بيانات_السوب' ), + 'get_ldap_data' => array( 0, 'عرض_بيانات_لداب' ), + 'get_db_data' => array( 0, 'عرض_بيانات_قب' ), + 'external_value' => array( 0, 'قيمة_خارجية' ), + 'for_external_table' => array( 0, 'لجدول_خارجي' ), + 'display_external_table' => array( 0, 'عرض_جدول_خارجي' ), + 'store_external_table' => array( 0, 'تخزين_جدول_خارجي' ), + 'clear_external_data' => array( 0, 'إزالة_بيانات_خارجية' ), +); + +/** Egyptian Arabic (مصرى) */ +$magicWords['arz'] = array( + 'get_web_data' => array( 0, 'عرض_بيانات_الويب' ), + 'get_ldap_data' => array( 0, 'عرض_بيانات_لداب' ), + 'get_db_data' => array( 0, 'عرض_بيانات_قب' ), + 'external_value' => array( 0, 'قيمه_خارجيه' ), + 'for_external_table' => array( 0, 'لجدول_خارجي' ), + 'display_external_table' => array( 0, 'عرض_جدول_خارجى' ), + 'store_external_table' => array( 0, 'تخزين_جدول_خارجى', 'تخزين_جدول_خارجي' ), + 'clear_external_data' => array( 0, 'مسح_بيانات_خارجيه' ), +); + +/** Chechen (нохчийн) */ +$magicWords['ce'] = array( + 'get_ldap_data' => array( 0, 'схьаэца_хаамаш_ldap', 'получить_данные_ldap' ), + 'get_db_data' => array( 0, 'схьаэца_хаамаш_db', 'получить_данные_db' ), + 'external_value' => array( 0, 'архьара_дозалла', 'внешнее_значение' ), + 'for_external_table' => array( 0, 'оцу_архьара_тебалецlаш', 'для_внешней_таблицы' ), +); + +/** German (Deutsch) */ +$magicWords['de'] = array( + 'get_web_data' => array( 0, 'hole_webdaten' ), + 'get_ldap_data' => array( 0, 'hole_ldapdaten' ), + 'get_db_data' => array( 0, 'hole_dbdaten' ), + 'external_value' => array( 0, 'externer_wert' ), + 'for_external_table' => array( 0, 'für_externe_tabelle' ), + 'display_external_table' => array( 0, 'zeige_externe_tabelle' ), + 'store_external_table' => array( 0, 'speichere_externe_tabelle' ), + 'clear_external_data' => array( 0, 'leere_externe_tabelle' ), +); + +/** Greek (Ελληνικά) */ +$magicWords['el'] = array( + 'get_web_data' => array( 0, 'λήψη_δεδομένων_ιστού' ), + 'get_ldap_data' => array( 0, 'λήψη_δεδομένων_ldap' ), + 'get_db_data' => array( 0, 'λήψη_δεδομένων_βδ' ), + 'external_value' => array( 0, 'εξωτερική_τιμή' ), + 'for_external_table' => array( 0, 'για_εξωτερικό_πίνακα' ), + 'display_external_table' => array( 0, 'προβολή_εξωτερικού_πίνακα' ), + 'store_external_table' => array( 0, 'αποθήκευση_εξωτερικού_πίνακα' ), + 'clear_external_data' => array( 0, 'εκκαθάριση_εξωτερικών_δεδομένων' ), +); + +/** Spanish (español) */ +$magicWords['es'] = array( + 'get_db_data' => array( 0, 'obtener_datos_db' ), + 'external_value' => array( 0, 'valor_externo' ), +); + +/** Persian (فارسی) */ +$magicWords['fa'] = array( + 'get_web_data' => array( 0, 'گرفتن_داده_وب' ), +); + +/** Western Frisian (Frysk) */ +$magicWords['fy'] = array( + 'external_value' => array( 0, 'eksterne_wearde' ), +); + +/** Japanese (日本語) */ +$magicWords['ja'] = array( + 'get_ldap_data' => array( 0, 'ldapデータ取得' ), + 'get_db_data' => array( 0, 'dbデータ取得' ), + 'external_value' => array( 0, '外部値' ), + 'for_external_table' => array( 0, '外部テーブル用' ), + 'store_external_table' => array( 0, '外部テーブル格納' ), +); + +/** Korean (한국어) */ +$magicWords['ko'] = array( + 'get_web_data' => array( 0, '웹_데이터_얻기' ), + 'get_file_data' => array( 0, '파일_데이터_얻기' ), + 'get_soap_data' => array( 0, 'soap_데이터_얻기' ), + 'get_ldap_data' => array( 0, 'ldap_데이터_얻기' ), + 'get_db_data' => array( 0, 'db_데이터_얻기' ), + 'external_value' => array( 0, '바깥_값' ), + 'for_external_table' => array( 0, '바깥_표_대해' ), + 'display_external_table' => array( 0, '바깥_표_보기' ), + 'store_external_table' => array( 0, '바깥_표_저장' ), + 'clear_external_data' => array( 0, '바깥_데이터_지우기' ), +); + +/** Macedonian (македонски) */ +$magicWords['mk'] = array( + 'get_web_data' => array( 0, 'преземи_семрежни_податоци' ), + 'get_file_data' => array( 0, 'преземи_податотечни_податоци' ), + 'get_soap_data' => array( 0, 'преземи_soap_податоци' ), + 'get_ldap_data' => array( 0, 'преземи_ldap_податоци' ), + 'get_db_data' => array( 0, 'преземи_db_податоци' ), + 'external_value' => array( 0, 'надворешна_вредност' ), + 'for_external_table' => array( 0, 'за_надворешна_табела' ), + 'display_external_table' => array( 0, 'прикажи_надворешна_табела' ), + 'store_external_table' => array( 0, 'складирај_надворешна_табела' ), + 'clear_external_data' => array( 0, 'исчисти_надворешни_податоци' ), +); + +/** Malayalam (മലയാളം) */ +$magicWords['ml'] = array( + 'get_web_data' => array( 0, 'വെബ്_വിവരങ്ങൾ_എടുക്കുക' ), + 'external_value' => array( 0, 'ബാഹ്യ_മൂല്യം' ), +); + +/** Marathi (मराठी) */ +$magicWords['mr'] = array( + 'get_ldap_data' => array( 0, 'मिळवा__एलडॅप_विदा' ), + 'for_external_table' => array( 0, 'बाह्य_सारणी_करिता' ), +); + +/** Low Saxon (Netherlands) (Nedersaksies) */ +$magicWords['nds-nl'] = array( + 'get_web_data' => array( 0, 'webgegevens_ophaolen' ), + 'get_ldap_data' => array( 0, 'ldap-gegevens_ophaolen' ), + 'get_db_data' => array( 0, 'db-gegevens_ophaolen' ), + 'external_value' => array( 0, 'externe_weerde' ), + 'for_external_table' => array( 0, 'veur_externe_tabel' ), + 'store_external_table' => array( 0, 'opslaon_externe_tabel' ), +); + +/** Dutch (Nederlands) */ +$magicWords['nl'] = array( + 'get_web_data' => array( 0, 'webgegevens_ophalen' ), + 'get_file_data' => array( 0, 'bestandsgegevens_ophalen' ), + 'get_soap_data' => array( 0, 'soapgegevens_ophalen' ), + 'get_ldap_data' => array( 0, 'ldap_gegevens_ophalen' ), + 'get_db_data' => array( 0, 'db_gegevens_ophalen' ), + 'external_value' => array( 0, 'externe_waarde' ), + 'for_external_table' => array( 0, 'voor_externe_tabel' ), + 'display_external_table' => array( 0, 'externe_tabel_weergeven' ), + 'store_external_table' => array( 0, 'opslaan_externe_tabel' ), + 'clear_external_data' => array( 0, 'externe_gegevens_opschonen' ), +); + +/** Russian (русский) */ +$magicWords['ru'] = array( + 'get_ldap_data' => array( 0, 'получить_данные_ldap' ), + 'get_db_data' => array( 0, 'получить_данные_db' ), + 'external_value' => array( 0, 'внешнее_значение' ), + 'for_external_table' => array( 0, 'для_внешней_таблицы' ), + 'store_external_table' => array( 0, 'внешняя_таблица_хранения' ), +); + +/** Serbian (Cyrillic script) (српски (ћирилица)) */ +$magicWords['sr-ec'] = array( + 'get_web_data' => array( 0, 'добави_веб_податке' ), + 'get_ldap_data' => array( 0, 'добави_лдап_податке' ), + 'get_db_data' => array( 0, 'добави_податке_базе' ), + 'external_value' => array( 0, 'спољна_вредност' ), + 'for_external_table' => array( 0, 'за_спољну_табелу' ), + 'store_external_table' => array( 0, 'смести_спољну_табелу' ), +); + +/** Serbian (Latin script) (srpski (latinica)) */ +$magicWords['sr-el'] = array( + 'get_web_data' => array( 0, 'dobavi_mrežne_podatke' ), + 'get_ldap_data' => array( 0, 'dobavi_ldap_podatke' ), + 'get_db_data' => array( 0, 'dobavi_podatke_baze' ), + 'external_value' => array( 0, 'spoljna_vrednost' ), + 'for_external_table' => array( 0, 'za_spoljnu_tabelu' ), + 'store_external_table' => array( 0, 'smesti_spoljnu_tabelu' ), + 'clear_external_data' => array( 0, 'očisti_spoljne_podatke' ), +); + +/** Ukrainian (українська) */ +$magicWords['uk'] = array( + 'get_ldap_data' => array( 0, 'отримати_дані_ldap' ), + 'get_db_data' => array( 0, 'отримати_дані_db' ), + 'external_value' => array( 0, 'зовнішнє_значення' ), + 'for_external_table' => array( 0, 'для_зовнішньої_таблиці' ), + 'store_external_table' => array( 0, 'зовнішня_таблиця_зберігання' ), +); + +/** Simplified Chinese (中文(简体)) */ +$magicWords['zh-hans'] = array( + 'get_web_data' => array( 0, '获取网络数据' ), + 'get_file_data' => array( 0, '获取文件数据' ), + 'get_soap_data' => array( 0, '获取soap数据' ), + 'get_ldap_data' => array( 0, '获取ldap数据' ), + 'get_db_data' => array( 0, '获取数据库数据' ), + 'external_value' => array( 0, '外部取值' ), + 'for_external_table' => array( 0, '用于外部表单' ), + 'display_external_table' => array( 0, '显示外部表单' ), + 'store_external_table' => array( 0, '存储外部表单' ), + 'clear_external_data' => array( 0, '清空外部数据' ), +); + +/** Traditional Chinese (中文(繁體)) */ +$magicWords['zh-hant'] = array( + 'get_web_data' => array( 0, '取得網路數據' ), + 'get_file_data' => array( 0, '取得檔案數據' ), + 'get_soap_data' => array( 0, '取得soap數據' ), + 'get_ldap_data' => array( 0, '取得ldap數據' ), + 'get_db_data' => array( 0, '取得資料庫數據' ), + 'for_external_table' => array( 0, '用於外部表單' ), + 'display_external_table' => array( 0, '顯示外部表單' ), + 'store_external_table' => array( 0, '儲存外部表單' ), + 'clear_external_data' => array( 0, '清空外部數據' ), +);
\ No newline at end of file diff --git a/www/wiki/extensions/ExternalData/ExternalData.php b/www/wiki/extensions/ExternalData/ExternalData.php new file mode 100644 index 00000000..cad5ab7c --- /dev/null +++ b/www/wiki/extensions/ExternalData/ExternalData.php @@ -0,0 +1,64 @@ +<?php +/** + * Initialization file for the External Data extension + * + * @file + * @ingroup ExternalData + * @author Yaron Koren + */ + +if ( function_exists( 'wfLoadExtension' ) ) { + wfLoadExtension( 'ExternalData' ); + // Keep i18n globals so mergeMessageFileList.php doesn't break + $wgMessagesDirs['ExternalData'] = __DIR__ . '/i18n'; + $wgExtensionMessagesFiles['ExternalDataMagic'] = __DIR__ . '/ExternalData.i18n.magic.php'; + /* wfWarn( + 'Deprecated PHP entry point used for External Data extension. Please use wfLoadExtension instead, ' . + 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' + ); */ + return; +} + +if ( !defined( 'MEDIAWIKI' ) ) die(); + +$wgExtensionCredits['parserhook'][] = array( + 'path' => __FILE__, + 'name' => 'External Data', + 'version' => '1.9', + 'author' => array( 'Yaron Koren', '...' ), + 'url' => 'https://www.mediawiki.org/wiki/Extension:External_Data', + 'descriptionmsg' => 'externaldata-desc', + 'license-name' => 'GPL-2.0-or-later' +); + +$wgHooks['ParserFirstCallInit'][] = 'ExternalDataHooks::registerParser'; +$wgMessagesDirs['ExternalData'] = __DIR__ . '/i18n'; +$wgExtensionMessagesFiles['ExternalDataMagic'] = __DIR__ . '/ExternalData.i18n.magic.php'; + +// Register all special pages and other classes +$wgAutoloadClasses['ExternalDataHooks'] = __DIR__ . '/ExternalData.hooks.php'; +$wgAutoloadClasses['EDUtils'] = __DIR__ . '/includes/ED_Utils.php'; +$wgAutoloadClasses['EDParserFunctions'] = __DIR__ . '/includes/ED_ParserFunctions.php'; +$wgSpecialPages['GetData'] = 'EDGetData'; +$wgAutoloadClasses['EDGetData'] = __DIR__ . '/includes/ED_GetData.php'; + +$edgValues = array(); +$edgStringReplacements = array(); +$edgCacheTable = null; +$edgAllowSSL = true; +$edgExternalValueVerbose = true; + +// Value is in seconds - set to one week +$edgCacheExpireTime = 60 * 60 * 24 * 7; + +$edgDBServer = array(); +$edgDBServerType = array(); +$edgDBName = array(); +$edgDBUser = array(); +$edgDBPass = array(); +$edgDBDirectory = array(); +$edgDBFlags = array(); +$edgDBTablePrefix = array(); + +$edgDirectoryPath = array(); +$edgFilePath = array(); diff --git a/www/wiki/extensions/ExternalData/Gruntfile.js b/www/wiki/extensions/ExternalData/Gruntfile.js new file mode 100644 index 00000000..a45071e1 --- /dev/null +++ b/www/wiki/extensions/ExternalData/Gruntfile.js @@ -0,0 +1,21 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + + grunt.initConfig( { + banana: { + all: 'i18n/' + }, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**', + '!vendor/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/www/wiki/extensions/ExternalData/README b/www/wiki/extensions/ExternalData/README new file mode 100644 index 00000000..72d7a26c --- /dev/null +++ b/www/wiki/extensions/ExternalData/README @@ -0,0 +1,107 @@ +External Data extension + + Version 1.9 + Yaron Koren and (many) others + +This is free software licensed under the GNU General Public License. Please +see http://www.gnu.org/copyleft/gpl.html for further details, including the +full text and terms of the license. + +== Overview == + +External Data is an extension to MediaWiki that allows for retrieving data +from various sources: external URLs, local wiki pages and files on the +server (all in CSV, GFF, JSON and XML formats), plus database tables and +LDAP servers. + +The extension defines the following parser functions: #get_web_data, +#get_soap_data, #get_file_data, #get_db_data, #get_ldap_data, +#external_value, #for_external_table, #display_external_table, +#store_external_table and #clear_external_data. They are described below: + +* #get_web_data retrieves the data from a URL that holds CSV, GFF, +JSON or XML, and assigns it to local variables or arrays. + +* #get_soap_data retrieves data from a URL via SOAP. + +* #get_file_data retrieves data from a local file, which can be in any of +the same formats that #get_web_data handles. + +* #get_db_data retrieves data from a database, using (in most cases) +SQL-like syntax, and assigns it to local variables or arrays. + +* #get_ldap_data retrieves data from an LDAP server and assigns it to +local variables. + +* #external_value displays the value of any retrieved variable, or the +first value if it's an array. + +* #for_external_table applies processing onto multiple rows retrieved by +any of the #get_*_data functions + +* #display_external_table is like #for_external_table, but passes the +values of each row to a template, which handles the formatting. + +* #store_external_table mimics a call to the Semantic MediaWiki +extension's #subobject parser function onto each row retrieved by +any of the #get_*_data functions, in order to store the entire array +of data semantically. + +* #clear_external_data erases the current set of retrieved data. + +In addition, the extension defines a new special page, 'GetData', which +exports selected rows from a wiki page that holds CSV data, in a format +that is readable by #get_web_data. + +For more information, see the extension homepage at: +http://www.mediawiki.org/wiki/Extension:External_Data + +== Requirements == + +This version of the External Data extension requires MediaWiki 1.23 or +higher. + +== Installation == + +To install the extension, place the entire 'ExternalData' directory +within your MediaWiki 'extensions' directory, then add the following +line to your 'LocalSettings.php' file: + + require_once( "$IP/extensions/ExternalData/ExternalData.php" ); + +To cache the data from the URLs being accessed, you can call the contents +of ExternalData.sql in your database, then add the following to +LocalSettings.php: + + $edgCacheTable = 'ed_url_cache'; + +You should also add a line like the following, to set the expiration time +of the cache, in seconds; this line will cache data for a week: + + $edgCacheExpireTime = 7 * 24 * 60 * 60; + +You can also set for string replacements to be done on the URLs you call, +for instance to hide API keys: + + $edgStringReplacements['MY_API_KEY'] = 'abcd1324'; + +You can create a "whitelist" to allow retrieval of data only from trusted +sites, in the manner of MediaWiki's $wgAllowExternalImagesFrom - if you +are hiding API keys, it is very much recommended to create such a +whitelist, to prevent users from being able to discover their values: + + $edgAllowExternalDataFrom = array('http://example.com/api'); + +Finally, to use the database or LDAP retrieval capabilities, you need to +set connection settings as well - see the online documentation for more +information. + +== Contact == + +Most comments, questions, suggestions and bug reports should be sent to +the main MediaWiki mailing list: + + https://lists.wikimedia.org/mailman/listinfo/mediawiki-l + +If possible, please add "[ED]" at the beginning of the subject line, to +clarify the subject matter. diff --git a/www/wiki/extensions/ExternalData/composer.json b/www/wiki/extensions/ExternalData/composer.json new file mode 100644 index 00000000..b071b83c --- /dev/null +++ b/www/wiki/extensions/ExternalData/composer.json @@ -0,0 +1,16 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "1.0.0", + "jakub-onderka/php-console-highlighter": "0.3.2", + "mediawiki/minus-x": "0.3.1" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor --exclude node_modules", + "minus-x check ." + ], + "fix": [ + "minus-x fix ." + ] + } +} diff --git a/www/wiki/extensions/ExternalData/extension.json b/www/wiki/extensions/ExternalData/extension.json new file mode 100644 index 00000000..9bc364e5 --- /dev/null +++ b/www/wiki/extensions/ExternalData/extension.json @@ -0,0 +1,55 @@ +{ + "name": "External Data", + "version": "1.9", + "author": [ + "Yaron Koren", + "..." + ], + "url": "https://www.mediawiki.org/wiki/Extension:External_Data", + "descriptionmsg": "externaldata-desc", + "license-name": "GPL-2.0-or-later", + "type": "parserhook", + "SpecialPages": { + "GetData": "EDGetData" + }, + "MessagesDirs": { + "ExternalData": [ + "i18n" + ] + }, + "ExtensionMessagesFiles": { + "ExternalDataMagic": "ExternalData.i18n.magic.php", + "ExternalDataAlias": "ExternalData.i18n.alias.php" + }, + "AutoloadClasses": { + "ExternalDataHooks": "ExternalData.hooks.php", + "EDUtils": "includes/ED_Utils.php", + "EDParserFunctions": "includes/ED_ParserFunctions.php", + "EDGetData": "includes/ED_GetData.php" + }, + "Hooks": { + "ParserFirstCallInit": [ + "ExternalDataHooks::registerParser" + ] + }, + "config": { + "_prefix": "edg", + "Values": [], + "StringReplacements": [], + "CacheTable": null, + "AllowSSL": true, + "ExternalValueVerbose": true, + "CacheExpireTime": 604800, + "DBServer": [], + "DBServerType ": [], + "DBName": [], + "DBUser": [], + "DBPass": [], + "DBDirectory": [], + "DBFlags": [], + "DBTablePrefix": [], + "DirectoryPath": [], + "FilePath": [] + }, + "manifest_version": 1 +} diff --git a/www/wiki/extensions/ExternalData/i18n/af.json b/www/wiki/extensions/ExternalData/i18n/af.json new file mode 100644 index 00000000..168afd48 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/af.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Naudefj" + ] + }, + "getdata": "Kry data", + "externaldata-xml-error": "XML-fout: $1 op reël $2", + "externaldata-db-unknown-type": "Fout: onbekende databasistipe.", + "externaldata-db-could-not-connect": "Fout: kon nie 'n verbinding met databasis bewerkstellig nie.", + "externaldata-db-invalid-query": "Ongeldige navraag." +} diff --git a/www/wiki/extensions/ExternalData/i18n/aln.json b/www/wiki/extensions/ExternalData/i18n/aln.json new file mode 100644 index 00000000..a5f23163 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/aln.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Mdupont" + ] + }, + "getdata": "Merr të dhëna", + "externaldata-desc": "Lejon retrieving të dhënat e strukturuar nga URL jashtme, bazat e të dhënave dhe burimet tjera", + "externaldata-ldap-unable-to-connect": "Në pamundësi për t'u lidhur tek $1", + "externaldata-xml-error": "XML error: $1 tek $2 linjë", + "externaldata-db-incomplete-information": "Gabim: informata jo të plota për këtë server të identitetit.", + "externaldata-db-could-not-get-url": "Nuk mund te merrni URL pasi $1 {{PLURAL:$1|provoni|përpiqet}}.", + "externaldata-db-unknown-type": "Gabim: Lloj i panjohur bazës së të dhënave.", + "externaldata-db-could-not-connect": "Gabim: Nuk mund të lidheni me bazën e të dhënave.", + "externaldata-db-no-return-values": "Gabim: Nuk ka kthim vlerat e caktuara.", + "externaldata-db-invalid-query": "pyetje e pavlefshme." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ar.json b/www/wiki/extensions/ExternalData/i18n/ar.json new file mode 100644 index 00000000..fac90e73 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ar.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "DRIHEM", + "Imksa", + "Meno25", + "OsamaK", + "ديفيد" + ] + }, + "getdata": "الحصول على البيانات", + "externaldata-desc": "يسمح باسترجاع البيانات الهيكلية من مسارات خارجية، قواعد البيانات ومصادر أخرى", + "externaldata-no-param-specified": "خطأ: لم يتم تحديد وسيط \"$1\".", + "externaldata-web-invalid-format": "إمتداد خاطئ: \"$1\"", + "externaldata-ldap-unable-to-connect": "تعذّر الاتصال ب$1", + "externaldata-xml-error": "خطأ XML: $1 عند السطر $2", + "externaldata-invalid-json": "خطأ: جسون غير صالح.", + "externaldata-db-incomplete-information": "خطأ: معلومات غير كاملة عن هوية هذا الخادوم.", + "externaldata-db-could-not-get-url": "تعذّر الحصول على المسار بعد {{PLURAL:$1||محاولة واحدة|محاوتين|$1 محاولات|$1 محاولة }}.", + "externaldata-db-unknown-type": "خطأ: نوع قاعدة بيانات غير معروف.", + "externaldata-db-could-not-connect": "خطأ: تعذّر الاتصال بقاعدة البيانات.", + "externaldata-db-unknown-collection": "خطأ: مجموعة مونغو دي بي غير معروفة.", + "externaldata-db-no-return-values": "خطأ: لم تحدد أي قيم عائدة.", + "externaldata-db-invalid-query": "استعلام غير صالح." +} diff --git a/www/wiki/extensions/ExternalData/i18n/arz.json b/www/wiki/extensions/ExternalData/i18n/arz.json new file mode 100644 index 00000000..7f3f8a12 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/arz.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Dudi", + "Meno25" + ] + }, + "getdata": "الحصول على البيانات", + "externaldata-desc": "بيسمح انك تجيب الداتا المتركبه من URLات برّانيه, و قواعد بيانات (databases) و مصادر تانيه" +} diff --git a/www/wiki/extensions/ExternalData/i18n/ast.json b/www/wiki/extensions/ExternalData/i18n/ast.json new file mode 100644 index 00000000..c5d1975c --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ast.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Xuacu" + ] + }, + "getdata": "Recuperar datos", + "externaldata-desc": "Permite recuperar datos estructuraos de direiciones URL, bases de datos y otres fontes esternes", + "externaldata-no-param-specified": "Error: Nun s'especificó dengún parámetru «$1».", + "externaldata-web-invalid-format": "Formatu inválidu: \"$1\"", + "externaldata-ldap-unable-to-connect": "Nun se pudo coneutar con $1", + "externaldata-xml-error": "Error XML: $1 na llinia $2", + "externaldata-invalid-json": "Error: JSON inválidu", + "externaldata-db-incomplete-information": "Error: Información incompleta pa esta ID de sirvidor.", + "externaldata-db-could-not-get-url": "Nun se pudo recuperar la URL dempués de $1 {{PLURAL:$1|intentu|intentos}}.", + "externaldata-db-unknown-type": "Error: Triba de base de datos desconocida.", + "externaldata-db-could-not-connect": "Error: Nun se pudo coneutar cola base de datos.", + "externaldata-db-unknown-collection": "Fallu: Coleición MongoDB desconocida.", + "externaldata-db-no-return-values": "Error: Nun s'especificaron valores de retornu.", + "externaldata-db-invalid-query": "Consulta inválida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ba.json b/www/wiki/extensions/ExternalData/i18n/ba.json new file mode 100644 index 00000000..c5fd28e0 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ba.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Азат Хәлилов", + "Айбикә", + "Ләйсән" + ] + }, + "getdata": "Мәғлүмәттәр алырға", + "externaldata-desc": "Тышҡы адрестарҙан, мәғлүмәттәр базаһынан һәм башҡа сығанаҡтарҙан структураға һалынған мәғлүмәттәр алырға ярҙам итә", + "externaldata-no-param-specified": "Хата: «$1» параметры күрһәтелмәгән.", + "externaldata-web-invalid-format": "Рөхсәт ителмәгән формат: \"$1\"", + "externaldata-ldap-unable-to-connect": " $1 тоташып булмай.", + "externaldata-xml-error": "XML хата. $1 $2 юлында", + "externaldata-invalid-json": "Хата: Рөхсәт ителмәгән JSON", + "externaldata-db-incomplete-information": "Хата: Был ID сервер өсөн мәғлүмәт тулы түгел.", + "externaldata-db-could-not-get-url": "$1 {{PLURAL:$1|мөмкинлектән}} һуң URL алып булманы.", + "externaldata-db-unknown-type": "ХАТА: Билдәһеҙ мәғлүмәт базаһы.", + "externaldata-db-could-not-connect": "ХАТА: Мәғлүмәт базаһы менән бәйләнеш булдырып булмай.", + "externaldata-db-unknown-collection": "Хата: Билдәһеҙ коллекция MongoDB.", + "externaldata-db-no-return-values": "Хата: Кире ҡайтара торған билдәләр күрһәтелмәгән", + "externaldata-db-invalid-query": "Хаталы һорау" +} diff --git a/www/wiki/extensions/ExternalData/i18n/be-tarask.json b/www/wiki/extensions/ExternalData/i18n/be-tarask.json new file mode 100644 index 00000000..94add57a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/be-tarask.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "EugeneZelenko", + "Jim-by", + "Wizardist", + "Red Winged Duck" + ] + }, + "getdata": "Атрымаць зьвесткі", + "externaldata-desc": "Дазваляе атрымліваць структураваныя зьвесткі з вонкавых URL-адрасоў, базаў зьвестак і іншых крыніц", + "externaldata-no-param-specified": "Памылка: парамэтар «$1» ня вызначаны.", + "externaldata-web-invalid-format": "Няслушны фармат: «$1»", + "externaldata-ldap-unable-to-connect": "Немагчыма далучыцца да $1", + "externaldata-xml-error": "Памылка XML: $1 у радку $2", + "externaldata-invalid-json": "Памылка: няправільны JSON.", + "externaldata-db-incomplete-information": "Памылка: Няпоўная інфармацыя для гэтага ідэнтыфікатара сэрвэра.", + "externaldata-db-could-not-get-url": "Немагчыма атрымаць URL-адрас пасьля $1 {{PLURAL:$1|спробы|спробаў|спробаў}}.", + "externaldata-db-unknown-type": "Памылка: Невядомы тып базы зьвестак.", + "externaldata-db-could-not-connect": "Памылка: Немагчыма далучыцца да базы зьвестак.", + "externaldata-db-unknown-collection": "Памылка: невядомая калецыя MongoDB.", + "externaldata-db-no-return-values": "Памылка: Не пазначаныя выніковыя значэньні.", + "externaldata-db-invalid-query": "Няслушны запыт." +} diff --git a/www/wiki/extensions/ExternalData/i18n/br.json b/www/wiki/extensions/ExternalData/i18n/br.json new file mode 100644 index 00000000..8835619a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/br.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Fohanno", + "Fulup", + "Y-M D" + ] + }, + "getdata": "Tapout roadennoù", + "externaldata-desc": "Talvezout a ra da adtapout roadennoù frammet adalek URLoù diavaez, diazoù titouroù ha mammennoù all.", + "externaldata-no-param-specified": "Fazi : an arventenn \"$1\" n'eo ket bet diferet.", + "externaldata-web-invalid-format": "Furmad direizh : \"$1\"", + "externaldata-ldap-unable-to-connect": "Ne c'haller ket kevreañ ouzh $1", + "externaldata-xml-error": "Fazi XML : $1 el linenn $2", + "externaldata-invalid-json": "Fazi : JSON direizh", + "externaldata-db-incomplete-information": "Fazi : Titouroù diglok evit an ID servijer-mañ.", + "externaldata-db-could-not-get-url": "Dibosupl eo tapout an URL goude $1 {{PLURAL:$1|taol-esae|taol-esae}}.", + "externaldata-db-unknown-type": "Fazi : Seurt diaz roadennoù dianav", + "externaldata-db-could-not-connect": "Fazi : Ne c'haller ket kevreañ ouzh an diaz roadennoù.", + "externaldata-db-no-return-values": "Fazi : N'eus bet resisaet talvoud distro ebet.", + "externaldata-db-invalid-query": "Reked direizh." +} diff --git a/www/wiki/extensions/ExternalData/i18n/bs.json b/www/wiki/extensions/ExternalData/i18n/bs.json new file mode 100644 index 00000000..61bb9373 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/bs.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "CERminator" + ] + }, + "getdata": "Uzmi podatke", + "externaldata-desc": "Omogućuje za preuzimanje strukturnih podataka iz vanjskih URLova, baza podataka i drugih izvora", + "externaldata-ldap-unable-to-connect": "Ne može se spojiti na $1", + "externaldata-xml-error": "XML greška: $1 na liniji $2", + "externaldata-db-incomplete-information": "Greška: Nepotpune informacije za ovaj ID servera.", + "externaldata-db-could-not-get-url": "Nije pronađen URL nakon $1 {{PLURAL:$1|pokušaja|pokušaja}}.", + "externaldata-db-unknown-type": "Greška: Nepoznat tip baze podataka.", + "externaldata-db-could-not-connect": "Greška: Ne može se spojiti na bazu podataka.", + "externaldata-db-no-return-values": "Greška: Nije navedena povratna vrijednost.", + "externaldata-db-invalid-query": "Nevaljan upit." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ca.json b/www/wiki/extensions/ExternalData/i18n/ca.json new file mode 100644 index 00000000..731e67ec --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ca.json @@ -0,0 +1,13 @@ +{ + "@metadata": { + "authors": [ + "Paucabot", + "Solde" + ] + }, + "getdata": "Obtenir dades", + "externaldata-xml-error": "Error XML: $1 a la línia $2", + "externaldata-db-unknown-type": "Error: Tipus de base de dades desconegut.", + "externaldata-db-could-not-connect": "Error: No s'ha pogut connectar a la base de dades.", + "externaldata-db-invalid-query": "Consulta no vàlida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/cs.json b/www/wiki/extensions/ExternalData/i18n/cs.json new file mode 100644 index 00000000..3b155ea8 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/cs.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Jkjk", + "Matěj Grabovský", + "Mormegil", + "Reaperman", + "XenoPheX" + ] + }, + "getdata": "Získat data", + "externaldata-desc": "Umožňuje získávání strukturovaných dat z externích webových stránek, databází a jiných zdrojů", + "externaldata-no-param-specified": "Chyba: Nebyl zadán parametr „$1“.", + "externaldata-web-invalid-format": "Neplatný formát: „$1“", + "externaldata-ldap-unable-to-connect": "Nepodařilo se spojit s $1", + "externaldata-xml-error": "Chyba XML: $1 na řádku $2", + "externaldata-invalid-json": "Chyba: Neplatný JSON.", + "externaldata-db-incomplete-information": "Chyba: Nekompletní informace pro toto ID databáze.", + "externaldata-db-could-not-get-url": "Nepodařilo se získat URL po $1 {{PLURAL:$1|pokusu|pokusech}}.", + "externaldata-db-unknown-type": "Chyba: Neznámý typ databáze.", + "externaldata-db-could-not-connect": "Chyba: Nepodařilo se připojit k databázi.", + "externaldata-db-unknown-collection": "Chyba: Neznámá kolekce MongoDB.", + "externaldata-db-no-return-values": "Chyba: Nebyly zadány návratové hodnoty.", + "externaldata-db-invalid-query": "Neplatný požadavek." +} diff --git a/www/wiki/extensions/ExternalData/i18n/cy.json b/www/wiki/extensions/ExternalData/i18n/cy.json new file mode 100644 index 00000000..b7167b98 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/cy.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Lloffiwr" + ] + }, + "getdata": "Nôl y data", + "externaldata-desc": "Yn galluogi nôl data strwythuredig o ffynnonellau allanol megis URLs a chronfeydd data", + "externaldata-no-param-specified": "Gwall: Ni phenwyd y paramedr \"$1\".", + "externaldata-web-invalid-format": "Fformat annilys: \"$1\"", + "externaldata-ldap-unable-to-connect": "Ni lwyddwyd i gysylltu â $1", + "externaldata-xml-error": "Gwall XML: $1 yn y llinell $2", + "externaldata-invalid-json": "Gwall: JSON annilys.", + "externaldata-db-incomplete-information": "Gwall: Gwybodaeth anghyflawn i ID y gronfa ddata.", + "externaldata-db-could-not-get-url": "Ni chafwyd hyd i'r URL o geisio {{PLURAL:$1||unwaith|dwywaith|teirgwaith|$1 gwaith}}.", + "externaldata-db-unknown-type": "Gwall: Math anhysbys i'r gronfa ddata.", + "externaldata-db-could-not-connect": "Gwall: Ni lwyddwyd i gysylltu â'r gronfa ddata.", + "externaldata-db-unknown-collection": "Gwall: Casgliad MongoDB anhysbys.", + "externaldata-db-no-return-values": "Gwall: Ni phenwyd unrhyw werthoedd i'w nôl.", + "externaldata-db-invalid-query": "Gofyniad annilys." +} diff --git a/www/wiki/extensions/ExternalData/i18n/da.json b/www/wiki/extensions/ExternalData/i18n/da.json new file mode 100644 index 00000000..5f08159c --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/da.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Tjernobyl", + "Saederup92" + ] + }, + "externaldata-invalid-json": "Fejl: Ugyldigt JSON.", + "externaldata-db-invalid-query": "Ugyldig forespørgsel." +} diff --git a/www/wiki/extensions/ExternalData/i18n/de.json b/www/wiki/extensions/ExternalData/i18n/de.json new file mode 100644 index 00000000..a15fd009 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/de.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "Imre", + "Kghbln", + "MF-Warburg", + "Merlissimo", + "Metalhead64", + "Purodha", + "Umherirrender" + ] + }, + "getdata": "Daten holen", + "externaldata-desc": "Ermöglicht das Abrufen strukturierter Daten von externen URLs, Datenbanken und anderen Quellen", + "externaldata-no-param-specified": "Fehler: Kein Parameter „$1“ angegeben.", + "externaldata-web-invalid-format": "Ungültiges Format: „$1“", + "externaldata-ldap-unable-to-connect": "Es konnte keine Verbindung zu $1 hergestellt werden", + "externaldata-xml-error": "XML-Fehler: $1 in Zeile $2", + "externaldata-invalid-json": "Fehler: Ungültiges JSON", + "externaldata-db-incomplete-information": "Fehler: Es liegen nur unvollständige Informationen für diese Serverkennung vor.", + "externaldata-db-could-not-get-url": "Die URL konnte mit {{PLURAL:$1|einem Versuch|$1 Versuchen}} nicht abgerufen werden.", + "externaldata-db-unknown-type": "Fehler: Es handelt sich um einen unbekannten Datenbanktyp.", + "externaldata-db-could-not-connect": "Fehler: Es konnte keine Verbindung zur Datenbank hergestellt werden.", + "externaldata-db-unknown-collection": "Fehler: Unbekannte MongoDB-Sammlung", + "externaldata-db-no-return-values": "Fehler: Es wurden keine Rückgabewerte festgelegt.", + "externaldata-db-invalid-query": "Ungültige Abfrage." +} diff --git a/www/wiki/extensions/ExternalData/i18n/dsb.json b/www/wiki/extensions/ExternalData/i18n/dsb.json new file mode 100644 index 00000000..a72319d9 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/dsb.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Michawiki" + ] + }, + "getdata": "Daty wobstaraś", + "externaldata-desc": "Zmóžnja wótwołowanje strukturěrowanych datow z eksternych URL, datowych bankow a drugich žrědłow", + "externaldata-web-invalid-format": "Njepłaśiwy format: \"$1\"", + "externaldata-ldap-unable-to-connect": "Njemóžno z $1 zwězaś", + "externaldata-xml-error": "Zmólka XML: $1 na smužce $2", + "externaldata-db-incomplete-information": "'''Zmólka: Njedopołne informacije za toś ten serwerowy ID.'''", + "externaldata-db-could-not-get-url": "Njemóžno URL pó $1 {{PLURAL:$1|wopyśe|wopytoma|wopytach|wopytach}} dostaś.", + "externaldata-db-unknown-type": "'''Zmólka: Njeznata datowa banka.'''", + "externaldata-db-could-not-connect": "'''Zmólka: Njemóžno z datoweju banku zwězaś.'''", + "externaldata-db-no-return-values": "'''Zmólka: Žedne gódnoty slědkdaśa pódane.'''", + "externaldata-db-invalid-query": "Njepłaśiwe napšašowanje." +} diff --git a/www/wiki/extensions/ExternalData/i18n/el.json b/www/wiki/extensions/ExternalData/i18n/el.json new file mode 100644 index 00000000..b18947dc --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/el.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Dead3y3", + "Glavkos", + "Omnipaedista", + "Protnet", + "ZaDiak" + ] + }, + "getdata": "Λήψη δεδομένων", + "externaldata-desc": "Επιτρέπει την ανάκτηση δομημένων δεδομένων από εξωτερικά URL, βάσεις δεδομένων και άλλες πηγές", + "externaldata-no-param-specified": "Σφάλμα: Δεν καθορίστηκε παράμετρος «$1».", + "externaldata-web-invalid-format": "Μη έγκυρη μορφή: «$1».", + "externaldata-ldap-unable-to-connect": "Δεν είναι δυνατή η σύνδεση με $1.", + "externaldata-xml-error": "Σφάλμα XML: $1 στη γραμμή $2", + "externaldata-invalid-json": "Σφάλμα: Μη έγκυρο JSON.", + "externaldata-db-incomplete-information": "Σφάλμα: Ελλιπείς πληροφορίες για αυτό το αναγνωριστικό βάσης δεδομένων.", + "externaldata-db-could-not-get-url": "Δεν ήταν δυνατή η λήψη του URL μετά από $1 {{PLURAL:$1|προσπάθεια|προσπάθειες}}.", + "externaldata-db-unknown-type": "Σφάλμα: Άγνωστος τύπος βάσης δεδομένων.", + "externaldata-db-could-not-connect": "Σφάλμα: Αδυναμία σύνδεσης στη βάση δεδομένων.", + "externaldata-db-unknown-collection": "Σφάλα: Άγνωστη συλλογή MongoDB.", + "externaldata-db-no-return-values": "Σφάλμα: Δεν καθορίστηκαν τιμές επιστροφής.", + "externaldata-db-invalid-query": "Μη έγκυρο ερώτημα." +} diff --git a/www/wiki/extensions/ExternalData/i18n/en.json b/www/wiki/extensions/ExternalData/i18n/en.json new file mode 100644 index 00000000..081c7f0e --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/en.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Yaron Koren" + ] + }, + "getdata": "Get data", + "externaldata-desc": "Allows for retrieving structured data from external URLs, databases and other sources", + "externaldata-no-param-specified": "Error: No \"$1\" parameter specified.", + "externaldata-web-invalid-format": "Invalid format: \"$1\".", + "externaldata-ldap-unable-to-connect": "Unable to connect to $1.", + "externaldata-xml-error": "XML error: $1 at line $2.", + "externaldata-invalid-json": "Error: Invalid JSON.", + "externaldata-db-incomplete-information": "Error: Incomplete information for this database ID.", + "externaldata-db-could-not-get-url": "Could not get URL after $1 {{PLURAL:$1|try|tries}}.", + "externaldata-db-unknown-type": "Error: Unknown database type.", + "externaldata-db-could-not-connect": "Error: Could not connect to database.", + "externaldata-db-unknown-collection": "Error: Unknown MongoDB collection.", + "externaldata-db-no-return-values": "Error: No return values specified.", + "externaldata-db-invalid-query": "Invalid query." +}
\ No newline at end of file diff --git a/www/wiki/extensions/ExternalData/i18n/eo.json b/www/wiki/extensions/ExternalData/i18n/eo.json new file mode 100644 index 00000000..14df5915 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/eo.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Yekrats" + ] + }, + "externaldata-db-invalid-query": "Malvalida serĉomendo." +} diff --git a/www/wiki/extensions/ExternalData/i18n/es.json b/www/wiki/extensions/ExternalData/i18n/es.json new file mode 100644 index 00000000..f150efc1 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/es.json @@ -0,0 +1,28 @@ +{ + "@metadata": { + "authors": [ + "Armando-Martin", + "Crazymadlover", + "Fitoschido", + "Imre", + "Manuelt15", + "Sanbec", + "Translationista", + "Indiralena" + ] + }, + "getdata": "Obtener datos", + "externaldata-desc": "Permite la recuperación de datos estructurados a partir de direcciones URL externas, bases de datos y otras fuentes", + "externaldata-no-param-specified": "Error: No se ha especificado el parámetro «$1».", + "externaldata-web-invalid-format": "El formato «$1» no es válido.", + "externaldata-ldap-unable-to-connect": "No se pudo conectar con $1", + "externaldata-xml-error": "Error XML: $1 en línea $2", + "externaldata-invalid-json": "Error: JSON no válido", + "externaldata-db-incomplete-information": "Error: Información incompleta para este ID de servidor.", + "externaldata-db-could-not-get-url": "No se pudo obtener la URL después de $1 {{PLURAL:$1|intento|intentos}}.", + "externaldata-db-unknown-type": "Error: Tipo de base de datos desconocido.", + "externaldata-db-could-not-connect": "Error: No se pudo lograr conexión con la base de datos.", + "externaldata-db-unknown-collection": "Error: colección de MongoDB desconocida.", + "externaldata-db-no-return-values": "Error: No se ha especificado valores de retorno.", + "externaldata-db-invalid-query": "Consulta no válida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/et.json b/www/wiki/extensions/ExternalData/i18n/et.json new file mode 100644 index 00000000..9e76879d --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/et.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Pikne" + ] + }, + "externaldata-db-unknown-type": "Tõrge: Tundmatu andmebaasi tüüp.", + "externaldata-db-could-not-connect": "Tõrge: Andmebaasiga ei saa ühendust.", + "externaldata-db-invalid-query": "Vigane päring." +} diff --git a/www/wiki/extensions/ExternalData/i18n/eu.json b/www/wiki/extensions/ExternalData/i18n/eu.json new file mode 100644 index 00000000..094369b6 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/eu.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Kobazulo" + ] + }, + "getdata": "Datuak eskuratu" +} diff --git a/www/wiki/extensions/ExternalData/i18n/fa.json b/www/wiki/extensions/ExternalData/i18n/fa.json new file mode 100644 index 00000000..b89b79b0 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/fa.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Armin1392", + "Mjbmr" + ] + }, + "getdata": "دریافت اطلاعات", + "externaldata-desc": "اجازه برای بازیابی اطلاعات ساخته شده از یوآرالهای خارجی، پایگاههای اطلاعاتی و دیگر منابع", + "externaldata-no-param-specified": "خطا: هیچ پارامتر \"$1\" تعیین نشدهاست.", + "externaldata-web-invalid-format": "فرمت نامعتبر: \"$1\".", + "externaldata-ldap-unable-to-connect": "قادر نبودن اتصال به $1", + "externaldata-xml-error": "خطای ایکسامال: $1 در خط $2", + "externaldata-invalid-json": "خطا: جیسون نامعتبر.", + "externaldata-db-incomplete-information": "خطا: اطلاعات ناقص برای شناسهٔ این پایگاه اطلاعاتی.", + "externaldata-db-could-not-get-url": "پس از $1 {{PLURAL:$1|try|tries}}، یوآرال نتوانست دریافت شود.", + "externaldata-db-unknown-type": "خطا: نوع پایگاه اطلاعاتی ناشناخته.", + "externaldata-db-could-not-connect": "خطا: نتوانست به پایگاه اطلاعاتی متصل شود.", + "externaldata-db-unknown-collection": "خطا: مجموعهٔ مونگودیبی ناشناخته.", + "externaldata-db-no-return-values": "خطا: بدون بازگشت ارزشهای تعیین شده.", + "externaldata-db-invalid-query": "سوال نامعتبر." +} diff --git a/www/wiki/extensions/ExternalData/i18n/fi.json b/www/wiki/extensions/ExternalData/i18n/fi.json new file mode 100644 index 00000000..ca77dcb6 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/fi.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Centerlink", + "Crt", + "Nedergard", + "Silvonen", + "Str4nd" + ] + }, + "getdata": "Hae data", + "externaldata-desc": "Mahdollistaa muotoillun datan noutamisen ulkoisista verkko-osoitteista, tietokannoista ja muista lähteistä.", + "externaldata-web-invalid-format": "Virheellinen muoto: \"$1\"", + "externaldata-ldap-unable-to-connect": "Ei voitu yhdistää palvelimelle $1", + "externaldata-xml-error": "XML-virhe: $1 rivillä $2", + "externaldata-db-incomplete-information": "Virhe: Vaillinaiset tiedot tälle palvelintunnukselle.", + "externaldata-db-could-not-get-url": "Ei voitu hakea verkko-osoitetta $1 {{PLURAL:$1|yrityksen|yrityksen}} jälkeen.", + "externaldata-db-unknown-type": "Virhe: Tuntematon tietokantatyyppi.", + "externaldata-db-could-not-connect": "Virhe: Ei yhteyttä tietokantaan.", + "externaldata-db-unknown-collection": "Virhe: Tuntematon MongoDB-kokoelma.", + "externaldata-db-no-return-values": "Virhe: Paluuarvoja ei ole annettu.", + "externaldata-db-invalid-query": "Virheellinen kysely." +} diff --git a/www/wiki/extensions/ExternalData/i18n/fr.json b/www/wiki/extensions/ExternalData/i18n/fr.json new file mode 100644 index 00000000..552b612f --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/fr.json @@ -0,0 +1,26 @@ +{ + "@metadata": { + "authors": [ + "Crochet.david", + "Gomoko", + "IAlex", + "McDutchie", + "PieRRoMaN", + "Shirayuki" + ] + }, + "getdata": "Obtenir des données", + "externaldata-desc": "Permet de récupérer des données structurées à partir d'URL externes, de bases de données et d'autres sources", + "externaldata-no-param-specified": "Erreur : Aucun paramètre « $1 » spécifié.", + "externaldata-web-invalid-format": "Format invalide: \"$1\"", + "externaldata-ldap-unable-to-connect": "Impossible de se connecter à $1", + "externaldata-xml-error": "Erreur XML : $1 à la ligne $2", + "externaldata-invalid-json": "Erreur : JSON non valide", + "externaldata-db-incomplete-information": "Erreur : Informations incomplètes pour cet identifiant de serveur.", + "externaldata-db-could-not-get-url": "Impossible d'obtenir l'URL après $1 {{PLURAL:$1|essais}}.", + "externaldata-db-unknown-type": "ERREUR: Type de base de données inconnu.", + "externaldata-db-could-not-connect": "Erreur : Impossible de se connecter à la base de données.", + "externaldata-db-unknown-collection": "Erreur: Collection MongoDB inconnue.", + "externaldata-db-no-return-values": "Erreur : Aucune valeur de retour n'a été spécifiée.", + "externaldata-db-invalid-query": "Requête invalide." +} diff --git a/www/wiki/extensions/ExternalData/i18n/frp.json b/www/wiki/extensions/ExternalData/i18n/frp.json new file mode 100644 index 00000000..cf3b5aaf --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/frp.json @@ -0,0 +1,16 @@ +{ + "@metadata": { + "authors": [ + "ChrisPtDe" + ] + }, + "getdata": "Avêr des balyês", + "externaldata-web-invalid-format": "Format envalido : « $1 »", + "externaldata-ldap-unable-to-connect": "Empossiblo de sè branchiér a $1", + "externaldata-xml-error": "Èrror XML : $1 a la legne $2", + "externaldata-db-could-not-get-url": "Empossiblo d’avêr l’URL aprés $1 tentativ{{PLURAL:$1|a|es}}.", + "externaldata-db-unknown-type": "Èrror : tipo de bâsa de balyês encognu.", + "externaldata-db-could-not-connect": "Èrror : empossiblo de sè branchiér a la bâsa de balyês.", + "externaldata-db-no-return-values": "Èrror : niona valor de retôrn at étâ spècefiâ.", + "externaldata-db-invalid-query": "Requéta envalida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/gl.json b/www/wiki/extensions/ExternalData/i18n/gl.json new file mode 100644 index 00000000..cfabd336 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/gl.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Toliño" + ] + }, + "getdata": "Obter os datos", + "externaldata-desc": "Permite a recuperación de datos estruturados a partir de enderezos URL externos, bases de datos e outras fontes", + "externaldata-no-param-specified": "Erro: Non se especificou ningún parámetro \"$1\".", + "externaldata-web-invalid-format": "Formato incorrecto: \"$1\".", + "externaldata-ldap-unable-to-connect": "Non se pode conectar con $1.", + "externaldata-xml-error": "Erro XML: $1 na liña $2.", + "externaldata-invalid-json": "Erro: JSON non válido.", + "externaldata-db-incomplete-information": "Erro: Información incompleta para este ID de servidor.", + "externaldata-db-could-not-get-url": "Non se puido obter o enderezo URL despois de $1 {{PLURAL:$1|intento|intentos}}.", + "externaldata-db-unknown-type": "Erro: Tipo de base de datos descoñecido.", + "externaldata-db-could-not-connect": "Erro: Non se puido conectar coa base de datos.", + "externaldata-db-unknown-collection": "Erro: Colección MongoDB descoñecida.", + "externaldata-db-no-return-values": "Erro: Non se especificou ningún valor de retorno.", + "externaldata-db-invalid-query": "A consulta non é válida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/gsw.json b/www/wiki/extensions/ExternalData/i18n/gsw.json new file mode 100644 index 00000000..66f7cc1a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/gsw.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Als-Chlämens", + "Als-Holder" + ] + }, + "getdata": "Date hole", + "externaldata-desc": "Erlaubt strukturierti Daten abzruefe vu extärne URL un andre Quälle", + "externaldata-web-invalid-format": "Ungültigs Format: „$1“", + "externaldata-ldap-unable-to-connect": "Cha kei Verbindig härstellen zue $1", + "externaldata-xml-error": "XML-Fähler: $1 in dr Zyyle $2", + "externaldata-db-incomplete-information": "Fähler: Nit vollständigi Information fir die Server-ID.", + "externaldata-db-could-not-get-url": "Cha d URL nit finde no $1 {{PLURAL:$1|Versuech|Versuech}}.", + "externaldata-db-unknown-type": "Fähler: Nit bekannte Datebanktyp.", + "externaldata-db-could-not-connect": "Fähler: Cha kei Verbindig härstelle zue dr Datebank.", + "externaldata-db-no-return-values": "Fähler: Kei Ruckgabewärt spezifiziert.", + "externaldata-db-invalid-query": "Nit giltigi Umfrog." +} diff --git a/www/wiki/extensions/ExternalData/i18n/gu.json b/www/wiki/extensions/ExternalData/i18n/gu.json new file mode 100644 index 00000000..20c6124d --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/gu.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Ashok modhvadia", + "KartikMistry" + ] + }, + "getdata": "માહિતી પ્રાપ્ત કરો", + "externaldata-desc": "બાહ્ય કડીઓ, ડેટાબેઝ અને અન્ય સ્રોતોમાંથી માહિતીની પુન:પ્રાપ્તિની છુટ", + "externaldata-invalid-json": "ક્ષતિ: અયોગ્ય JSON" +} diff --git a/www/wiki/extensions/ExternalData/i18n/he.json b/www/wiki/extensions/ExternalData/i18n/he.json new file mode 100644 index 00000000..3c4b85fb --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/he.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Amire80", + "Rotemliss", + "YaronSh", + "Yona b" + ] + }, + "getdata": "קבלת נתונים", + "externaldata-desc": "אפשרות לקבלת נתונים במבנים מכתובות חיצוניות, מסדי נתונים ומקורות אחרים", + "externaldata-no-param-specified": "שגיאה: נבחר פרמטר \"$1\" מסוים.", + "externaldata-web-invalid-format": "תסדיר בלתי־תקין: \"$1\"", + "externaldata-ldap-unable-to-connect": "לא ניתן להתחבר ל־$1", + "externaldata-xml-error": "שגיאת XML: $1 בשורה $2", + "externaldata-invalid-json": "שגיאה: JSON בלתי־תקין", + "externaldata-db-incomplete-information": "שגיאה: יש רק מידע חלקי על מספר השרת הזה.", + "externaldata-db-could-not-get-url": "לא ניתן לקבל את כתובת ה־URL לאחר {{PLURAL:$1|נסיון אחד|$1 נסיונות}}.", + "externaldata-db-unknown-type": "שגיאה: סוג מסד הנתונים אינו מוכר.", + "externaldata-db-could-not-connect": "שגיאה: לא ניתן להתחבר אל מסד הנתונים.", + "externaldata-db-unknown-collection": "שגיאה: אוסף MongoDB לא ידוע.", + "externaldata-db-no-return-values": "שגיאה: לא הוגדרו ערכים להחזרה.", + "externaldata-db-invalid-query": "שאילתה בלתי תקינה." +} diff --git a/www/wiki/extensions/ExternalData/i18n/hsb.json b/www/wiki/extensions/ExternalData/i18n/hsb.json new file mode 100644 index 00000000..9e181cb2 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/hsb.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Michawiki" + ] + }, + "getdata": "Daty wobstarać", + "externaldata-desc": "Zmóžnja wotwołowanje strukturowanych datow z eksternych URL, datowych bankow a druhich žórłow", + "externaldata-no-param-specified": "Zmylk: Žadyn parameter \"$1\" podaty.", + "externaldata-web-invalid-format": "Njepłaćiwy format: \"$1\"", + "externaldata-ldap-unable-to-connect": "Njemóžno z $1 zwjazać", + "externaldata-xml-error": "Zmylk XML: $1 na lince $2", + "externaldata-invalid-json": "Zmylk: Njepłaćiwy JSON.", + "externaldata-db-incomplete-information": "'''Zmylk: Njedospołne informacije za ID tutoho serwera.'''", + "externaldata-db-could-not-get-url": "Njebě móžno URL po $1 {{PLURAL:$1|pospyće|pospytomaj|pospytach|pospytach}} dóstać.", + "externaldata-db-unknown-type": "'''Zmylk: Njeznaty typ datoweje banki.'''", + "externaldata-db-could-not-connect": "'''Zmylk: Njemóžno z datowej banku zwjazać.'''", + "externaldata-db-unknown-collection": "Zmylk: Njeznata MongoDB-zběrka.", + "externaldata-db-no-return-values": "'''Zmylk: Žane hódnoty wróćenja podate.'''", + "externaldata-db-invalid-query": "Njepłaćiwe naprašowanje." +} diff --git a/www/wiki/extensions/ExternalData/i18n/hu.json b/www/wiki/extensions/ExternalData/i18n/hu.json new file mode 100644 index 00000000..7cf3e08f --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/hu.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Dj", + "Glanthor Reviol" + ] + }, + "getdata": "Adatok lekérése", + "externaldata-desc": "Strukturált adatok lekérése külső URL-ekről, adatbázisokból vagy más forrásokból", + "externaldata-web-invalid-format": "Érvénytelen formátum: \"$1\"", + "externaldata-ldap-unable-to-connect": "Sikertelen csatlakozás a következőhöz: $1", + "externaldata-xml-error": "$1 XML hiba, $2. sor", + "externaldata-db-incomplete-information": "Hiba: hiányos információ a szerver azonosítóhoz.", + "externaldata-db-could-not-get-url": "Nem sikerült lekérni az URL-t {{PLURAL:$1|egy|$1}} próbálkozás alatt.", + "externaldata-db-unknown-type": "Hiba: ismeretlen adatbázis típus.", + "externaldata-db-could-not-connect": "Hiba: nem sikerült csatlakozni az adatbázishoz.", + "externaldata-db-no-return-values": "Hiba: nem lettek megadva visszatérési értékek.", + "externaldata-db-invalid-query": "Érvénytelen lekérdezés." +} diff --git a/www/wiki/extensions/ExternalData/i18n/hy.json b/www/wiki/extensions/ExternalData/i18n/hy.json new file mode 100644 index 00000000..60689141 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/hy.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "M hamlet" + ] + }, + "externaldata-invalid-json": "Սխալ․ Թերի JSON" +} diff --git a/www/wiki/extensions/ExternalData/i18n/ia.json b/www/wiki/extensions/ExternalData/i18n/ia.json new file mode 100644 index 00000000..74552c5f --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ia.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "McDutchie" + ] + }, + "getdata": "Obtener datos", + "externaldata-desc": "Permitte recuperar datos structurate ab adresses URL, bases de datos e altere fontes externe", + "externaldata-no-param-specified": "Error: Nulle parametro \"$1\" specificate.", + "externaldata-web-invalid-format": "Formato invalide: \"$1\"", + "externaldata-ldap-unable-to-connect": "Impossibile connecter se a $1", + "externaldata-xml-error": "Error de XML: $1 al linea $2", + "externaldata-invalid-json": "Error: JSON invalide.", + "externaldata-db-incomplete-information": "Error: Information incomplete pro iste ID de servitor.", + "externaldata-db-could-not-get-url": "Non poteva obtener le URL post $1 {{PLURAL:$1|tentativa|tentativas}}.", + "externaldata-db-unknown-type": "Error: Typo de base de datos incognite.", + "externaldata-db-could-not-connect": "Error: Impossibile connecter se al base de datos.", + "externaldata-db-unknown-collection": "Error: Collection MongoDB incognite.", + "externaldata-db-no-return-values": "Error: Nulle valor de retorno specificate.", + "externaldata-db-invalid-query": "Consulta invalide." +} diff --git a/www/wiki/extensions/ExternalData/i18n/id.json b/www/wiki/extensions/ExternalData/i18n/id.json new file mode 100644 index 00000000..47eb05e9 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/id.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Bennylin", + "Farras", + "IvanLanin", + "Iwan Novirion" + ] + }, + "getdata": "Ambil data", + "externaldata-desc": "Memungkinkan untuk mengambil data terstruktur dari URL eksternal, database dan sumber lainnya", + "externaldata-web-invalid-format": "Format salah: \"$1\"", + "externaldata-ldap-unable-to-connect": "Tidak dapat terhubung ke $1", + "externaldata-xml-error": "Galat XML: $1 pada baris $2", + "externaldata-db-incomplete-information": "Galat: Informasi tak lengkap untuk ID server ini.", + "externaldata-db-could-not-get-url": "Tidak dapat mengambil URL setelah dicoba {{PLURAL:$1||}}$1 kali.", + "externaldata-db-unknown-type": "Galat: Jenis basis data tidak diketahui.", + "externaldata-db-could-not-connect": "Galat: Tidak dapat terhubung ke basis data.", + "externaldata-db-no-return-values": "Galat: Nilai pengembalian tidak dispesifikasi.", + "externaldata-db-invalid-query": "Kueri tidak sah." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ilo.json b/www/wiki/extensions/ExternalData/i18n/ilo.json new file mode 100644 index 00000000..04ea47d0 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ilo.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Lam-ang" + ] + }, + "getdata": "Agala ti datos", + "externaldata-desc": "Mangipalubos para iti panagala ti naestruktura a datos manipud kadagiti akin-ruar nga URL, dagiti database ken dagiti dadduma pay a taudan", + "externaldata-no-param-specified": "Biddut: Awan ti parametro ti \"$1\" a nainaganan.", + "externaldata-web-invalid-format": "Imbalido a pormat: \"$1\"", + "externaldata-ldap-unable-to-connect": "Di mabalin a maikonekta iti $1", + "externaldata-xml-error": "Biddut ti XML: $1 iti linia $2", + "externaldata-invalid-json": "Biddut: Imbalido a JSON.", + "externaldata-db-incomplete-information": "Biddut: Saan a kompleto a pakaammo para iti daytoy nga ID ti database.", + "externaldata-db-could-not-get-url": "Saan a makaala iti URL kalpasan ti $1 {{PLURAL:$1|panagipadas|panagipadpadas}}.", + "externaldata-db-unknown-type": "Biddut: Di ammo a kita ti database.", + "externaldata-db-could-not-connect": "Biddut: Saan a makaikonekta iti database.", + "externaldata-db-unknown-collection": "Biddut: Di ammo nga urnong ti MongoDB.", + "externaldata-db-no-return-values": "Biddut: Awan ti naisubli kadagiti pateg a nainaganan.", + "externaldata-db-invalid-query": "Imbalido a panagusisa." +} diff --git a/www/wiki/extensions/ExternalData/i18n/it.json b/www/wiki/extensions/ExternalData/i18n/it.json new file mode 100644 index 00000000..3c5bcd24 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/it.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Beta16", + "Pietrodn" + ] + }, + "getdata": "Ottieni dati", + "externaldata-desc": "Consente di recuperare dati strutturati da URL esterni, database o altre sorgenti", + "externaldata-no-param-specified": "Errore: nessun parametro \"$1\" specificato.", + "externaldata-web-invalid-format": "Formato non valido: \"$1\"", + "externaldata-ldap-unable-to-connect": "Impossibile connettersi a $1", + "externaldata-xml-error": "Errore XML: $1 alla linea $2", + "externaldata-invalid-json": "Errore: JSON non valido", + "externaldata-db-incomplete-information": "Errore: informazioni incomplete per questo server ID.", + "externaldata-db-could-not-get-url": "Impossibile raggiungere l'URL dopo $1 {{PLURAL:$1|tentativo|tentativi}}.", + "externaldata-db-unknown-type": "Errore: tipo di database sconosciuto.", + "externaldata-db-could-not-connect": "Errore: impossibile connettersi al database.", + "externaldata-db-unknown-collection": "Errore: collezione MongoDB sconosciuta.", + "externaldata-db-no-return-values": "Errore: non è stato specificato alcun valore di ritorno.", + "externaldata-db-invalid-query": "Query non valida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ja.json b/www/wiki/extensions/ExternalData/i18n/ja.json new file mode 100644 index 00000000..ab29011a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ja.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Fryed-peach", + "Schu", + "Shirayuki", + "青子守歌" + ] + }, + "getdata": "データ取得", + "externaldata-desc": "外部 URL やデータベース、その他のソースからデータを取得できるようにする", + "externaldata-no-param-specified": "エラー: パラメーター「$1」が指定されていません。", + "externaldata-web-invalid-format": "無効な書式:「$1」", + "externaldata-ldap-unable-to-connect": "$1 に接続できません。", + "externaldata-xml-error": "XML エラー: 行 $2 で $1", + "externaldata-invalid-json": "エラー: 無効な JSON です。", + "externaldata-db-incomplete-information": "エラー: このデータベース ID に対する情報が不十分です。", + "externaldata-db-could-not-get-url": "$1 回試行しましたが URL を取得できませんでした。", + "externaldata-db-unknown-type": "エラー: データベースの種類が不明です。", + "externaldata-db-could-not-connect": "エラー: データベースに接続できませんでした。", + "externaldata-db-unknown-collection": "エラー: 不明な MongoDB コレクションです。", + "externaldata-db-no-return-values": "エラー: 戻り値が指定されていません。", + "externaldata-db-invalid-query": "無効なクエリです。" +} diff --git a/www/wiki/extensions/ExternalData/i18n/ka.json b/www/wiki/extensions/ExternalData/i18n/ka.json new file mode 100644 index 00000000..4ad6b1b7 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ka.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "David1010" + ] + }, + "externaldata-db-invalid-query": "არასწორი მოთხონა." +} diff --git a/www/wiki/extensions/ExternalData/i18n/km.json b/www/wiki/extensions/ExternalData/i18n/km.json new file mode 100644 index 00000000..cdeabe25 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/km.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "វ័ណថារិទ្ធ" + ] + }, + "getdata": "យកទិន្នន័យ" +} diff --git a/www/wiki/extensions/ExternalData/i18n/kn.json b/www/wiki/extensions/ExternalData/i18n/kn.json new file mode 100644 index 00000000..449a4f3a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/kn.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "VASANTH S.N." + ] + }, + "getdata": "ಮಾಹಿತಿಯನ್ನು ಪಡೆ", + "externaldata-web-invalid-format": "ಅಸಿಂಧು ವಿನ್ಯಾಸ: \"$1\".", + "externaldata-ldap-unable-to-connect": "$1.ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ", + "externaldata-invalid-json": "ದೋಷ:ಅಸಮರ್ಪಕ JSON.", + "externaldata-db-incomplete-information": "ದೋಷ:ದತ್ತಾಂಶ ಐಡಿ ಬಗ್ಗೆ ಅಸಂಪೂರ್ಣ ಮಾಹಿತಿ.", + "externaldata-db-unknown-type": "ದೋಷ:ಆಜ್ಞಾತ ದತ್ತಸಂಚಯ ಮಾದರಿ.", + "externaldata-db-could-not-connect": "ದೋಷ:ದತ್ತಸಂಚಯವನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.", + "externaldata-db-invalid-query": "ಅಸಿಂಧು ಪ್ರಶ್ನೆ." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ko.json b/www/wiki/extensions/ExternalData/i18n/ko.json new file mode 100644 index 00000000..d4b71ca7 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ko.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Daisy2002", + "Priviet", + "Yjs5497", + "아라" + ] + }, + "getdata": "데이터 가져오기", + "externaldata-desc": "외부 URL, 데이터베이스 및 다른 출처에서 구조화된 데이터를 가져올 수 있게 하기", + "externaldata-no-param-specified": "오류: 지정된 \"$1\" 변수가 없습니다.", + "externaldata-web-invalid-format": "\"$1\" 상태가 잘못되었습니다.", + "externaldata-ldap-unable-to-connect": "$1에 연결할 수 없습니다.", + "externaldata-xml-error": "XML 오류: $2 줄에서 $1 오류 발생.", + "externaldata-invalid-json": "오류: 잘못된 JSON입니다.", + "externaldata-db-incomplete-information": "오류: 데이터베이스 ID 정보가 충분하지 않습니다.", + "externaldata-db-could-not-get-url": "$1 {{PLURAL:$1|번의 시도}}에도 URL을 가져올 수 없었습니다.", + "externaldata-db-unknown-type": "오류: 알 수 없는 데이터베이스 형식입니다.", + "externaldata-db-could-not-connect": "오류: 데이터베이스에 연결할 수 없습니다.", + "externaldata-db-unknown-collection": "오류: 알 수 없는 MongoDB 집합입니다.", + "externaldata-db-no-return-values": "오류: 지정된 반환 값이 없습니다.", + "externaldata-db-invalid-query": "유효하지 않은 쿼리" +} diff --git a/www/wiki/extensions/ExternalData/i18n/ksh.json b/www/wiki/extensions/ExternalData/i18n/ksh.json new file mode 100644 index 00000000..9c121056 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ksh.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Purodha" + ] + }, + "getdata": "Daate holle!", + "externaldata-desc": "Määt et müjjelich, Date en beshtemmpte Fomaate fun främbde <i lang=\"en\">URLs</i>, Daatebangke, un ander Quälle ze holle.", + "externaldata-no-param-specified": "Fähler: Dä Parramehter „$1“ es nit aanjejovve.", + "externaldata-web-invalid-format": "Dat Formaat es onjöltsch: „$1“", + "externaldata-ldap-unable-to-connect": "Kann nit noh $1 verbenge", + "externaldata-xml-error": "Fähler em XML, op Reih $2: $1", + "externaldata-invalid-json": "Fähler: Onjöltesch <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>.", + "externaldata-db-incomplete-information": "<span style=\"text-transform: uppercase\">Fähler:</span> De Enfomazjuhne vör di ẞööver-Kännong sin nit kumplätt.", + "externaldata-db-could-not-get-url": "Kunnt {{PLURAL:$1|noh eimohl Versöhke|och noh $1 Mohl Versöhke|ohne enne Versöhk}} nix vun däm <i lang=\"en\">URL</i> krijje.", + "externaldata-db-unknown-type": "<span style=\"text-transform: uppercase\">Fähler:</span> Di Zoot Datebangk es unbikannt.", + "externaldata-db-could-not-connect": "<span style=\"text-transform: uppercase\">Fähler:</span> Kunnt kein Verbendung noh dä Datebangk krijje.", + "externaldata-db-unknown-collection": "<span style=\"text-transform: uppercase\">Fähler:</span> Dat es en onbikannte <i lang\"en\">MongoDB</i>-Zosammeschtällong.", + "externaldata-db-no-return-values": "<span style=\"text-transform: uppercase\">Fähler:</span> Kein Wääte för Zerökzeävve aanjejovve.", + "externaldata-db-invalid-query": "Onjöltesch Frooch aan de Datebangk." +} diff --git a/www/wiki/extensions/ExternalData/i18n/lb.json b/www/wiki/extensions/ExternalData/i18n/lb.json new file mode 100644 index 00000000..a1bcc76c --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/lb.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Robby" + ] + }, + "getdata": "Donnéeë kréien", + "externaldata-desc": "Erlaabt et Donnéeën vun externen URLen, Datebanken an anere Quellen ze verschaffen", + "externaldata-no-param-specified": "Feeler: Keen \"$1\"-Parameter spezifizéiert.", + "externaldata-web-invalid-format": "Net valabele Format: \"$1\"", + "externaldata-ldap-unable-to-connect": "Onméiglech sech op $1 ze connectéieren", + "externaldata-xml-error": "XML Feeler: $1 an der Linn $2", + "externaldata-invalid-json": "Feeler:JSON net valabel.", + "externaldata-db-incomplete-information": "Feeler: Informatioun fir dës Server ID net komplett.", + "externaldata-db-could-not-get-url": "D'URL konnt no {{PLURAL:$1|enger Kéier|$1 Versich}} net opgemaach ginn.", + "externaldata-db-unknown-type": "Feeler: Onbekannten Datebank-Typ.", + "externaldata-db-could-not-connect": "Feeler: D'Verbindung mat der Datebank konnt net opgebaut ginn.", + "externaldata-db-unknown-collection": "Feeler:Onbekannte MongoDB Sammlung.", + "externaldata-db-no-return-values": "Feeler: Kee Retour-Wäert festgeluecht.", + "externaldata-db-invalid-query": "Net valabel Ufro." +} diff --git a/www/wiki/extensions/ExternalData/i18n/lt.json b/www/wiki/extensions/ExternalData/i18n/lt.json new file mode 100644 index 00000000..913db87c --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/lt.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Eitvys200" + ] + }, + "getdata": "Gauti duomenys", + "externaldata-no-param-specified": "Klaida\" Nenurodytas joks „$1“ parametras.", + "externaldata-web-invalid-format": "Negalimas formatas: „$1“.", + "externaldata-ldap-unable-to-connect": "Negalima prisijungti prie $1.", + "externaldata-xml-error": "XML klaida: $1, eilutėje $2.", + "externaldata-invalid-json": "Klaida: Negalimas JSON.", + "externaldata-db-could-not-get-url": "Nepavyko gauti URL po $1 {{PLURAL:$1|bandymo|bandymų}}.", + "externaldata-db-unknown-type": "Klaida: Nežinomas duomenų bazės tipas.", + "externaldata-db-could-not-connect": "Klaida: Nepavyko prisijungti prie duomenų bazės.", + "externaldata-db-unknown-collection": "Klaida: Nežinoma MongoDB kolekcija.", + "externaldata-db-no-return-values": "Klaida: Nenurodytos jokios gražinimo reikšmės.", + "externaldata-db-invalid-query": "Negalima užklausa." +} diff --git a/www/wiki/extensions/ExternalData/i18n/lv.json b/www/wiki/extensions/ExternalData/i18n/lv.json new file mode 100644 index 00000000..ebf66083 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/lv.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Papuass" + ] + }, + "getdata": "Saņemt datus" +} diff --git a/www/wiki/extensions/ExternalData/i18n/mk.json b/www/wiki/extensions/ExternalData/i18n/mk.json new file mode 100644 index 00000000..07f04e82 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/mk.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Bjankuloski06" + ] + }, + "getdata": "Земи податоци", + "externaldata-desc": "Овозможува добивање структурирани податоци од надворешни URL-адреси, бази на податоци и други извори", + "externaldata-no-param-specified": "Грешка: Го немате укажано параметарот „$1“.", + "externaldata-web-invalid-format": "Неважечки формат: „$1“", + "externaldata-ldap-unable-to-connect": "Не можам да се поврзам со $1", + "externaldata-xml-error": "XML грешка: $1 во ред $2", + "externaldata-invalid-json": "Грешка: Неважечки JSON", + "externaldata-db-incomplete-information": "Грешка: Нецелосни информации за овој опслужувачки ид. бр.", + "externaldata-db-could-not-get-url": "Не можев да ја добијам URL адресата по $1 {{PLURAL:$1|обид|обиди}}.", + "externaldata-db-unknown-type": "Грешка: Непознат тип на база на податоци.", + "externaldata-db-could-not-connect": "Грешка: Не можев да се поврзам со базата на податоци.", + "externaldata-db-unknown-collection": "Грешка: Непозната збирка од MongoDB.", + "externaldata-db-no-return-values": "Грешка: Нема назначено повратни вредности.", + "externaldata-db-invalid-query": "Грешно барање." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ms.json b/www/wiki/extensions/ExternalData/i18n/ms.json new file mode 100644 index 00000000..b40f6ae9 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ms.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Anakmalaysia" + ] + }, + "getdata": "Dapatkan data", + "externaldata-desc": "Membolehkan pengambilan data berstruktur dari URL luaran, pangkalan data atau sumber-sumber lain", + "externaldata-web-invalid-format": "Format tidak sah: \"$1\"", + "externaldata-ldap-unable-to-connect": "Tidak dapat bersambung dengan $1", + "externaldata-xml-error": "Ralat XML: $1 di baris $2", + "externaldata-db-incomplete-information": "Ralat: Maklumat tidak lengkap untuk ID pelayan ini.", + "externaldata-db-could-not-get-url": "URL tidak dapat diterima selepas $1 cubaan.", + "externaldata-db-unknown-type": "Ralat: Jenis pangkalan data tidak dikenali.", + "externaldata-db-could-not-connect": "Ralat: Tidak dapat bersambung dengan pangkalan data.", + "externaldata-db-unknown-collection": "Ralat: Koleksi MongoDB tidak dikenali.", + "externaldata-db-no-return-values": "Ralat: Tiada nilai pulangan yang ditentukan.", + "externaldata-db-invalid-query": "Pertanyaan tidak sah." +} diff --git a/www/wiki/extensions/ExternalData/i18n/myv.json b/www/wiki/extensions/ExternalData/i18n/myv.json new file mode 100644 index 00000000..7df6a260 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/myv.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Botuzhaleny-sodamo" + ] + }, + "getdata": "Дата мельга" +} diff --git a/www/wiki/extensions/ExternalData/i18n/nb.json b/www/wiki/extensions/ExternalData/i18n/nb.json new file mode 100644 index 00000000..62fc39d2 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/nb.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Harald Khan", + "Nghtwlkr", + "Njardarlogar", + "Danmichaelo", + "Jon Harald Søby" + ] + }, + "getdata": "Hent data", + "externaldata-desc": "Gir mulighet til å hente strukturerte data fra eksterne internettadresser, databaser og andre kilder", + "externaldata-no-param-specified": "Feil: Ingen parameter «$1» oppgitt.", + "externaldata-web-invalid-format": "Ugyldig format: «$1»", + "externaldata-ldap-unable-to-connect": "Klarte ikke å koble til $1", + "externaldata-xml-error": "XML-feil: $1 på linje $2", + "externaldata-invalid-json": "Feil: Ugyldig JSON.", + "externaldata-db-incomplete-information": "Feil: Ufullstendig informasjon for denne tjener-IDen.", + "externaldata-db-could-not-get-url": "Klarte ikke hente URL etter {{PLURAL:$1|ett forsøk|$1 forsøk}}.", + "externaldata-db-unknown-type": "Feil: Ukjent databasetype.", + "externaldata-db-could-not-connect": "Feil: Kunne ikke koble til database.", + "externaldata-db-unknown-collection": "Feil: Ukjent MongoDB-samling.", + "externaldata-db-no-return-values": "Feil: Ingen returverdi spesifisert.", + "externaldata-db-invalid-query": "Ugyldig spørring." +} diff --git a/www/wiki/extensions/ExternalData/i18n/nl.json b/www/wiki/extensions/ExternalData/i18n/nl.json new file mode 100644 index 00000000..9f5d9b82 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/nl.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Effeietsanders", + "SPQRobin", + "Siebrand" + ] + }, + "getdata": "Gegevens ophalen", + "externaldata-desc": "Maakt het mogelijk gegevens van externe URL's, database en andere externe bronnen op te halen", + "externaldata-no-param-specified": "Fout: er is geen parameter \"$1\" opgegeven.", + "externaldata-web-invalid-format": "Ongeldige indeling: \"$1\"", + "externaldata-ldap-unable-to-connect": "Het was niet mogelijk te verbinden met $1", + "externaldata-xml-error": "XML-fout: $1 op regel $2", + "externaldata-invalid-json": "Fout: ongeldige JSON", + "externaldata-db-incomplete-information": "Fout: onvolledige informatie voor dit servernummer.", + "externaldata-db-could-not-get-url": "Na $1 {{PLURAL:$1|poging|pogingen}} gaf de URL geen resultaat.", + "externaldata-db-unknown-type": "Fout: onbekend databasetype.", + "externaldata-db-could-not-connect": "Fout: het was niet mogelijk met de database te verbinden.", + "externaldata-db-unknown-collection": "Fout: onbekende MongoDB-verzameling.", + "externaldata-db-no-return-values": "Fout: er zijn geen return-waarden ingesteld.", + "externaldata-db-invalid-query": "Ongeldige zoekopdracht." +} diff --git a/www/wiki/extensions/ExternalData/i18n/nn.json b/www/wiki/extensions/ExternalData/i18n/nn.json new file mode 100644 index 00000000..a8552bcd --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/nn.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Gunnernett", + "Harald Khan", + "Njardarlogar" + ] + }, + "getdata": "Hent data", + "externaldata-desc": "Gjev høve til å henta strukturerte data frå eksterne URL-ar, databasar og andre kjelder", + "externaldata-ldap-unable-to-connect": "Kunne ikkje kopla til $1", + "externaldata-xml-error": "XML-feil: $1 på line $2", + "externaldata-db-incomplete-information": "Feil: Ufullstendig informasjon for denne tenar-ID-en.", + "externaldata-db-could-not-get-url": "Kunne ikkje henta URL etter {{PLURAL:$1|eitt forsøk|$1 forsøk}}.", + "externaldata-db-unknown-type": "Feil: Ukjend databasetype.", + "externaldata-db-could-not-connect": "Feil: Kunne ikkje kopla til databasen.", + "externaldata-db-no-return-values": "Feil: Ingen returverdiar oppgjevne.", + "externaldata-db-invalid-query": "Ugyldig spørjing." +} diff --git a/www/wiki/extensions/ExternalData/i18n/oc.json b/www/wiki/extensions/ExternalData/i18n/oc.json new file mode 100644 index 00000000..898d940d --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/oc.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Cedric31" + ] + }, + "getdata": "Obténer de donadas", + "externaldata-desc": "Permet de recuperar de donadas estructuradas a partir d'URL extèrnas, de basas de donadas e d'autras fonts", + "externaldata-ldap-unable-to-connect": "Impossible de se connectar a $1", + "externaldata-xml-error": "Error XML : $1 a la linha $2", + "externaldata-db-incomplete-information": "Error : Informacions incompletas per aqueste identificant de servidor.", + "externaldata-db-could-not-get-url": "Impossible d'obténer l'URL aprèp $1 {{PLURAL:$1|ensag|ensages}}.", + "externaldata-db-unknown-type": "ERROR: Tipe de basa de donadas desconegut.", + "externaldata-db-could-not-connect": "Error : Impossible de se connectar a la basa de donadas.", + "externaldata-db-no-return-values": "Error : Cap de valor de retorn es pas estada especificada.", + "externaldata-db-invalid-query": "Requèsta invalida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/or.json b/www/wiki/extensions/ExternalData/i18n/or.json new file mode 100644 index 00000000..0340fd61 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/or.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Jnanaranjan Sahu" + ] + }, + "getdata": "ତଥ୍ୟ ହାସଲ କରିବେ", + "externaldata-ldap-unable-to-connect": "$1ସହ ସଂଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ", + "externaldata-db-could-not-connect": "ଅସୁବିଧା : ଡାଟାବେସ ସହ ସଂଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ ।" +} diff --git a/www/wiki/extensions/ExternalData/i18n/pl.json b/www/wiki/extensions/ExternalData/i18n/pl.json new file mode 100644 index 00000000..44d87bb7 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/pl.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "BeginaFelicysym", + "Chrumps", + "Leinad", + "Sp5uhe" + ] + }, + "getdata": "Pobierz dane", + "externaldata-desc": "Umożliwia pobieranie strukturalnych danych z zewnętrznych adresów URL, baz danych i innych źródeł", + "externaldata-no-param-specified": "Błąd: Nie podano parametru „$1”.", + "externaldata-web-invalid-format": "Nieprawidłowy format: \"$1\"", + "externaldata-ldap-unable-to-connect": "Nie można połączyć się z $1", + "externaldata-xml-error": "Błąd XML – $1 w wierszu $2", + "externaldata-invalid-json": "Błąd: Nieprawidłowy JSON", + "externaldata-db-incomplete-information": "Błąd – niepełne informacje o tym identyfikatorze serwera.", + "externaldata-db-could-not-get-url": "Nie można uzyskać adresu URL po $1 {{PLURAL:$1|próbie|próbach}}.", + "externaldata-db-unknown-type": "Błąd: Nieznany typ bazy danych.", + "externaldata-db-could-not-connect": "Błąd: Nie można połączyć się z bazą danych.", + "externaldata-db-unknown-collection": "Błąd: Nieznany zbiór MongoDB.", + "externaldata-db-no-return-values": "Błąd – nie określono zwracanej wartości.", + "externaldata-db-invalid-query": "Nieprawidłowe zapytanie." +} diff --git a/www/wiki/extensions/ExternalData/i18n/pms.json b/www/wiki/extensions/ExternalData/i18n/pms.json new file mode 100644 index 00000000..19af566e --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/pms.json @@ -0,0 +1,20 @@ +{ + "@metadata": { + "authors": [ + "Borichèt", + "Dragonòt" + ] + }, + "getdata": "Oten dij dat", + "externaldata-desc": "A përmët d'arcuperé dat struturà da adrësse dl'aragnà esterne, base ëd dàit e d'àutre sorgiss", + "externaldata-web-invalid-format": "Formà pa bon: \"$1\"", + "externaldata-ldap-unable-to-connect": "A peul pa coleghesse a $1", + "externaldata-xml-error": "Eror XML: $1 a la linia $2", + "externaldata-db-incomplete-information": "Eror: Anformassion pa completa për sto server ID-sì.", + "externaldata-db-could-not-get-url": "A peul pa oten-e l'URL d'apress ëd $1 {{PLURAL:$1|preuva|preuve}}.", + "externaldata-db-unknown-type": "Eror: Sòrt ëd database pa conossùa", + "externaldata-db-could-not-connect": "Eror: a peul pa coleghesse al database.", + "externaldata-db-unknown-collection": "Eoro: Colession MongoDB pa conossùa.", + "externaldata-db-no-return-values": "Eror: Pa gnun valor d'artorn spessifià.", + "externaldata-db-invalid-query": "Ciamà pa bon-a." +} diff --git a/www/wiki/extensions/ExternalData/i18n/pt-br.json b/www/wiki/extensions/ExternalData/i18n/pt-br.json new file mode 100644 index 00000000..ad64b486 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/pt-br.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Eduardo.mps", + "Giro720", + "Jaideraf" + ] + }, + "getdata": "Obter dados", + "externaldata-desc": "Permite a obtenção de dados em CSV, JSON e XML a partir de URLs externos, banco de dados e outras fontes", + "externaldata-no-param-specified": "Erro: nenhum parâmetro \"$1\" especificado.", + "externaldata-web-invalid-format": "Formato inválido: \"$1\"", + "externaldata-ldap-unable-to-connect": "Não foi possível conectar-se a $1", + "externaldata-xml-error": "Erro no XML: $1 na linha $2", + "externaldata-invalid-json": "Erro: JSON inválido.", + "externaldata-db-incomplete-information": "Erro: informação incompleta para o ID deste servidor</P>", + "externaldata-db-could-not-get-url": "Não foi possível obter o URL após $1 {{PLURAL:$1|tentativa|tentativas}}.", + "externaldata-db-unknown-type": "Erro: tipo de base de dados desconhecido.", + "externaldata-db-could-not-connect": "Erro: não foi possível conectar-se a base de dados.", + "externaldata-db-unknown-collection": "Erro: coleção do MongoDB desconhecida.", + "externaldata-db-no-return-values": "Erro: nenhum valor de retorno especificado.", + "externaldata-db-invalid-query": "Consulta inválida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/pt.json b/www/wiki/extensions/ExternalData/i18n/pt.json new file mode 100644 index 00000000..c69e0275 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/pt.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Giro720", + "Hamilton Abreu", + "Waldir", + "Vitorvicentevalente" + ] + }, + "getdata": "Obter dados", + "externaldata-desc": "Permite a importação de dados estruturados a partir de endereços URL, bases de dados e outras fontes externas", + "externaldata-no-param-specified": "Erro: Nenhum parâmetro \"$1\" especificado.", + "externaldata-web-invalid-format": "Formato inválido: \"$1\"", + "externaldata-ldap-unable-to-connect": "Não foi possível estabelecer ligação a $1", + "externaldata-xml-error": "Erro XML: $1 na linha $2", + "externaldata-invalid-json": "Erro: Código JSON inválido.", + "externaldata-db-incomplete-information": "Erro: Informação incompleta para este identificador de servidor.", + "externaldata-db-could-not-get-url": "Não foi possível importar o URL após {{PLURAL:$1|uma tentativa|$1 tentativas}}.", + "externaldata-db-unknown-type": "Erro: Tipo de base de dados desconhecido.", + "externaldata-db-could-not-connect": "Erro: Não foi possível estabelecer ligação à base de dados.", + "externaldata-db-unknown-collection": "Erro: Coleção desconhecida no MongoDB.", + "externaldata-db-no-return-values": "Erro: Não foram especificados valores de retorno.", + "externaldata-db-invalid-query": "Consulta inválida." +} diff --git a/www/wiki/extensions/ExternalData/i18n/qqq.json b/www/wiki/extensions/ExternalData/i18n/qqq.json new file mode 100644 index 00000000..46fddcd5 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/qqq.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Dead3y3", + "Fryed-peach", + "Shirayuki", + "Umherirrender" + ] + }, + "getdata": "{{doc-special|GetData}}", + "externaldata-desc": "{{desc|name=External Data|url=https://www.mediawiki.org/wiki/Extension:External_Data}}", + "externaldata-no-param-specified": "The error message if a parameter to some parser function is not set. Parameters:\n* $1 - parameter name. any one of the following: <code>url</code>, <code>data</code>, <code>filter</code>, <code>domain</code>, <code>db</code>, <code>from</code>", + "externaldata-web-invalid-format": "The error message if #get_web_data is called with an invalid format value.\n\nParameters:\n* $1 - invalid file format. Valid formats are: \"xml\", \"xml with xpath\", \"csv\", \"csv with header\", \"json\", and \"gff\"", + "externaldata-ldap-unable-to-connect": "The error message if #get_ldap_data can't connect to the LDAP server.\n\nParameters:\n* $1 - the LDAP server name", + "externaldata-xml-error": "The error message if #get_web_data can't parse an XML file. Parameters:\n* $1 - error message which are returned by PHP's <code>xml_error_string()</code>\n* $2 - line number", + "externaldata-invalid-json": "The error message if the URL being accessed does not contain valid JSON", + "externaldata-db-incomplete-information": "Used as error message.\n\nDatabase server, database type, database directory, database username and/or database password are not specified.", + "externaldata-db-could-not-get-url": "Parameters:\n* $1 - number of HTTP tries", + "externaldata-db-unknown-type": "Used as error message when creating a database object with using the specified information.", + "externaldata-db-could-not-connect": "Used as error message when connecting to the database system.", + "externaldata-db-unknown-collection": "The error message if #get_db_data can't find the specified \"collection\" when connecting to MongoDB.", + "externaldata-db-no-return-values": "Used as error message, if the number of the specified columns is zero.\n\nIf successful, the system returns values in the specified columns.", + "externaldata-db-invalid-query": "Used as error message, if the query has been failed." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ro.json b/www/wiki/extensions/ExternalData/i18n/ro.json new file mode 100644 index 00000000..eeb12c58 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ro.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Firilacroco", + "KlaudiuMihaila", + "Stelistcristi" + ] + }, + "getdata": "Obține date", + "externaldata-desc": "Permite obținerea datelor în format CSV, JSON și XML din atât adrese URL externe, cât și pagini wiki locale", + "externaldata-web-invalid-format": "Fomat invalid: „$1”", + "externaldata-ldap-unable-to-connect": "Nu se poate conecta la $1", + "externaldata-xml-error": "Eroare XML: $1 la linia $2", + "externaldata-db-unknown-type": "Eroare: Tipul bazei de date necunoscut.", + "externaldata-db-could-not-connect": "Eroare: Nu s-a putut conecta la baza de date.", + "externaldata-db-invalid-query": "Interogare invalidă." +} diff --git a/www/wiki/extensions/ExternalData/i18n/roa-tara.json b/www/wiki/extensions/ExternalData/i18n/roa-tara.json new file mode 100644 index 00000000..eb1a37e8 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/roa-tara.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Joetaras" + ] + }, + "getdata": "Pigghie le date", + "externaldata-desc": "Permette de repigghià data strutturate da URL fore a Uicchipèdie, database e otre sorgende", + "externaldata-no-param-specified": "Errore: Nisciune parametre \"$1\" specificate.", + "externaldata-web-invalid-format": "Formate invalide: \"$1\"", + "externaldata-ldap-unable-to-connect": "Indisponibbile a collegarse a $1", + "externaldata-xml-error": "Errore XML: $1 sus a linèe $2", + "externaldata-invalid-json": "Errore: JSON invalide.", + "externaldata-db-incomplete-information": "Errore: 'Mbormazione ingomblete pe stu ID d'u database.", + "externaldata-db-could-not-get-url": "Non ge pozze pigghià 'a URL apprisse $1 {{PLURAL:$1|prove}}.", + "externaldata-db-unknown-type": "Errore: Tipe de database scanusciute.", + "externaldata-db-could-not-connect": "Errore: Non ge me pozze collegà a 'u database.", + "externaldata-db-unknown-collection": "Errore: Collezzione scanusciute MongoDB.", + "externaldata-db-no-return-values": "Errore: Nisciune valore de retorne specificate.", + "externaldata-db-invalid-query": "Inderrogazione invalide." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ru.json b/www/wiki/extensions/ExternalData/i18n/ru.json new file mode 100644 index 00000000..698a22dd --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ru.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Ferrer", + "Kaganer", + "Okras", + "Александр Сигачёв" + ] + }, + "getdata": "Получить данные", + "externaldata-desc": "Позволяет получать структурированные данные с внешних адресов, баз данных и других источников", + "externaldata-no-param-specified": "Ошибка: Не указан параметр «$1».", + "externaldata-web-invalid-format": "Недопустимый формат: \"$1\"", + "externaldata-ldap-unable-to-connect": "Не удаётся подключиться к $1", + "externaldata-xml-error": "Ошибка XML. $1 в строке $2", + "externaldata-invalid-json": "Ошибка: Недопустимый JSON", + "externaldata-db-incomplete-information": "ОШИБКА. Неполная информация для этого ID сервера.", + "externaldata-db-could-not-get-url": "Не удалось получить URL после $1 {{PLURAL:$1|попытки|попыток}}.", + "externaldata-db-unknown-type": "ОШИБКА. Неизвестный тип базы данных.", + "externaldata-db-could-not-connect": "ОШИБКА. Не удаётся подключиться к базе данных.", + "externaldata-db-unknown-collection": "Ошибка: Неизвестная коллекция MongoDB.", + "externaldata-db-no-return-values": "ОШИБКА. Не указаны возвращаемые значение.", + "externaldata-db-invalid-query": "Ошибочный запрос." +} diff --git a/www/wiki/extensions/ExternalData/i18n/sah.json b/www/wiki/extensions/ExternalData/i18n/sah.json new file mode 100644 index 00000000..1eb13ea6 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sah.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "HalanTul" + ] + }, + "getdata": "Дааннайдары ыларга" +} diff --git a/www/wiki/extensions/ExternalData/i18n/sco.json b/www/wiki/extensions/ExternalData/i18n/sco.json new file mode 100644 index 00000000..34ca143a --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sco.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "getdata": "Get data", + "externaldata-desc": "Allaes for retrievin structurt data frae freemit URLs, databases an ither soorces", + "externaldata-no-param-specified": "Error: No \"$1\" parameter specified.", + "externaldata-web-invalid-format": "Invalid format: \"$1\".", + "externaldata-ldap-unable-to-connect": "Unable tae connect tae $1.", + "externaldata-xml-error": "XML error: $1 at line $2.", + "externaldata-invalid-json": "Error: Invalid JSON.", + "externaldata-db-incomplete-information": "Error: Incomplete information for this database ID.", + "externaldata-db-could-not-get-url": "Couldna get URL efter $1 {{PLURAL:$1|try|tries}}.", + "externaldata-db-unknown-type": "Error: Unkent database teep.", + "externaldata-db-could-not-connect": "Error: Couldna connect tae database.", + "externaldata-db-unknown-collection": "Error: Unkent MongoDB collection.", + "externaldata-db-no-return-values": "Error: No return values specified.", + "externaldata-db-invalid-query": "Invalid query." +} diff --git a/www/wiki/extensions/ExternalData/i18n/si.json b/www/wiki/extensions/ExternalData/i18n/si.json new file mode 100644 index 00000000..939e7a21 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/si.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "පසිඳු කාවින්ද" + ] + }, + "getdata": "දත්ත ලබා ගන්න", + "externaldata-web-invalid-format": "වලංගු නොවන ආකෘතිය: \"$1\"", + "externaldata-ldap-unable-to-connect": "$1 වෙත සම්බන්ධ විය නොහැක", + "externaldata-xml-error": "XML දෝෂය: $1 පේළිය $2", + "externaldata-db-unknown-type": "දෝෂය: නොදන්නා දත්ත සංචිත වර්ගය.", + "externaldata-db-could-not-connect": "දෝෂය: දත්ත සංචිතය වෙත සම්බන්ධ විය නොහැක.", + "externaldata-db-invalid-query": "වලංගු නොවන ප්රශ්නය." +} diff --git a/www/wiki/extensions/ExternalData/i18n/sk.json b/www/wiki/extensions/ExternalData/i18n/sk.json new file mode 100644 index 00000000..68706fde --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sk.json @@ -0,0 +1,17 @@ +{ + "@metadata": { + "authors": [ + "Helix84" + ] + }, + "getdata": "Získať dáta", + "externaldata-desc": "Umožňuje získavanie štrukturovaných údajov z externých URL, databáz a iných zdrojov", + "externaldata-ldap-unable-to-connect": "Nepodarilo sa pripojiť k $1", + "externaldata-xml-error": "Chyba XML: $1 na riadku $2", + "externaldata-db-incomplete-information": "Chyba: Nekompletné informácie s týmto ID servera.", + "externaldata-db-could-not-get-url": "Nepodarilo sa získať URL po $1 {{PLURAL:$1|pokuse|pokusoch}}.", + "externaldata-db-unknown-type": "Chyba: Neznámy typ databázy.", + "externaldata-db-could-not-connect": "Chyba: Nepodarilo sa pripojiť k databáze.", + "externaldata-db-no-return-values": "Chyba: Neboli zadané žiadne návratové hodnoty.", + "externaldata-db-invalid-query": "Neplatná požiadavka." +} diff --git a/www/wiki/extensions/ExternalData/i18n/sr-ec.json b/www/wiki/extensions/ExternalData/i18n/sr-ec.json new file mode 100644 index 00000000..9ba567e2 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sr-ec.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Charmed94", + "Milicevic01", + "Михајло Анђелковић" + ] + }, + "getdata": "Преузми податке", + "externaldata-desc": "Омогућава преузимање података из спољашњих адреса, бази података и других извора", + "externaldata-ldap-unable-to-connect": "Повезивање на $1 није успело", + "externaldata-xml-error": "XML грешка: $1 по линији $2", + "externaldata-db-incomplete-information": "Грешка: Непотпуни подаци за овај ID сервера.", + "externaldata-db-could-not-get-url": "Преузимање адресе после $1 {{PLURAL:$1|покушаја}} није успело.", + "externaldata-db-unknown-type": "Грешка: Непозната врста базе података.", + "externaldata-db-could-not-connect": "Грешка: Повезивање с базом података није успело.", + "externaldata-db-no-return-values": "Грешка: Повратне вредности нису одређене.", + "externaldata-db-invalid-query": "Неисправан упит." +} diff --git a/www/wiki/extensions/ExternalData/i18n/sr-el.json b/www/wiki/extensions/ExternalData/i18n/sr-el.json new file mode 100644 index 00000000..9f3123f5 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sr-el.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "Michaello", + "Milicevic01" + ] + }, + "getdata": "Preuzmi podatke", + "externaldata-desc": "Omogućava preuzimanje podataka iz spoljašnjih adresa, bazi podataka i drugih izvora", + "externaldata-ldap-unable-to-connect": "Povezivanje na $1 nije uspelo", + "externaldata-xml-error": "XML greška: $1 po liniji $2", + "externaldata-db-incomplete-information": "Greška: Nepotpuni podaci za ovaj ID servera.", + "externaldata-db-could-not-get-url": "Preuzimanje adrese posle $1 {{PLURAL:$1|pokušaja}} nije uspelo.", + "externaldata-db-unknown-type": "Greška: Nepoznata vrsta baze podataka.", + "externaldata-db-could-not-connect": "Greška: Povezivanje s bazom podataka nije uspelo.", + "externaldata-db-no-return-values": "Greška: Povratne vrednosti nisu određene.", + "externaldata-db-invalid-query": "Neispravan upit." +} diff --git a/www/wiki/extensions/ExternalData/i18n/sv.json b/www/wiki/extensions/ExternalData/i18n/sv.json new file mode 100644 index 00000000..b0fc14e8 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/sv.json @@ -0,0 +1,27 @@ +{ + "@metadata": { + "authors": [ + "Ainali", + "Boivie", + "Lokal Profil", + "Najami", + "Per", + "Tobulos1", + "WikiPhoenix" + ] + }, + "getdata": "Hämta data", + "externaldata-desc": "Ger möjlighet att hämta strukturerad data från externa URL:er, databaser och andra källor", + "externaldata-no-param-specified": "Fel: Ingen \"$1\" parameter specificerad.", + "externaldata-web-invalid-format": "Ogiltigt format: \"$1\"", + "externaldata-ldap-unable-to-connect": "Kunde inte koppla till $1", + "externaldata-xml-error": "XML-fel: $1 på rad $2", + "externaldata-invalid-json": "Fel: Ogiltig JSON.", + "externaldata-db-incomplete-information": "Fel: Informationen för server-ID inte komplett.", + "externaldata-db-could-not-get-url": "Kunde inte hämta URL på $1 {{PLURAL:$1|försök|försök}}.", + "externaldata-db-unknown-type": "Fel: Okänd databastyp.", + "externaldata-db-could-not-connect": "Fel: Kunde inte koppla till databasen.", + "externaldata-db-unknown-collection": "Fel: Okänd MongoDB samling.", + "externaldata-db-no-return-values": "Fel: Inga returvärden specificerade.", + "externaldata-db-invalid-query": "Ogiltig fråga." +} diff --git a/www/wiki/extensions/ExternalData/i18n/ta.json b/www/wiki/extensions/ExternalData/i18n/ta.json new file mode 100644 index 00000000..6a673b38 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/ta.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Karthi.dr", + "மதனாஹரன்" + ] + }, + "getdata": "தகவலைப் பெறு", + "externaldata-db-unknown-type": "தவறு: அறியாத தரவுத் தள வகை.", + "externaldata-db-could-not-connect": "தவறு: தரவுத் தளத்துடன் தொடர்பு கொள்ள முடியவில்லை.", + "externaldata-db-invalid-query": "செல்லாத வினவல்." +} diff --git a/www/wiki/extensions/ExternalData/i18n/te.json b/www/wiki/extensions/ExternalData/i18n/te.json new file mode 100644 index 00000000..5734bee6 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/te.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Chaduvari", + "Kiranmayee" + ] + }, + "getdata": "విషయములు తీసుకునిరా", + "externaldata-ldap-unable-to-connect": "$1 కు కనెక్టు కాలేకున్నాం" +} diff --git a/www/wiki/extensions/ExternalData/i18n/tl.json b/www/wiki/extensions/ExternalData/i18n/tl.json new file mode 100644 index 00000000..4904d02d --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/tl.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "AnakngAraw", + "Sky Harbor" + ] + }, + "getdata": "Kunin ang dato", + "externaldata-desc": "Nagpapahintulot sa pagkuha ng nakabalangkas na datos mula sa panlabas na mga URL, mga kalipunan ng datos at sa ibang mga pinagmulan", + "externaldata-web-invalid-format": "Hindi katanggap-tanggap na anyo: \"$1\"", + "externaldata-ldap-unable-to-connect": "Hindi makakunekta sa $1", + "externaldata-xml-error": "Kamalian sa XML: $1 sa linyang $2", + "externaldata-db-incomplete-information": "Kamalian: Hindi-kumpletong impormasyon para sa itong ID ng serbidor.", + "externaldata-db-could-not-get-url": "Hindi makuha ang URL pagkatapos ng $1 {{PLURAL:$1|pagsubok|pagsubok}}", + "externaldata-db-unknown-type": "Kamalian: Hindi-kilalang uri ng kalipunan ng datos.", + "externaldata-db-could-not-connect": "Kamalian: Hindi makakunekta sa talaan ng dato.", + "externaldata-db-no-return-values": "Kamalian: Walang tinukoy na halagang pabalik.", + "externaldata-db-invalid-query": "Hindi tanggap na katanungan." +} diff --git a/www/wiki/extensions/ExternalData/i18n/tr.json b/www/wiki/extensions/ExternalData/i18n/tr.json new file mode 100644 index 00000000..78fdb552 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/tr.json @@ -0,0 +1,13 @@ +{ + "@metadata": { + "authors": [ + "Karduelis", + "Vito Genovese" + ] + }, + "getdata": "Veri al", + "externaldata-db-unknown-type": "Hata: Bilinmeyen veritabanı türü.", + "externaldata-db-could-not-connect": "Hata: Veritabanına bağlanılamıyor.", + "externaldata-db-no-return-values": "Hata: Dönüş değeri belirtilmedi.", + "externaldata-db-invalid-query": "Geçersiz sorgu." +} diff --git a/www/wiki/extensions/ExternalData/i18n/uk.json b/www/wiki/extensions/ExternalData/i18n/uk.json new file mode 100644 index 00000000..8c5fbdab --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/uk.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Andriykopanytsia", + "Base", + "Ата", + "Тест" + ] + }, + "getdata": "Отримати дані", + "externaldata-desc": "Дозволяє отримувати структуровані дані із зовнішніх URL-адрес, баз даних та інших джерел", + "externaldata-no-param-specified": "Помилка: параметр \"$1\" - не вказаний.", + "externaldata-web-invalid-format": "Неприпустимий формат: \"$1\"", + "externaldata-ldap-unable-to-connect": "Не вдається підключитися до $1", + "externaldata-xml-error": "Помилка XML: $1 в рядку $2", + "externaldata-invalid-json": "Помилка: Неправильний JSON", + "externaldata-db-incomplete-information": "Помилка: Неповна інформація для цього ID сервера.", + "externaldata-db-could-not-get-url": "Не вдалося отримати URL після $1 {{PLURAL:$1|1=спроби|спроб}}.", + "externaldata-db-unknown-type": "Помилка: Невідомий тип бази даних.", + "externaldata-db-could-not-connect": "Помилка: не вдалося підключитися до бази даних.", + "externaldata-db-unknown-collection": "Помилка: Невідома колекція MongoDB.", + "externaldata-db-no-return-values": "Помилка: Не вказано зворотних значень.", + "externaldata-db-invalid-query": "Неприпустимий запит." +} diff --git a/www/wiki/extensions/ExternalData/i18n/vep.json b/www/wiki/extensions/ExternalData/i18n/vep.json new file mode 100644 index 00000000..abad0f38 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/vep.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Игорь Бродский" + ] + }, + "getdata": "Sada andmused" +} diff --git a/www/wiki/extensions/ExternalData/i18n/vi.json b/www/wiki/extensions/ExternalData/i18n/vi.json new file mode 100644 index 00000000..22c110e6 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/vi.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Minh Nguyen", + "Vinhtantran" + ] + }, + "getdata": "Lấy dữ liệu", + "externaldata-desc": "Cho phép truy xuất dữ liệu từ các địa chỉ URL bên ngoài, cơ sở dữ liệu, và nguồn khác", + "externaldata-xml-error": "Lỗi XML ở dòng $2: $1" +} diff --git a/www/wiki/extensions/ExternalData/i18n/yi.json b/www/wiki/extensions/ExternalData/i18n/yi.json new file mode 100644 index 00000000..67d767ad --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/yi.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "פוילישער" + ] + }, + "getdata": "באַקומען דאַטן" +} diff --git a/www/wiki/extensions/ExternalData/i18n/zh-hans.json b/www/wiki/extensions/ExternalData/i18n/zh-hans.json new file mode 100644 index 00000000..d42ea52d --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/zh-hans.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Hydra", + "Liuxinyu970226", + "Yfdyh000" + ] + }, + "getdata": "获取数据", + "externaldata-desc": "允许从外部URL,数据库及其他来源接收结构化数据", + "externaldata-no-param-specified": "错误:未指定“$1”参数。", + "externaldata-web-invalid-format": "无效的格式:“$1”", + "externaldata-ldap-unable-to-connect": "无法连接到 $1", + "externaldata-xml-error": "XML错误:$1 在行 $2", + "externaldata-invalid-json": "错误:无效的JSON", + "externaldata-db-incomplete-information": "错误:此服务器ID信息不完整。", + "externaldata-db-could-not-get-url": "$1次尝试后仍无法获取URL。", + "externaldata-db-unknown-type": "错误:未知的数据库类型。", + "externaldata-db-could-not-connect": "错误:无法连接到数据库。", + "externaldata-db-unknown-collection": "错误:未知的MongoDB集合。", + "externaldata-db-no-return-values": "错误:没有返回指定的值。", + "externaldata-db-invalid-query": "无效的查询。" +} diff --git a/www/wiki/extensions/ExternalData/i18n/zh-hant.json b/www/wiki/extensions/ExternalData/i18n/zh-hant.json new file mode 100644 index 00000000..6fcebe64 --- /dev/null +++ b/www/wiki/extensions/ExternalData/i18n/zh-hant.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "LNDDYL", + "Kly" + ] + }, + "getdata": "取得資料", + "externaldata-desc": "允許外部 URL、資料庫,以及其它來源檢索結構化資料", + "externaldata-no-param-specified": "錯誤:未指定「$1」參數。", + "externaldata-web-invalid-format": "無效格式:「$1」。", + "externaldata-ldap-unable-to-connect": "無法連結至 $1。", + "externaldata-xml-error": "XML 錯誤:在第 $2 行出現 $1。", + "externaldata-invalid-json": "錯誤:無效的 JSON。", + "externaldata-db-incomplete-information": "錯誤:此資料庫的 ID 訊息不完整。", + "externaldata-db-could-not-get-url": "在 $1 {{PLURAL:$1| 次嘗試| 次嘗試}}後仍無法取得 URL。", + "externaldata-db-unknown-type": "錯誤:無效資料庫類型。", + "externaldata-db-could-not-connect": "錯誤:無法連結至資料庫。", + "externaldata-db-unknown-collection": "錯誤:未知的 MongoDB 集合。", + "externaldata-db-no-return-values": "錯誤:沒有回傳指定的值。", + "externaldata-db-invalid-query": "無效的查詢。" +} diff --git a/www/wiki/extensions/ExternalData/includes/ED_GetData.php b/www/wiki/extensions/ExternalData/includes/ED_GetData.php new file mode 100644 index 00000000..ab084426 --- /dev/null +++ b/www/wiki/extensions/ExternalData/includes/ED_GetData.php @@ -0,0 +1,75 @@ +<?php +/** + * A special page for retrieving selected rows of any wiki page that contains + * data in CSV format + */ + +class EDGetData extends SpecialPage { + + /** + * Constructor + */ + function __construct() { + parent::__construct( 'GetData' ); + } + + function execute( $query ) { + global $wgRequest, $wgOut; + + $wgOut->disable(); + $this->setHeaders(); + $page_name = $query; + $title = Title::newFromText( $page_name ); + if ( is_null( $title ) ) { + return; + } + if ( ! $title->userCan( 'read' ) ) { + return; + } + $wikiPage = WikiPage::factory( $title ); + $page_text = ContentHandler::getContentText( $wikiPage->getContent() ); + // Remove <noinclude> sections and <includeonly> tags from text + $page_text = StringUtils::delimiterReplace( '<noinclude>', '</noinclude>', '', $page_text ); + $page_text = strtr( $page_text, array( '<includeonly>' => '', '</includeonly>' => '' ) ); + $orig_lines = explode( "\n", $page_text ); + // ignore lines that are either blank or start with a semicolon + $page_lines = array(); + foreach ( $orig_lines as $i => $line ) { + if ( $line != '' && $line[0] != ';' ) { + $page_lines[] = $line; + } + } + $headers = EDUtils::getValuesFromCSVLine( $page_lines[0] ); + $queried_headers = array(); + foreach ( $wgRequest->getValues() as $key => $value ) { + foreach ( $headers as $header_index => $header_value ) { + $header_value = str_replace( ' ', '_', $header_value ); + if ( $key == $header_value ) { + $queried_headers[$header_index] = $value; + } + } + } + // include header in output + $text = $page_lines[0]; + foreach ( $page_lines as $i => $line ) { + if ( $i == 0 ) continue; + $row_values = EDUtils::getValuesFromCSVLine( $line ); + $found_match = true; + foreach ( $queried_headers as $i => $query_value ) { + $single_value = str_replace( ' ', '_', $row_values[$i] ); + if ( $single_value != $query_value ) { + $found_match = false; + } + } + if ( $found_match ) { + if ( $text != '' ) $text .= "\n"; + $text .= $line; + } + } + print $text; + } + + protected function getGroupName() { + return 'pagetools'; + } +} diff --git a/www/wiki/extensions/ExternalData/includes/ED_ParserFunctions.php b/www/wiki/extensions/ExternalData/includes/ED_ParserFunctions.php new file mode 100644 index 00000000..8edc7e17 --- /dev/null +++ b/www/wiki/extensions/ExternalData/includes/ED_ParserFunctions.php @@ -0,0 +1,663 @@ +<?php +/** + * Class for handling the parser functions for External Data + */ + +class EDParserFunctions { + + /** + * A helper function, called by doGetWebData(). + */ + static public function setGlobalValuesArray( $external_values, $filters, $mappings ) { + global $edgValues; + + foreach ( $filters as $filter_var => $filter_value ) { + // Find the entry of $external_values that matches + // the filter variable; if none exists, just ignore + // the filter. + if ( array_key_exists( $filter_var, $external_values ) ) { + if ( is_array( $external_values[$filter_var] ) ) { + $column_values = $external_values[$filter_var]; + foreach ( $column_values as $i => $single_value ) { + // if a value doesn't match + // the filter value, remove + // the value from this row for + // all columns + if ( trim( $single_value ) != trim( $filter_value ) ) { + foreach ( $external_values as $external_var => $external_value ) { + unset( $external_values[$external_var][$i] ); + } + } + } + } else { + // if we have only one row of values, + // and the filter doesn't match, just + // keep the results array blank and + // return + if ( $external_values[$filter_var] != $filter_value ) { + return; + } + } + } + } + // for each external variable name specified in the function + // call, get its value or values (if any exist), and attach it + // or them to the local variable name + foreach ( $mappings as $local_var => $external_var ) { + if ( array_key_exists( $external_var, $external_values ) ) { + if ( is_array( $external_values[$external_var] ) ) { + // array_values() restores regular + // 1, 2, 3 indexes to array, after unset() + // in filtering may have removed some + $edgValues[$local_var] = array_values( $external_values[$external_var] ); + } else { + $edgValues[$local_var][] = $external_values[$external_var]; + } + } + } + } + + /** + * Render the #get_web_data parser function. + */ + static function doGetWebData( &$parser ) { + global $edgCurPageName, $edgValues, $edgCacheExpireTime; + + // If we're handling multiple pages, reset $edgValues + // when we move from one page to another. + $cur_page_name = $parser->getTitle()->getText(); + if ( ! isset( $edgCurPageName ) || $edgCurPageName != $cur_page_name ) { + $edgValues = array(); + $edgCurPageName = $cur_page_name; + } + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + if ( array_key_exists( 'url', $args ) ) { + $url = $args['url']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'url')->parse() ); + } + $url = str_replace( ' ', '%20', $url ); // do some minor URL-encoding + // if the URL isn't allowed (based on a whitelist), exit + if ( ! EDUtils::isURLAllowed( $url ) ) { + return EDUtils::formatErrorMessage( "URL is not allowed" ); + } + + if ( array_key_exists( 'format', $args ) ) { + $format = strtolower( $args['format'] ); + } else { + $format = ''; + } + if ( $format == 'xml' ) { + if ( array_key_exists( 'use xpath', $args ) ) { + // Somewhat of a hack - store the fact that + // we're using XPath within the format, even + // though the format is still XML. + $format = 'xml with xpath'; + } + } elseif ( $format == 'csv' || $format == 'csv with header' ) { + if ( array_key_exists( 'delimiter', $args ) ) { + $delimiter = $args['delimiter']; + // Hopefully this solution isn't "too clever". + $format = array( $format, $args['delimiter'] ); + } + } + + if ( array_key_exists( 'data', $args ) ) { + // parse the 'data' arg into mappings + if ( $format == 'xml with xpath' ) { + $mappings = EDUtils::paramToArray( $args['data'], false, false ); + } else { + $mappings = EDUtils::paramToArray( $args['data'], false, true ); + } + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'data')->parse() ); + } + + if ( array_key_exists( 'cache seconds', $args) ) { + // set cache expire time + $cacheExpireTime = $args['cache seconds']; + } else { + $cacheExpireTime = $edgCacheExpireTime; + } + + if ( array_key_exists( 'json offset', $args) ) { + $prefixLength = $args['json offset']; + } else { + $prefixLength = 0; + } + + $postData = array_key_exists( 'post data', $args ) ? $args['post data'] : ''; + $external_values = EDUtils::getDataFromURL( $url, $format, $mappings, $postData, $cacheExpireTime, $prefixLength ); + if ( is_string( $external_values ) ) { + // It's an error message - display it on the screen. + return EDUtils::formatErrorMessage( $external_values ); + } + if ( count( $external_values ) == 0 ) { + return; + } + + if ( array_key_exists( 'filters', $args ) ) { + // parse the 'filters' arg + $filters = EDUtils::paramToArray( $args['filters'], true, false ); + } else { + $filters = array(); + } + + self::setGlobalValuesArray( $external_values, $filters, $mappings ); + } + + /** + * Render the #get_file_data parser function. + */ + static function doGetFileData( &$parser ) { + global $edgCurPageName, $edgValues, $edgCacheExpireTime; + + // If we're handling multiple pages, reset $edgValues + // when we move from one page to another. + $cur_page_name = $parser->getTitle()->getText(); + if ( ! isset( $edgCurPageName ) || $edgCurPageName != $cur_page_name ) { + $edgValues = array(); + $edgCurPageName = $cur_page_name; + } + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + if ( array_key_exists( 'file', $args ) ) { + $file = $args['file']; + } elseif ( array_key_exists( 'directory', $args ) ) { + $directory = $args['directory']; + if ( array_key_exists( 'file name', $args ) ) { + $fileName = $args['file name']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'file name')->parse() ); + } + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'file|directory')->parse() ); + } + + if ( array_key_exists( 'format', $args ) ) { + $format = strtolower( $args['format'] ); + } else { + $format = ''; + } + if ( $format == 'xml' ) { + if ( array_key_exists( 'use xpath', $args ) ) { + // Somewhat of a hack - store the fact that + // we're using XPath within the format, even + // though the format is still XML. + $format = 'xml with xpath'; + } + } elseif ( $format == 'csv' || $format == 'csv with header' ) { + if ( array_key_exists( 'delimiter', $args ) ) { + $delimiter = $args['delimiter']; + // Hopefully this solution isn't "too clever". + $format = array( $format, $args['delimiter'] ); + } + } + + if ( array_key_exists( 'data', $args ) ) { + // parse the 'data' arg into mappings + if ( $format == 'xml with xpath' ) { + $mappings = EDUtils::paramToArray( $args['data'], false, false ); + } else { + $mappings = EDUtils::paramToArray( $args['data'], false, true ); + } + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'data')->parse() ); + } + + if ( array_key_exists( 'cache seconds', $args) ) { + // set cache expire time + $cacheExpireTime = $args['cache seconds']; + } else { + $cacheExpireTime = $edgCacheExpireTime; + } + + if ( isset( $file ) ) { + $external_values = EDUtils::getDataFromFile( $file, $format, $mappings ); + } else { + $external_values = EDUtils::getDataFromDirectory( $directory, $fileName, $format, $mappings ); + } + + if ( is_string( $external_values ) ) { + // It's an error message - display it on the screen. + return EDUtils::formatErrorMessage( $external_values ); + } + if ( count( $external_values ) == 0 ) { + return; + } + + if ( array_key_exists( 'filters', $args ) ) { + // parse the 'filters' arg + $filters = EDUtils::paramToArray( $args['filters'], true, false ); + } else { + $filters = array(); + } + + self::setGlobalValuesArray( $external_values, $filters, $mappings ); + } + /** + * Render the #get_soap_data parser function. + */ + static function doGetSOAPData( &$parser ) { + global $edgCurPageName, $edgValues, $edgCacheExpireTime; + + // If we're handling multiple pages, reset $edgValues + // when we move from one page to another. + $cur_page_name = $parser->getTitle()->getText(); + if ( ! isset( $edgCurPageName ) || $edgCurPageName != $cur_page_name ) { + $edgValues = array(); + $edgCurPageName = $cur_page_name; + } + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + if ( array_key_exists( 'url', $args ) ) { + $url = $args['url']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'url')->parse() ); + } + $url = str_replace( ' ', '%20', $url ); // do some minor URL-encoding + // if the URL isn't allowed (based on a whitelist), exit + if ( ! EDUtils::isURLAllowed( $url ) ) { + return EDUtils::formatErrorMessage( "URL is not allowed" ); + } + + if ( array_key_exists( 'request', $args ) ) { + $requestName = $args['request']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'request')->parse() ); + } + + if ( array_key_exists( 'requestData', $args ) ) { + $requestData = EDUtils::paramToArray( $args['requestData'] ); + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'requestData')->parse() ); + } + + if ( array_key_exists( 'response', $args ) ) { + $responseName = $args['response']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'response')->parse() ); + } + + if ( array_key_exists( 'data', $args ) ) { + $mappings = EDUtils::paramToArray( $args['data'] ); // parse the data arg into mappings + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'data')->parse() ); + } + + $external_values = EDUtils::getSOAPData( $url, $requestName, $requestData, $responseName, $mappings); + if ( is_string( $external_values ) ) { + // It's an error message - display it on the screen. + return EDUtils::formatErrorMessage( $external_values ); + } + + self::setGlobalValuesArray( $external_values, array(), $mappings ); + } + + /** + * Render the #get_ldap_data parser function + */ + static function doGetLDAPData( &$parser ) { + global $edgCurPageName, $edgValues; + + // if we're handling multiple pages, reset $edgValues + // when we move from one page to another + $cur_page_name = $parser->getTitle()->getText(); + if ( ! isset( $edgCurPageName ) || $edgCurPageName != $cur_page_name ) { + $edgValues = array(); + $edgCurPageName = $cur_page_name; + } + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + if ( array_key_exists( 'data', $args ) ) { + $mappings = EDUtils::paramToArray( $args['data'] ); // parse the data arg into mappings + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'data')->parse() ); + } + + if ( !array_key_exists( 'filter', $args ) ) { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'filter')->parse() ); + } elseif ( !array_key_exists( 'domain', $args ) ) { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'domain')->parse() ); + } else { + $external_values = EDUtils::getLDAPData( $args['filter'], $args['domain'], array_values( $mappings ) ); + } + + // Build $edgValues + foreach ( $external_values as $i => $row ) { + if ( !is_array( $row ) ) { + continue; + } + foreach ( $mappings as $local_var => $external_var ) { + if ( array_key_exists( $external_var, $row ) ) { + $edgValues[$local_var][] = $row[$external_var][0]; + } else { + $edgValues[$local_var][] = ''; + } + } + } + } + + /** + * Render the #get_db_data parser function + */ + static function doGetDBData( &$parser ) { + global $edgCurPageName, $edgValues; + + // if we're handling multiple pages, reset $edgValues + // when we move from one page to another + $cur_page_name = $parser->getTitle()->getText(); + if ( ! isset( $edgCurPageName ) || $edgCurPageName != $cur_page_name ) { + $edgValues = array(); + $edgCurPageName = $cur_page_name; + } + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + $data = ( array_key_exists( 'data', $args ) ) ? $args['data'] : null; + if ( array_key_exists( 'db', $args ) ) { + $dbID = $args['db']; + } elseif ( array_key_exists( 'server', $args ) ) { + // For backwards-compatibility - 'db' parameter was + // added in External Data version 1.3. + $dbID = $args['server']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'db' )->parse() ); + } + if ( array_key_exists( 'from', $args ) ) { + $from = $args['from']; + } else { + return EDUtils::formatErrorMessage( wfMessage( 'externaldata-no-param-specified', 'from')->parse() ); + } + $conds = ( array_key_exists( 'where', $args ) ) ? $args['where'] : null; + $limit = ( array_key_exists( 'limit', $args ) ) ? $args['limit'] : null; + $orderBy = ( array_key_exists( 'order by', $args ) ) ? $args['order by'] : null; + $groupBy = ( array_key_exists( 'group by', $args ) ) ? $args['group by'] : null; + $sqlOptions = array( 'LIMIT' => $limit, 'ORDER BY' => $orderBy, 'GROUP BY' => $groupBy ); + $joinOn = ( array_key_exists( 'join on', $args ) ) ? $args['join on'] : null; + $otherParams = array(); + if ( array_key_exists('aggregate', $args ) ) { + $otherParams['aggregate'] = $args['aggregate']; + } elseif ( array_key_exists( 'find query', $args ) ) { + $otherParams['find query'] = $args['find query']; + } + $mappings = EDUtils::paramToArray( $data ); // parse the data arg into mappings + + $external_values = EDUtils::getDBData( $dbID, $from, array_values( $mappings ), $conds, $sqlOptions, $joinOn, $otherParams ); + + // Handle error cases. + if ( !is_array( $external_values ) ) { + return EDUtils::formatErrorMessage( $external_values ); + } + + // Build $edgValues. + foreach ( $mappings as $local_var => $external_var ) { + if ( array_key_exists( $external_var, $external_values ) ) { + foreach ( $external_values[$external_var] as $value ) { + $edgValues[$local_var][] = $value; + } + } + } + } + + /** + * Get the specified index of the array for the specified local + * variable retrieved by one of the #get... parser functions. + */ + static function getIndexedValue( $var, $i ) { + global $edgValues; + if ( array_key_exists( $var, $edgValues ) && array_key_exists( $i, $edgValues[$var] ) ) { + return $edgValues[$var][$i]; + } else { + return ''; + } + } + + /** + * Render the #external_value parser function + */ + static function doExternalValue( &$parser, $local_var = '' ) { + global $edgValues, $edgExternalValueVerbose; + if ( ! array_key_exists( $local_var, $edgValues ) ) { + return $edgExternalValueVerbose ? EDUtils::formatErrorMessage( "Error: no local variable \"$local_var\" was set." ) : ''; + } elseif ( is_array( $edgValues[$local_var] ) ) { + return $edgValues[$local_var][0]; + } else { + return $edgValues[$local_var]; + } + } + + /** + * Render the #for_external_table parser function + */ + static function doForExternalTable( &$parser, $expression = '' ) { + global $edgValues; + + // Get the variables used in this expression, get the number + // of values for each, and loop through. + $matches = array(); + preg_match_all( '/{{{([^}]*)}}}/', $expression, $matches ); + $variables = $matches[1]; + $num_loops = 0; + + $commands = array( "urlencode", "htmlencode" ); + // Used for a regexp check. + $commandsStr = implode( '|', $commands ); + + foreach ( $variables as $variable ) { + // If it ends with one of the pre-defined "commands", + // ignore the command to get the actual variable name. + foreach ( $commands as $command ) { + $variable = str_replace( $command, '', $variable ); + } + $variable = str_replace( '.urlencode', '', $variable ); + if ( array_key_exists( $variable, $edgValues ) ) { + $num_loops = max( $num_loops, count( $edgValues[$variable] ) ); + } + } + + $text = ""; + for ( $i = 0; $i < $num_loops; $i++ ) { + $cur_expression = $expression; + foreach ( $variables as $variable ) { + // If it ends with one of the pre-defined "commands", + // ignore the command to get the actual variable name. + $matches = array(); + preg_match( "/([^.]*)\.?($commandsStr)?$/", $variable, $matches ); + + $real_var = $matches[1]; + if ( count( $matches ) == 3 ) { + $command = $matches[2]; + } else { + $command = null; + } + + switch( $command ) { + case "htmlencode": + $value = htmlentities( self::getIndexedValue( $real_var, $i ), ENT_COMPAT | ENT_HTML401| ENT_SUBSTITUTE, null, false ); + break; + case "urlencode": + $value = urlencode( self::getIndexedValue( $real_var, $i ) ); + break; + default: + $value = self::getIndexedValue( $real_var, $i ); + } + + $cur_expression = str_replace( '{{{' . $variable . '}}}', $value, $cur_expression ); + } + $text .= $cur_expression; + } + return $text; + } + + /** + * Render the #display_external_table parser function + * + * @author Dan Bolser + */ + static function doDisplayExternalTable( &$parser ) { + global $edgValues; + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser ... + $args = EDUtils::parseParams( $params ); // parse params into name-value pairs + + if ( array_key_exists( 'template', $args ) ) { + $template = $args['template']; + } else { + return EDUtils::formatErrorMessage( "No template specified" ); + } + + if ( array_key_exists( 'data', $args ) ) { + // parse the 'data' arg into mappings + $mappings = EDUtils::paramToArray( $args['data'], false, false ); + } else { + // or just use keys from edgValues + foreach ( $edgValues as $local_variable => $values ) { + $mappings[$local_variable] = $local_variable; + } + } + + // The string placed in the wikitext between template calls - + // default is a newline. + if ( array_key_exists( 'delimiter', $args ) ) { + $delimiter = str_replace( '\n', "\n", $args['delimiter'] ); + } else { + $delimiter = "\n"; + } + + $num_loops = 0; // May differ when multiple '#get_'s are used in one page + foreach ( $mappings as $template_param => $local_variable ) { + if ( !array_key_exists( $local_variable, $edgValues ) ) { + // Don't throw an error message - the source may just + // not publish this variable. + continue; + } + $num_loops = max( $num_loops, count( $edgValues[$local_variable] ) ); + } + + if ( array_key_exists( 'intro template', $args ) && $num_loops > 0) { + $text = '{{' . $args['intro template'] . '}}'; + } else { + $text = ""; + } + for ( $i = 0; $i < $num_loops; $i++ ) { + if ( $i > 0 ) { + $text .= $delimiter; + } + $text .= '{{' . $template; + foreach ( $mappings as $template_param => $local_variable ) { + $value = self::getIndexedValue( $local_variable, $i ); + $text .= "|$template_param=$value"; + } + $text .= "}}"; + } + if ( array_key_exists( 'outro template', $args ) && $num_loops > 0 ) { + $text .= '{{' . $args['outro template'] . '}}'; + } + + // This actually 'calls' the template that we built above + return array( $text, 'noparse' => false ); + } + + /** + * Based on Semantic Internal Objects' + * SIOSubobjectHandler::doSetInternal(). + */ + public static function callSubobject( $parser, $params ) { + // This is a hack, since SMW's SMWSubobject::render() call is + // not meant to be called outside of SMW. However, this seemed + // like the better solution than copying over all of that + // method's code. Ideally, a true public function can be + // added to SMW, that handles a subobject creation, that this + // code can then call. + + $subobjectArgs = array( &$parser ); + // Blank first argument, so that subobject ID will be + // an automatically-generated random number. + $subobjectArgs[1] = ''; + // "main" property, pointing back to the page. + $mainPageName = $parser->getTitle()->getText(); + $mainPageNamespace = $parser->getTitle()->getNsText(); + if ( $mainPageNamespace != '' ) { + $mainPageName = $mainPageNamespace . ':' . $mainPageName; + } + $subobjectArgs[2] = $params[0] . '=' . $mainPageName; + + foreach ( $params as $i => $value ) { + if ( $i == 0 ) continue; + $subobjectArgs[] = $value; + } + + // SMW 1.9+ + $instance = \SMW\ParserFunctionFactory::newFromParser( $parser )->getSubobjectParser(); + return $instance->parse( new SMW\ParserParameterFormatter( $subobjectArgs ) ); + } + + /** + * Render the #store_external_table parser function + */ + static function doStoreExternalTable( &$parser ) { + global $edgValues; + + $params = func_get_args(); + array_shift( $params ); // we already know the $parser... + + // Get the variables used in this expression, get the number + // of values for each, and loop through. + $expression = implode( '|', $params ); + $matches = array(); + preg_match_all( '/{{{([^}]*)}}}/', $expression, $matches ); + $variables = $matches[1]; + $num_loops = 0; + foreach ( $variables as $variable ) { + // ignore the presence of '.urlencode' - it's a command, + // not part of the actual variable name + $variable = str_replace( '.urlencode', '', $variable ); + if ( array_key_exists( $variable, $edgValues ) ) { + $num_loops = max( $num_loops, count( $edgValues[$variable] ) ); + } + } + $text = ""; + for ( $i = 0; $i < $num_loops; $i++ ) { + // re-get $params + $params = func_get_args(); + array_shift( $params ); + foreach ( $params as $j => $param ) { + foreach ( $variables as $variable ) { + // If variable name ends with a ".urlencode", + // that's a command - URL-encode the value of + // the actual variable. + if ( strrpos( $variable, '.urlencode' ) === strlen( $variable ) - strlen( '.urlencode' ) ) { + $real_var = str_replace( '.urlencode', '', $variable ); + $value = urlencode( self::getIndexedValue( $real_var , $i ) ); + } else { + $value = self::getIndexedValue( $variable , $i ); + } + $params[$j] = str_replace( '{{{' . $variable . '}}}', $value, $params[$j] ); + } + } + + self::callSubobject( $parser, $params ); + } + return null; + } + + /** + * Render the #clear_external_data parser function + */ + static function doClearExternalData( &$parser ) { + global $edgValues; + $edgValues = array(); + } +} diff --git a/www/wiki/extensions/ExternalData/includes/ED_Utils.php b/www/wiki/extensions/ExternalData/includes/ED_Utils.php new file mode 100644 index 00000000..dc0ee222 --- /dev/null +++ b/www/wiki/extensions/ExternalData/includes/ED_Utils.php @@ -0,0 +1,1071 @@ +<?php +/** + * Utility functions for External Data + */ + +class EDUtils { + // how many times to try an HTTP request + private static $http_number_of_tries = 3; + + private static $ampersandReplacement = "THIS IS A LONG STRING USED AS A REPLACEMENT FOR AMPERSANDS 55555555"; + + /** + * Wraps error message in a span with the "error" class, for better + * display, and so that it can be handled correctly by #iferror and + * possibly others. + */ + static function formatErrorMessage( $msg ) { + return '<span class="error">' . $msg . '</span>'; + } + + // XML-handling functions based on code found at + // http://us.php.net/xml_set_element_handler + static function startElement( $parser, $name, $attrs ) { + global $edgCurrentXMLTag, $edgCurrentValue, $edgXMLValues; + // set to all lowercase to avoid casing issues + $edgCurrentXMLTag = strtolower( $name ); + $edgCurrentValue = ''; + foreach ( $attrs as $attr => $value ) { + $attr = strtolower( $attr ); + $value = str_replace( self::$ampersandReplacement, '&', $value ); + if ( array_key_exists( $attr, $edgXMLValues ) ) { + $edgXMLValues[$attr][] = $value; + } else { + $edgXMLValues[$attr] = array( $value ); + } + } + } + + static function endElement( $parser, $name ) { + global $edgCurrentXMLTag, $edgCurrentValue, $edgXMLValues; + + if ( array_key_exists( $edgCurrentXMLTag, $edgXMLValues ) ) { + $edgXMLValues[$edgCurrentXMLTag][] = $edgCurrentValue; + } else { + $edgXMLValues[$edgCurrentXMLTag] = array( $edgCurrentValue ); + } + // Clear the value both here and in startElement(), in case this + // is an embedded tag. + $edgCurrentValue = ''; + } + + /** + * Due to the strange way xml_set_character_data_handler() runs, + * getContent() may get called multiple times, once for each fragment + * of the text, for very long XML values. Given that, we keep a global + * variable with the current value and add to it. + */ + static function getContent( $parser, $content ) { + global $edgCurrentValue; + + // Replace ampersands, to avoid the XML getting split up + // around them. + // Note that this is *escaped* ampersands being replaced - + // this is unrelated to the fact that bare ampersands aren't + // allowed in XML. + $content = str_replace( self::$ampersandReplacement, '&', $content ); + $edgCurrentValue .= $content; + } + + static function parseParams( $params ) { + $args = array(); + foreach ( $params as $param ) { + $param = preg_replace ( "/\s\s+/", ' ', $param ); // whitespace + $param_parts = explode( "=", $param, 2 ); + if ( count( $param_parts ) < 2 ) { + $args[$param_parts[0]] = null; + } else { + list( $name, $value ) = $param_parts; + $args[$name] = $value; + } + } + return $args; + } + + /** + * Parses an argument of the form "a=b,c=d,..." into an array + */ + static function paramToArray( $arg, $lowercaseKeys = false, $lowercaseValues = false ) { + $arg = preg_replace ( "/\s\s+/", ' ', $arg ); // whitespace + + // Split text on commas, except for commas found within quotes + // and parentheses. Regular expression based on: + // http://stackoverflow.com/questions/1373735/regexp-split-string-by-commas-and-spaces-but-ignore-the-inside-quotes-and-parent#1381895 + // ...with modifications by Nick Lindridge, ionCube Ltd. + $pattern = <<<END + / + [,] + (?=(?:(?:[^"]*"){2})*[^"]*$) + (?=(?:(?:[^']*'){2})*[^']*$) + (?=(?:[^()]*+\([^()]*+\))*+[^()]*+$) + /x +END; + // " - fix for color highlighting in vi :) + $keyValuePairs = preg_split( $pattern, $arg ); + + $returnArray = array(); + foreach ( $keyValuePairs as $keyValuePair ) { + $keyAndValue = explode( '=', $keyValuePair, 2 ); + if ( count( $keyAndValue ) == 2 ) { + $key = trim( $keyAndValue[0] ); + if ( $lowercaseKeys ) { + $key = strtolower( $key ); + } + $value = trim( $keyAndValue[1] ); + if ( $lowercaseValues ) { + $value = strtolower( $value ); + } + $returnArray[$key] = $value; + } + } + return $returnArray; + } + + static function getLDAPData( $filter, $domain, $params ) { + global $edgLDAPServer; + global $edgLDAPUser; + global $edgLDAPPass; + + $ds = self::connectLDAP( $edgLDAPServer[$domain], $edgLDAPUser[$domain], $edgLDAPPass[$domain] ); + $results = self::searchLDAP( $ds, $domain, $filter, $params ); + + return $results; + } + + static function connectLDAP( $server, $username, $password ) { + $ds = ldap_connect( $server ); + if ( $ds ) { + // these options for Active Directory only? + ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 ); + ldap_set_option( $ds, LDAP_OPT_REFERRALS, 0 ); + + if ( $username ) { + $r = ldap_bind( $ds, $username, $password ); + } else { + # no username, so do anonymous bind + $r = ldap_bind( $ds ); + } + + # should check the result of the bind here + return $ds; + } else { + echo wfMessage( "externaldata-ldap-unable-to-connect", $server )->text(); + } + } + + static function searchLDAP( $ds, $domain, $filter, $attributes ) { + global $edgLDAPBaseDN; + + $sr = ldap_search( $ds, $edgLDAPBaseDN[$domain], $filter, $attributes ); + $results = ldap_get_entries( $ds, $sr ); + return $results; + } + + static function getArrayValue( $arrayName, $key ) { + if ( array_key_exists( $key, $arrayName ) ) { + return $arrayName[$key]; + } else { + return null; + } + } + + static function getDBData( $dbID, $from, $columns, $where, $sqlOptions, $joinOn, $otherParams ) { + global $edgDBServerType; + global $edgDBServer; + global $edgDBDirectory; + global $edgDBName; + global $edgDBUser; + global $edgDBPass; + global $edgDBFlags; + global $edgDBTablePrefix; + + // Get all possible parameters + $db_type = self::getArrayValue( $edgDBServerType, $dbID ); + $db_server = self::getArrayValue( $edgDBServer, $dbID ); + $db_directory = self::getArrayValue( $edgDBDirectory, $dbID ); + $db_name = self::getArrayValue( $edgDBName, $dbID ); + $db_username = self::getArrayValue( $edgDBUser, $dbID ); + $db_password = self::getArrayValue( $edgDBPass, $dbID ); + $db_flags = self::getArrayValue( $edgDBFlags, $dbID ); + $db_tableprefix = self::getArrayValue( $edgDBTablePrefix, $dbID ); + + // MongoDB has entirely different handling from the rest. + if ( $db_type == 'mongodb' ) { + if ( $db_name == '' ) { + return wfMessage( "externaldata-db-incomplete-information" )->text(); + } + return self::getMongoDBData( $db_server, $db_username, $db_password, $db_name, $from, $columns, $where, $sqlOptions, $otherParams ); + } + + // Validate parameters + if ( $db_type == '' ) { + return wfMessage( "externaldata-db-incomplete-information" )->text(); + } elseif ( $db_type == 'sqlite' ) { + if ( $db_directory == '' || $db_name == '' ) { + return wfMessage( "externaldata-db-incomplete-information" )->text(); + } + } else { + // We don't check the username or password because they + // could legitimately be blank or null. + if ( $db_server == '' || $db_name == '' ) { + return wfMessage( "externaldata-db-incomplete-information" )->text(); + } + } + + if ( $db_flags == '' ) { + $db_flags = DBO_DEFAULT; + } + + $dbConnectionParams = array( + 'host' => $db_server, + 'user' => $db_username, + 'password' => $db_password, + 'dbname' => $db_name, + 'flags' => $db_flags, + 'tablePrefix' => $db_tableprefix, + ); + if ( $db_type == 'sqlite' ) { + $dbConnectionParams['dbDirectory'] = $db_directory; + } + + // DatabaseBase::factory() was replaced by Database::factory() + // in MW 1.28. + if ( method_exists( 'Database', 'factory' ) ) { + $db = Database::factory( $db_type, $dbConnectionParams ); + } else { + $db = DatabaseBase::factory( $db_type, $dbConnectionParams ); + } + + if ( $db == null ) { + return wfMessage( "externaldata-db-unknown-type" )->text(); + } + + if ( ! $db->isOpen() ) { + return wfMessage( "externaldata-db-could-not-connect" )->text(); + } + + if ( count( $columns ) == 0 ) { + return wfMessage( "externaldata-db-no-return-values" )->text(); + } + + $rows = self::searchDB( $db, $from, $columns, $where, $sqlOptions, $joinOn ); + $db->close(); + + if ( !is_array( $rows ) ) { + // It's an error message. + return $rows; + } + + $values = array(); + foreach ( $rows as $row ) { + foreach ( $columns as $column ) { + $values[$column][] = $row[$column]; + } + } + + return $values; + } + + static function getValueFromJSONArray( array $origArray, $path, $default = null ) { + $current = $origArray; + $token = strtok( $path, '.' ); + + while ( $token !== false ) { + if ( !isset( $current[$token] ) ) { + return $default; + } + $current = $current[$token]; + $token = strtok( '.' ); + } + return $current; + } + + /** + * Handles #get_db_data for the non-relational database system + * MongoDB. + */ + static function getMongoDBData( $db_server, $db_username, $db_password, $db_name, $from, $columns, $where, $sqlOptions, $otherParams ) { + global $wgMainCacheType, $wgMemc, $edgMemCachedMongoDBSeconds; + + // Use MEMCACHED if configured to cache mongodb queries. + if ($wgMainCacheType === CACHE_MEMCACHED && $edgMemCachedMongoDBSeconds > 0) { + // Check if cache entry exists. + $mckey = wfMemcKey( 'mongodb', $from, md5(json_encode($otherParams) . json_encode($columns) . $where . json_encode($sqlOptions) . $db_name . $db_server)); + $values = $wgMemc->get( $mckey ); + + if ($values !== false) { + return $values; + } + } + + // MongoDB login is done using a single string. + // When specifying extra connect string options (e.g. replicasets,timeout, etc.), + // use $db_server to pass these values + // see http://docs.mongodb.org/manual/reference/connection-string + $connect_string = "mongodb://"; + if ( $db_username != '' ) { + $connect_string .= $db_username . ':' . $db_password . '@'; + } + if ( $db_server != '') { + $connect_string .= $db_server; + } else { + $connect_string .= 'localhost:27017'; + } + + // Use try/catch to suppress error messages, which would show + // the MongoDB connect string, which may have sensitive + // information. + try { + $m = new MongoClient( $connect_string ); + } catch ( Exception $e ) { + return wfMessage( "externaldata-db-could-not-connect" )->text(); + } + + $db = $m->selectDB( $db_name ); + + // Check if collection exists + if ( $db->system->namespaces->findOne( array( 'name'=>$db_name . "." . $from ) ) === null ){ + return wfMessage( "externaldata-db-unknown-collection:")->text() . $db_name . "." . $from; + } + + $collection = new MongoCollection( $db, $from ); + + $findArray = array(); + $aggregateArray = array(); + // Was an aggregation pipeline command issued? + if ( array_key_exists('aggregate', $otherParams ) ) { + // The 'aggregate' parameter should be an array of + // aggregation JSON pipeline commands. + // Note to users: be sure to use spaces between curly + // brackets in the 'aggregate' JSON so as not to trip up the + // MW parser. + $aggregateArray = json_decode ($otherParams['aggregate'], true); + } elseif ( array_key_exists( 'find query', $otherParams ) ) { + // Otherwise, was a direct MongoDB "find" query JSON string provided? + // If so, use that. As with 'aggregate' JSON, use spaces + // between curly brackets + $findArray = json_decode ($otherParams['find query'], true); + } elseif ( $where != '' ) { + // If not, turn the SQL of the "where=" parameter into + // a "find" array for MongoDB. Note that this approach + // is only appropriate for simple find queries, that + // use the operators OR, AND, >=, >, <=, < and LIKE + // - and NO NUMERIC LITERALS. + $where = str_ireplace( ' and ', ' AND ', $where ); + $where = str_ireplace( ' like ', ' LIKE ', $where ); + $whereElements = explode( ' AND ', $where ); + foreach ( $whereElements as $whereElement ) { + if ( strpos( $whereElement, '>=' ) ) { + list( $fieldName, $value ) = explode( '>=', $whereElement ); + $findArray[trim( $fieldName )] = array( '$gte' => trim( $value ) ); + } elseif ( strpos( $whereElement, '>' ) ) { + list( $fieldName, $value ) = explode( '>', $whereElement ); + $findArray[trim( $fieldName )] = array( '$gt' => trim( $value ) ); + } elseif ( strpos( $whereElement, '<=' ) ) { + list( $fieldName, $value ) = explode( '<=', $whereElement ); + $findArray[trim( $fieldName )] = array( '$lte' => trim( $value ) ); + } elseif ( strpos( $whereElement, '<' ) ) { + list( $fieldName, $value ) = explode( '<', $whereElement ); + $findArray[trim( $fieldName )] = array( '$lt' => trim( $value ) ); + } elseif ( strpos( $whereElement, ' LIKE ' ) ) { + list( $fieldName, $value ) = explode( ' LIKE ', $whereElement ); + $value = trim( $value ); + $regex = new MongoRegex( "/$value/i" ); + $findArray[trim( $fieldName )] = $regex; + } else { + list( $fieldName, $value ) = explode( '=', $whereElement ); + $findArray[trim( $fieldName )] = trim( $value ); + } + } + } + + // Do the same for the "order=" parameter as the "where=" parameter + $sortArray = array(); + if ( $sqlOptions['ORDER BY'] != '' ) { + $sortElements = explode( ',', $sqlOptions['ORDER BY'] ); + foreach ( $sortElements as $sortElement ) { + $parts = explode( ' ', $sortElement ); + $fieldName = $parts[0]; + $orderingNum = 1; + if ( count( $parts ) > 1 ) { + if ( strtolower( $parts[1] ) == 'desc' ) { + $orderingNum = -1; + } + } + $sortArray[$fieldName] = $orderingNum; + } + } + + // Get the data! + if ( array_key_exists( 'aggregate', $otherParams ) ) { + if ( $sqlOptions['ORDER BY'] != '') { + $aggregateArray[] = array( '$sort' => $sortArray ); + } + if ( $sqlOptions['LIMIT'] != '' ) { + $aggregateArray[] = array( '$limit' => intval( $sqlOptions['LIMIT'] ) ); + } + $aggregateResult = $collection->aggregate( $aggregateArray ); + $resultsCursor = $aggregateResult['result']; + } else { + $resultsCursor = $collection->find( $findArray, $columns )->sort( $sortArray )->limit( $sqlOptions['LIMIT'] ); + } + + $values = array(); + foreach ( $resultsCursor as $doc ) { + foreach ( $columns as $column ) { + if ( strstr($column, ".") ) { + // If the exact path of the value was + // specified using dots (e.g., "a.b.c"), + // get the value that way. + $values[$column][] = self::getValueFromJSONArray( $doc, $column ); + } elseif ( isset( $doc[$column] ) && is_array( $doc[$column] ) ) { + // If MongoDB returns an array for a column, + // but the exact location of the value wasn't specified, + // do some extra processing. + if ( $column == 'geometry' && array_key_exists( 'coordinates', $doc['geometry'] ) ) { + // Check if it's GeoJSON geometry: + // http://www.geojson.org/geojson-spec.html#geometry-objects + // If so, return it in a format that + // the Maps extension can understand. + $coordinates = $doc['geometry']['coordinates'][0]; + $coordinateStrings = array(); + foreach ( $coordinates as $coordinate ) { + $coordinateStrings[] = $coordinate[1] . ',' . $coordinate[0]; + } + $values[$column][] = implode( ':', $coordinateStrings ); + } else { + // Just return it as JSON, the + // lingua franca of MongoDB. + $values[$column][] = json_encode( $doc[$column] ); + } + } else { + // It's a simple literal. + $values[$column][] = (isset( $doc[$column] ) ? $doc[$column] : null); + } + } + } + + if ($wgMainCacheType === CACHE_MEMCACHED && $edgMemCachedMongoDBSeconds > 0 ) { + $wgMemc->set( $mckey, $values, $edgMemCachedMongoDBSeconds ); + } + + return $values; + } + + static function searchDB( $db, $from, $vars, $conds, $sqlOptions, $joinOn ) { + // The format of $from can be just "TableName", or the more + // complex "Table1=Alias1,Table2=Alias2,...". + $tables = array(); + $tableStrings = explode( ',', $from ); + foreach ( $tableStrings as $tableString ) { + if ( strpos( $tableString, '=' ) !== false ) { + $tableStringParts = explode( '=', $tableString, 2 ); + $tableName = trim( $tableStringParts[0] ); + $alias = trim( $tableStringParts[1] ); + } else { + $tableName = $alias = trim( $tableString); + } + $tables[$alias] = $tableName; + } + $joinConds = array(); + $joinStrings = explode( ',', $joinOn ); + foreach ( $joinStrings as $i => $joinString ) { + if ( $joinString == '' ) { + continue; + } + if ( strpos( $joinString, '=' ) === false ) { + return "Error: every \"join on\" string must contain an \"=\" sign."; + } + if ( count( $tables ) <= $i + 1 ) { + return "Error: too many \"join on\" conditions."; + } + $aliases = array_keys( $tables ); + $alias = $aliases[$i + 1]; + $joinConds[$alias] = array( 'JOIN', $joinString ); + } + $result = $db->select( $tables, $vars, $conds, 'EDUtils::searchDB', $sqlOptions, $joinConds ); + if ( !$result ) { + return wfMessage( "externaldata-db-invalid-query" )->text(); + } + + $rows = array(); + while ( $row = $db->fetchRow( $result ) ) { + // Create a new row object that uses the passed-in + // column names as keys, so that there's always an + // exact match between what's in the query and what's + // in the return value (so that "a.b", for instance, + // doesn't get chopped off to just "b"). + $new_row = array(); + foreach ( $vars as $i => $column_name ) { + $dbField = $row[$i]; + // This can happen with MSSQL. + if ( $dbField instanceof DateTime ) { + $dbField = $dbField->format('Y-m-d H:i:s'); + } + // Convert the encoding to UTF-8 + // if necessary - based on code at + // http://www.php.net/manual/en/function.mb-detect-encoding.php#102510 + if ( !function_exists( 'mb_detect_encoding' ) || + mb_detect_encoding( $dbField, 'UTF-8', true ) == 'UTF-8' ) { + $new_row[$column_name] = $dbField; + } else { + $new_row[$column_name] = utf8_encode( $dbField ); + } + } + $rows[] = $new_row; + } + return $rows; + } + + static function getXMLData( $xml ) { + global $edgXMLValues; + $edgXMLValues = array(); + + // Remove comments from XML - for some reason, xml_parse() + // can't handle them. + $xml = preg_replace( '/<!--.*?-->/s', '', $xml ); + + // Also, re-insert ampersands, after they were removed to + // avoid parsing problems. + $xml = str_replace( '&', self::$ampersandReplacement, $xml ); + + $xml_parser = xml_parser_create(); + xml_set_element_handler( $xml_parser, array( 'EDUtils', 'startElement' ), array( 'EDUtils', 'endElement' ) ); + xml_set_character_data_handler( $xml_parser, array( 'EDUtils', 'getContent' ) ); + if ( !xml_parse( $xml_parser, $xml, true ) ) { + return wfMessage( 'externaldata-xml-error', + xml_error_string( xml_get_error_code( $xml_parser ) ), + xml_get_current_line_number( $xml_parser ) )->text(); + } + xml_parser_free( $xml_parser ); + return $edgXMLValues; + } + + static function isNodeNotEmpty( $node ) { + return trim( $node[0] ) != ''; + } + + static function filterEmptyNodes( $nodes ) { + if ( !is_array( $nodes ) ) return $nodes; + return array_filter( $nodes, array( 'EDUtils', 'isNodeNotEmpty' ) ); + } + + static function getXPathData( $xml, $mappings, $ns ) { + global $edgXMLValues; + + try { + $sxml = new SimpleXMLElement( $xml ); + } catch ( Exception $e ) { + return "Caught exception parsing XML: " . $e->getMessage(); + } + $edgXMLValues = array(); + + foreach ( $mappings as $local_var => $xpath ) { + // First, register any necessary XML namespaces, to + // avoid "Undefined namespace prefix" errors. + $matches = array(); + preg_match_all( '/[\/\@]([a-zA-Z0-9]*):/', $xpath, $matches ); + foreach ( $matches[1] as $namespace ) { + $sxml->registerXPathNamespace( $namespace, $ns ); + } + + // Now, get all the matching values, and remove any + // empty results. + $nodes = self::filterEmptyNodes( $sxml->xpath( $xpath ) ); + if ( !$nodes ) { + continue; + } + + // Convert from SimpleXMLElement to string. + $nodesArray = array(); + foreach ( $nodes as $xmlNode ) { + $nodesArray[] = (string)$xmlNode; + } + + if ( array_key_exists( $xpath, $edgXMLValues ) ) { + // At the moment, this code will never get + // called, because duplicate values in + // $mappings will have been removed already. + $edgXMLValues[$xpath] = array_merge( $edgXMLValues[$xpath], $nodesArray ); + } else { + $edgXMLValues[$xpath] = $nodesArray; + } + } + return $edgXMLValues; + } + + static function getValuesFromCSVLine( $csv_line ) { + // regular expression copied from http://us.php.net/fgetcsv + $vals = preg_split( '/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $csv_line ); + $vals2 = array(); + foreach ( $vals as $val ) { + $vals2[] = trim( $val, '"' ); + } + return $vals2; + } + + static function getCSVData( $csv, $has_header, $delimiter = ',' ) { + // from http://us.php.net/manual/en/function.str-getcsv.php#88311 + // str_getcsv() is a function that was only added in PHP 5.3.0, + // so use the much older fgetcsv() if it's not there + + // actually, for now, always use fgetcsv(), since this call to + // str_getcsv() doesn't work, and I can't test/debug it at the + // moment + //if ( function_exists( 'str_getcsv' ) ) { + // $table = str_getcsv( $csv ); + //} else { + $fiveMBs = 5 * 1024 * 1024; + $fp = fopen( "php://temp/maxmemory:$fiveMBs", 'r+' ); + fputs( $fp, $csv ); + rewind( $fp ); + $table = array(); + while ( $line = fgetcsv( $fp, 0, $delimiter ) ) { + array_push( $table, $line ); + } + fclose( $fp ); + //} + + // Get rid of blank characters - these sometimes show up + // for certain encodings. + foreach( $table as $i => $row ) { + foreach ( $row as $j => $cell ) { + $table[$i][$j] = str_replace( chr(0), '', $cell ); + } + } + + // Get rid of the "byte order mark", if it's there - it could + // be one of a variety of options, depending on the encoding. + // Code copied in part from: + // http://artur.ejsmont.org/blog/content/annoying-utf-byte-order-marks + $sets = array( + "\xFE", + "\xFF", + "\xFE\xFF", + "\xFF\xFE", + "\xEF\xBB\xBF", + "\x2B\x2F\x76", + "\xF7\x64\x4C", + "\x0E\xFE\xFF", + "\xFB\xEE\x28", + "\x00\x00\xFE\xFF", + "\xDD\x73\x66\x73", + ); + $decodedFirstCell = utf8_decode( $table[0][0] ); + foreach ( $sets as $set ) { + if ( 0 == strncmp( $decodedFirstCell, $set, strlen( $set ) ) ) { + $table[0][0] = substr( $decodedFirstCell, strlen( $set ) + 1 ); + break; + } + } + + // Another "byte order mark" test, this one copied from the + // Data Transfer extension - somehow the first one doesn't work + // in all cases. + $byteOrderMark = pack( "CCC", 0xef, 0xbb, 0xbf ); + if ( 0 == strncmp( $table[0][0], $byteOrderMark, 3 ) ) { + $table[0][0] = substr( $table[0][0], 3 ); + } + + // Get header values, if this is 'csv with header' + if ( $has_header ) { + $header_vals = array_shift( $table ); + // On the off chance that there are one or more blank + // lines at the beginning, cycle through. + while ( count( $header_vals ) == 0 ) { + $header_vals = array_shift( $table ); + } + } + + // Unfortunately, some subpar CSV generators don't include + // trailing commas, so that a line that should look like + // "A,B,,," instead is just printed as "A,B". + // To get around this, we first figure out the correct number + // of columns in this table - which depends on whether the + // CSV has a header or not. + if ( $has_header ) { + $num_columns = count( $header_vals ); + } else { + $num_columns = 0; + foreach ( $table as $line ) { + $num_columns = max( $num_columns, count( $line ) ); + } + } + + // Now "flip" the data, turning it into a column-by-column + // array, instead of row-by-row. + $values = array(); + foreach ( $table as $line ) { + for ( $i = 0; $i < $num_columns; $i++ ) { + // This check is needed in case it's an + // uneven CSV file (see above). + if ( array_key_exists( $i, $line ) ) { + $row_val = trim( $line[$i] ); + } else { + $row_val = ''; + } + if ( $has_header ) { + $column = strtolower( trim( $header_vals[$i] ) ); + } else { + // start with an index of 1 instead of 0 + $column = $i + 1; + } + if ( array_key_exists( $column, $values ) ) { + $values[$column][] = $row_val; + } else { + $values[$column] = array( $row_val ); + } + } + } + return $values; + } + + /** + * This function handles version 3 of the genomic-data format GFF, + * defined here: + * http://www.sequenceontology.org/gff3.shtml + */ + static function getGFFData( $gff ) { + // use an fgetcsv() call, similar to the one in getCSVData() + // (fgetcsv() can handle delimiters other than commas, in this + // case a tab) + $fiveMBs = 5 * 1024 * 1024; + $fp = fopen( "php://temp/maxmemory:$fiveMBs", 'r+' ); + fputs( $fp, $gff ); + rewind( $fp ); + $table = array(); + while ( $line = fgetcsv( $fp, null, "\t" ) ) { + // ignore comment lines + if ( strpos( $line[0], '##' ) !== 0 ) { + // special handling for final 'attributes' column + if ( array_key_exists( 8, $line ) ) { + $attributes = explode( ';', $line[8] ); + foreach ( $attributes as $attribute ) { + $keyAndValue = explode( '=', $attribute, 2 ); + if ( count( $keyAndValue ) == 2 ) { + $key = strtolower( $keyAndValue[0] ); + $value = $keyAndValue[1]; + $line[$key] = $value; + } + } + } + array_push( $table, $line ); + } + } + fclose( $fp ); + + $values = array(); + foreach ( $table as $line ) { + foreach ( $line as $i => $row_val ) { + // each of the columns in GFF have a + // pre-defined name - even the last column + // has its own name, "attributes" + if ( $i === 0 ) { + $column = 'seqid'; + } elseif ( $i == 1 ) { + $column = 'source'; + } elseif ( $i == 2 ) { + $column = 'type'; + } elseif ( $i == 3 ) { + $column = 'start'; + } elseif ( $i == 4 ) { + $column = 'end'; + } elseif ( $i == 5 ) { + $column = 'score'; + } elseif ( $i == 6 ) { + $column = 'strand'; + } elseif ( $i == 7 ) { + $column = 'phase'; + } elseif ( $i == 8 ) { + $column = 'attributes'; + } else { + // this is hopefully an attribute key + $column = $i; + } + if ( array_key_exists( $column, $values ) ) { + $values[$column][] = $row_val; + } else { + $values[$column] = array( $row_val ); + } + } + } + return $values; + } + + /** + * Helper function that determines whether an array holds a simple + * list of scalar values, with no keys (i.e., not an associative + * array). + */ + static function holdsSimpleList( $arr ) { + $expectedKey = 0; + foreach( $arr as $key => $val ) { + if ( is_array( $val ) || $key != $expectedKey++ ) { + return false; + } + } + return true; + } + + /** + * Recursive JSON-parsing function for use by getJSONData(). + */ + static function parseTree( $tree, &$retrieved_values ) { + foreach ( $tree as $key => $val ) { + // TODO - this logic could probably be a little nicer. + if ( is_array( $val ) && self::holdsSimpleList( $val ) ) { + // If it just holds a simple list, turn the + // array into a comma-separated list, then + // pass it back in in order to do the final // processing. + $val = array( $key => implode( ', ', $val ) ); + self::parseTree( $val, $retrieved_values ); + } elseif ( is_array( $val ) && count( $val ) > 1 ) { + self::parseTree( $val, $retrieved_values ); + } elseif ( is_array( $val ) && count( $val ) == 1 && is_array( current( $val ) ) ) { + self::parseTree( current( $val ), $retrieved_values ); + } else { + // If it's an array with just one element, + // treat it like a regular value. + // (Why is the null check necessary?) + if ( $val != null && is_array( $val ) ) { + $val = current( $val ); + } + $key = strtolower( $key ); + if ( array_key_exists( $key, $retrieved_values ) ) { + $retrieved_values[$key][] = $val; + } else { + $retrieved_values[$key] = array( $val ); + } + } + } + } + + static function getJSONData( $json, $prefixLength ) { + $json = substr( $json, $prefixLength ); + $json_tree = FormatJson::decode( $json, true ); + if ( is_null( $json_tree ) ) { + // It's probably invalid JSON. + return wfMessage( 'externaldata-invalid-json' )->text(); + } + $values = array(); + if ( is_array( $json_tree ) ) { + self::parseTree( $json_tree, $values ); + } + return $values; + } + + static function fetchURL( $url, $post_vars = array(), $cacheExpireTime = 0, $get_fresh = false, $try_count = 1 ) { + $dbr = wfGetDB( DB_SLAVE ); + global $edgStringReplacements, $edgCacheTable, $edgAllowSSL; + + if ( $post_vars ) { + return Http::post( $url, array( 'postData' => $post_vars ) ); + } + + // do any special variable replacements in the URLs, for + // secret API keys and the like + foreach ( $edgStringReplacements as $key => $value ) { + $url = str_replace( $key, $value, $url ); + } + + if ( !isset( $edgCacheTable ) || is_null( $edgCacheTable ) ) { + if ( $edgAllowSSL ) { + $contents = Http::get( $url, 'default', array( 'sslVerifyCert' => false, 'followRedirects' => false ) ); + } else { + $contents = Http::get( $url ); + } + // Handle non-UTF-8 encodings. + // Copied from http://www.php.net/manual/en/function.file-get-contents.php#85008 + // Unfortunately, 'mbstring' functions are not available + // in all PHP installations. + if ( function_exists( 'mb_convert_encoding' ) ) { + $contents = mb_convert_encoding( $contents, 'UTF-8', + mb_detect_encoding( $contents, 'UTF-8, ISO-8859-1', true ) ); + } + return $contents; + } + + // check the cache (only the first 254 chars of the url) + $row = $dbr->selectRow( $edgCacheTable, '*', array( 'url' => substr( $url, 0, 254 ) ), 'EDUtils::fetchURL' ); + + if ( $row && ( ( time() - $row->req_time ) > $cacheExpireTime ) ) { + $get_fresh = true; + } + + if ( !$row || $get_fresh ) { + if ( $edgAllowSSL ) { + $page = Http::get( $url, 'default', array( CURLOPT_SSL_VERIFYPEER => false ) ); + } else { + $page = Http::get( $url ); + } + if ( $page === false ) { + sleep( 1 ); + if ( $try_count >= self::$http_number_of_tries ) { + echo wfMessage( 'externaldata-db-could-not-get-url', self::$http_number_of_tries )->text(); + return ''; + } + $try_count++; + return self::fetchURL( $url, $post_vars, $cacheExpireTime, $get_fresh, $try_count ); + } + if ( $page != '' ) { + $dbw = wfGetDB( DB_MASTER ); + // Delete the old entry, if one exists. + $dbw->delete( $edgCacheTable, array( 'url' => substr( $url, 0, 254 ))); + // Insert contents into the cache table. + $dbw->insert( $edgCacheTable, array( 'url' => substr( $url, 0, 254 ), 'result' => $page, 'req_time' => time() ) ); + return $page; + } + } else { + return $row->result; + } + } + + static private function getDataFromText( $contents, $format, $mappings, $source, $prefixLength = 0 ) { + // For now, this is only done for the CSV formats. + if ( is_array( $format ) ) { + list( $format, $delimiter ) = $format; + } else { + $delimiter = ','; + } + + if ( $format == 'xml' ) { + return self::getXMLData( $contents ); + } elseif ( $format == 'xml with xpath' ) { + return self::getXPathData( $contents, $mappings, $source ); + } elseif ( $format == 'csv' ) { + return self::getCSVData( $contents, false, $delimiter ); + } elseif ( $format == 'csv with header' ) { + return self::getCSVData( $contents, true, $delimiter ); + } elseif ( $format == 'json' ) { + return self::getJSONData( $contents, $prefixLength ); + } elseif ( $format == 'gff' ) { + return self::getGFFData( $contents ); + } else { + return wfMessage( 'externaldata-web-invalid-format', $format )->text(); + } + } + + /** + * Checks whether this URL is allowed, based on the + * $edgAllowExternalDataFrom whitelist + */ + static public function isURLAllowed( $url ) { + // this code is based on Parser::maybeMakeExternalImage() + global $edgAllowExternalDataFrom; + $data_from = $edgAllowExternalDataFrom; + $text = false; + if ( empty( $data_from ) ) { + return true; + } elseif ( is_array( $data_from ) ) { + foreach ( $data_from as $match ) { + if ( strpos( $url, $match ) === 0 ) { + return true; + } + } + return false; + } else { + if ( strpos( $url, $data_from ) === 0 ) { + return true; + } else { + return false; + } + } + } + + static public function getDataFromURL( $url, $format, $mappings, $postData = null, $cacheExpireTime, $prefixLength ) { + $url_contents = self::fetchURL( $url, $postData, $cacheExpireTime ); + // Show an error message if there's nothing there. + if ( empty( $url_contents ) ) { + return "Error: No contents found at URL $url."; + } + + return self::getDataFromText( $url_contents, $format, $mappings, $url, $prefixLength ); + } + + static private function getDataFromPath( $path, $format, $mappings ) { + if ( !file_exists( $path ) ) { + return "Error: No file found."; + } + $file_contents = file_get_contents( $path ); + // Show an error message if there's nothing there. + if ( empty( $file_contents ) ) { + return "Error: Unable to get file contents."; + } + + return self::getDataFromText( $file_contents, $format, $mappings, $path ); + } + + static public function getDataFromFile( $file, $format, $mappings ) { + global $edgFilePath; + + if ( array_key_exists( $file, $edgFilePath ) ) { + return self::getDataFromPath( $edgFilePath[$file], $format, $mappings ); + } else { + return "Error: No file is set for ID \"$file\"."; + } + } + + static public function getDataFromDirectory( $directory, $fileName, $format, $mappings ) { + global $edgDirectoryPath; + + if ( array_key_exists( $directory, $edgDirectoryPath ) ) { + $directoryPath = $edgDirectoryPath[$directory]; + $path = realpath( $directoryPath . $fileName ); + if ( $path !== false && strpos( $path, $directoryPath ) === 0 ) { + return self::getDataFromPath( $path, $format, $mappings ); + } else { + return "Error: File name \"$fileName\" is not allowed for directory ID \"$directory\"."; + } + } else { + return "Error: No directory is set for ID \"$directory\"."; + } + } + + /** + * Recursive function, used by getSOAPData(). + */ + static public function getValuesForKeyInTree( $key, $tree ) { + // The passed-in tree can be either an array or a stdObject - + // we need it to be an array. + if ( is_object( $tree ) ) { + $tree = get_object_vars( $tree ); + } + $values = array(); + foreach ( $tree as $curKey => $curValue ) { + if ( is_object( $curValue ) || is_array( $curValue ) ) { + $additionalValues = self::getValuesForKeyInTree( $key, $curValue ); + $values = array_merge( $values, $additionalValues ); + } elseif ( $curKey == $key ) { + $values[] = $curValue; + } + } + return $values; + } + + static public function getSOAPData( $url, $requestName, $requestData, $responseName, $mappings) { + $client = new SoapClient( $url ); + try { + $result = $client->$requestName( $requestData ); + } catch ( Exception $e ) { + return "Caught exception: " . $e->getMessage(); + } + + $realResultJSON = $result->$responseName; + if ( $realResultJSON == '' ) { + return 'Error: no data found for this set of "requestData" fields.'; + } + + $realResult = json_decode( $realResultJSON ); + $errorKey = '#Error:'; + if ( array_key_exists( $errorKey, $realResult ) ) { + return 'Error: ' . $realResult->$errorKey; + } + + $values = array(); + foreach ( $mappings as $fieldName ) { + $values[$fieldName] = self::getValuesForKeyInTree( $fieldName, $realResult ); + } + return $values; + } + +} diff --git a/www/wiki/extensions/ExternalData/package.json b/www/wiki/extensions/ExternalData/package.json new file mode 100644 index 00000000..ea62e434 --- /dev/null +++ b/www/wiki/extensions/ExternalData/package.json @@ -0,0 +1,11 @@ +{ + "private": true, + "scripts": { + "test": "grunt test" + }, + "devDependencies": { + "grunt": "1.0.3", + "grunt-banana-checker": "0.4.0", + "grunt-jsonlint": "1.0.7" + } +} diff --git a/www/wiki/extensions/ExternalData/sql/ExternalData.sql b/www/wiki/extensions/ExternalData/sql/ExternalData.sql new file mode 100644 index 00000000..009362bb --- /dev/null +++ b/www/wiki/extensions/ExternalData/sql/ExternalData.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS `ed_url_cache` ( + `id` int(10) unsigned NOT NULL auto_increment, + `url` varchar(255) NOT NULL, + `post_vars` text, + `req_time` int(11) NOT NULL, + `result` longtext character set utf8 collate utf8_unicode_ci, + UNIQUE KEY `id` (`id`), + KEY `url` (`url`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
\ No newline at end of file |